VLC播放RTSP视频延迟问题 (转)

原帖地址:http://blog.chinaunix.net/uid-26611383-id-3755283.html

================================================================================

之前写过一篇关于在Linux平台上编译android平台上VLC播放器源代码的文章,vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg。而且这款播放器还支持RTSP协议,这个主要是用开源的live555来实现的,live555这个库以后还需要认真研习。

一:PC端(Windows平台)VLC播放RTSP视频延迟问题解决

前几天用PC平台上的VLC播放RTSP流媒体时延迟时间较长,存在1s左右的延迟,效果不是很好,后来查了资料,发现这个延迟时间是可以修改的。

找到工具->首选项,然后参数设置左下角选择“全部”,左边选择 “输入编解码”->“网络缓存”选项,可以根据具体需要加以修改,具体见下图不过这个值不要太小,否则缓存太小,播放视频的过程中会很卡

如果网络环境较好,300ms以内效果很好,实时性较好。

二:PC端(Linux平台)VLC播放RTSP视频延迟问题解决

这里我的测试平台是ubuntu,linux平台上的vlc可以以命令行的方式来运行,而命令行是可以带参数的,我们只需要在参数里面指定这个延迟时间就可以了,下面是具体的命令行形式,大家可以根据各自需要加以调整

vlc rtsp://192.168.1.1:8556/test.avi  --newwork-caching=300

rtsp的地址要根据自己需要播放的视频地址修改,网络延迟时间也可以根据需要修改,这个值越小,实时性越好,当然太小了播放会很卡,或者设置的值失效,一般建议在100-300之间

三. Android平台VLC播放RTSP视频延迟问题解决

首先在Android平台上的VLC播放器不像windows平台上UI里提供了设置延迟时间这一项功能,其次也不像Linux平台上可以以命令行的方式来运行,我们也就不能通过设置参数的方式来修改这个延迟时间,怎么办呢,只剩下最后一条路,修改源代码,将延迟时间写死在源码里,有了前面linux平台下设置参数的经验,就可以在源码里面通过grep工具来查找”network-caching”,发现有很多文件包含这个值,下面是搜索的结果

vlc/src/libvlc-module.c: add_integer( "network-caching", CLOCK_FREQ / 1000,

vlc/NEWS: - --network-caching specifies caching for network resources,

vlc/modules/gui/macosx/simple_prefs.m: TestCaC("network-caching", 10/3);

vlc/modules/gui/macosx/simple_prefs.m: CaC("network-caching", 10/3);

vlc/modules/gui/qt4/components/open_panels.cpp: emit methodChanged( qfu( "network-caching" ) );

vlc/modules/gui/qt4/components/simple_preferences.cpp: TestCaC( "network-caching", 10/3 );

vlc/modules/gui/qt4/components/simple_preferences.cpp: CaC( "network-caching", 10/3 );

vlc/modules/access/file.c: *pi_64 = var_InheritInteger (p_access, "network-caching");

vlc/modules/access/rtp/rtp.c: *v = INT64_C(1000) * var_InheritInteger (demux, "network-caching");

vlc/modules/access/ftp.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/live555.cpp: * var_InheritInteger( p_demux, "network-caching" );

vlc/modules/access/http.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/sftp.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/udp.c: * var_InheritInteger(p_access, "network-caching");

vlc/modules/access/smb.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/tcp.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/rtsp/access.c: * var_InheritInteger(p_access, "network-caching");

vlc/modules/access/mms/mmsh.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/mms/mmstu.c: * var_InheritInteger( p_access, "network-caching" );

vlc/modules/access/vnc.c: * var_InheritInteger( p_demux, "network-caching" );

vlc-android/jni/libvlcjni.c: libvlc_media_add_option(p_md, ":network-caching=1500"); 

对这些文件的代码进行了一些分析,最后发现目标在vlc/src/libvlc-module.c这个文件,于是修改这个文件的1832行,如下图所示,将CLOCK_FREQ / 1000改为 CLOCK_FREQ / 3000,这里可以根据各自的需要加以修改,分母越大,这个值就越小,实时性也就越好,当然跟前面所说一样,不能太小

1832 //add_integer( "network-caching", CLOCK_FREQ / 1000,

1833 // NETWORK_CACHING_TEXT, NETWORK_CACHING_LONGTEXT, true )

1834 add_integer( "network-caching", CLOCK_FREQ / 3000,

1835 NETWORK_CACHING_TEXT, NETWORK_CACHING_LONGTEXT, true ) 

最后再编译运行发现延迟时间大概在200ms左右,比修改之前实时性有明显改善,实时性很好,希望这篇文章能给需要相关资料的朋友提供一些帮助。

======================================================================================

真是太强大了,正是我所需要的,多谢原帖。

VLC播放RTSP视频延迟问题 (转)

时间: 2024-11-13 15:36:26

VLC播放RTSP视频延迟问题 (转)的相关文章

VLC播放RTSP视频延迟问题

VLC播放RTSP视频延迟问题 配置 VLC 以播放 RTSP/RTP 流 vlc播放rtp封装的h.264延时很大是什么原因? 开启打印: VLC的工具->消息->等级 调整为2,就可以看到VLC的错误调试信息.

【FFmpeg】ffplay播放rtsp视频流花屏问题 (转)

问题描述:ffplay播放rtsp视频流时,播放过程中随机出现花屏现象. 基本流程学习:阅读ffplay源码,熟悉其播放rtsp视频流的基本流程. 在ffplay源码阅读和分析的基础上,画出了其播放rtsp的函数调用关系,如下图所示: avformat_open_input函数根据输入的文件名,与rtsp_read_packet关联. rtsp_read_packet完成每个rtp包的读取和解析,读取主要是利用rtp_read从缓冲区获取数据,解析主要是根据rtp协议,解析rtp包,得到h264

使用canvas来实时播放RTSP视频

HTML5的标签可以用使用下来面的方式来播放静态视频 <video width="320" height="240" controls="controls"> <source src="movie.ogg" type="video/ogg"> <source src="movie.mp4" type="video/mp4"> You

嵌入页面的VLC播放rtsp流卡顿

目前正在开发开源软件VLC嵌入到页面中播放rtsp数据流,但是发现嵌入页面的VLC(页面启动时,安装VLC的插件)播放rtsp流相比较VLC的播放器而言,会有卡顿的现象,请问有没有朋友遇到类似的问题,如果有请帮忙解答下,不甚感激.

网页中加入VLC的播放RTSP流的控件

代码例子,加入就能在网页中播放RTSP流. <p align="center"> <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab" width="800" height=&quo

openSUSE 播放使用VLC播放视频

openSUSE 使用VLC播放视频 linux视频播放 为什么 通常我们在安装号vlc后,由于版权的原因,是无法获取视频的解码器的.我们需要下载第三方的解码器帮助我们进行解码. 过程如下: 添加packman地址 sudo zypper ar -cfp 90 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_15.0/ packman 添加vlc的软件源 sudo zypper ar -cfp 90 http://down

Qt编写的项目作品8-RTSP播放器+视频监控(vlc版本)

一.功能特点 多线程实时播放rtsp视频流. 支持windows+linux+mac. 多线程显示图像,不卡主界面. 自动重连网络摄像头. 可设置边框大小即偏移量和边框颜色. 可设置是否绘制OSD标签即标签文本或图片和标签位置. 可设置两种OSD位置和风格. 可设置是否保存到文件以及文件名. 可播放本地视频文件,支持设置帧率. 支持h265视频流+rtmp等常见视频流. 可暂停播放和继续播放. 支持回调模式和句柄两种模式. 自动将当前播放位置和音量大小是否静音以信号发出去. 提供接口设置播放位置

vlc 播放器的点播和广播服务

vlc 是一个开源的,同时跨平台的播放器.在研究 rtsp 协议时发现,它同时还是一个强大的流媒体服务器 VLM VLM(VideoLAN Manager) 在 vlc 中是一个小型的媒体管理器,它能在只启用一个 vlc 的实例的情况下管理多个流.它只能在 telnet 接口和 http 接口下被控制 平时如果是 GUI 界面,那就是通过鼠标点击窗口的按钮和菜单来控制程序.在 linux 下,习惯用命令行来控制程序的运行. vlc 还提供另外两种方式来受控.一种是 telnet 的接口,它接受

vlc播放流程分析

当点击播放文件或者输入要播放的文件后,vlc会执行一系列的流程. 首先需要了解视频以及流媒体处理及播放的流程,由链接中的描述,视频以及流媒体处理时,首先要解协议(http,rtmp,rtsp等),然后是解封装(mp4,mkv,avi等),获得音频码流和视频码流,分别解码后,再根据时间戳进行同步.使用vlc点击播放后,就是这一系列的流程. 点击播放RTSP摄像头后,vlc会开启线程对输入的文件或者url进行分析(src/playlist/preparser.c),根据视频源属性做一些准备工作,包括