VLC播放RTSP视频延迟问题

之前写过一篇关于在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”,发现有很多文件包含这个值,下面是搜索的结果

点击(此处)折叠或打开

  1. vlc/src/libvlc-module.c: add_integer( "network-caching", CLOCK_FREQ / 1000,
  2. vlc/NEWS: - --network-caching specifies caching for network resources,
  3. vlc/modules/gui/macosx/simple_prefs.m: TestCaC("network-caching", 10/3);
  4. vlc/modules/gui/macosx/simple_prefs.m: CaC("network-caching", 10/3);
  5. vlc/modules/gui/qt4/components/open_panels.cpp: emit methodChanged( qfu( "network-caching" ) );
  6. vlc/modules/gui/qt4/components/simple_preferences.cpp: TestCaC( "network-caching", 10/3 );
  7. vlc/modules/gui/qt4/components/simple_preferences.cpp: CaC( "network-caching", 10/3 );
  8. vlc/modules/access/file.c: *pi_64 = var_InheritInteger (p_access, "network-caching");
  9. vlc/modules/access/rtp/rtp.c: *v = INT64_C(1000) * var_InheritInteger (demux, "network-caching");
  10. vlc/modules/access/ftp.c: * var_InheritInteger( p_access, "network-caching" );
  11. vlc/modules/access/live555.cpp: * var_InheritInteger( p_demux, "network-caching" );
  12. vlc/modules/access/http.c: * var_InheritInteger( p_access, "network-caching" );
  13. vlc/modules/access/sftp.c: * var_InheritInteger( p_access, "network-caching" );
  14. vlc/modules/access/udp.c: * var_InheritInteger(p_access, "network-caching");
  15. vlc/modules/access/smb.c: * var_InheritInteger( p_access, "network-caching" );
  16. vlc/modules/access/tcp.c: * var_InheritInteger( p_access, "network-caching" );
  17. vlc/modules/access/rtsp/access.c: * var_InheritInteger(p_access, "network-caching");
  18. vlc/modules/access/mms/mmsh.c: * var_InheritInteger( p_access, "network-caching" );
  19. vlc/modules/access/mms/mmstu.c: * var_InheritInteger( p_access, "network-caching" );
  20. vlc/modules/access/vnc.c: * var_InheritInteger( p_demux, "network-caching" );
  21. 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,这里可以根据各自的需要加以修改,分母越大,这个值就越小,实时性也就越好,当然跟前面所说一样,不能太小

 

点击(此处)折叠或打开

  1. 1832 //add_integer( "network-caching", CLOCK_FREQ / 1000,
  2. 1833 // NETWORK_CACHING_TEXT, NETWORK_CACHING_LONGTEXT, true )
  3. 1834 add_integer( "network-caching", CLOCK_FREQ / 3000,
  4. 1835 NETWORK_CACHING_TEXT, NETWORK_CACHING_LONGTEXT, true )

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

时间: 2024-08-07 13:02:54

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

rtmp延时 vlc ffplay-ffplay和vlc播放rtmp流延迟不一致,如何消除延迟

问题描述 ffplay和vlc播放rtmp流延迟不一致,如何消除延迟 公司写了一个rtmp server,从摄像头获取的.h264流封装后发送到client端 1,用ffplay播放这个rtmp流,延迟有4秒,但是我在画面上右击几下,发现延迟很短了,基本上算是同步上了,这个是啥原因?右击或左击都会打印[swscaler @ 0xb56c7d20] deprecated pixel format used, make sure you did set range correctly 这个是干啥子的

live555 rtsp vlc-请问如何用live555搭建RTSP服务器,并使用VLC播放

问题描述 请问如何用live555搭建RTSP服务器,并使用VLC播放 如题,我的系统是win7 64位,怎么用live555搭建RTSP服务器,视频源是本地视频文件 ,请问如何实现.请各位大神指点 解决方案 http://blog.sina.com.cn/s/blog_80be40500101euo7.html 解决方案二: http://download.csdn.net/detail/yong_hen/8165971 解决方案三: 使用VLC和live555MediaServer搭建RTS

red5服务器的demo【publisher】播放视频延迟问题

问题描述 red5服务器的demo[publisher]播放视频延迟问题 本地配置red5服务器成功后,下载自带的demo[publisher]进行视频测试, 视频播放没有问题,但是用VLC播放器播放此rtmp流,存在近10秒的延迟. 在网上找了一个Android连接red5服务器进行视频的demo,调试成功后, 手机摄像头数据能在[publisher]界面显示,但依然存在视频延迟的问题. 麻烦对于red5熟悉的大神们帮忙解决下啊! 个人觉得red5自带的demo都存在延迟问题,是不是得对其服务

resp流播放-Android rtsp视频监控播放 不能四分屏播放

问题描述 Android rtsp视频监控播放 不能四分屏播放 用别人的视频框架,发现用4个VideoView播放时,全部都在最后一个VideoView中播放,求大神帮我看看怎么改,附上播放视频所用的框架CSDN移动问答

vlc-C#开发 怎么用VLC播放视频byte[]

问题描述 C#开发 怎么用VLC播放视频byte[] 需求是这样的,本地保存的文件是加过密的,通过解密得到的是byte[],想在不保存成文件的情况下一边解密影片,一遍播放视频,求指点.谢谢~ 小弟菜鸟,请多多指导~最好有代码示范一下~ 解决方案 http://download.csdn.net/download/youorwu/4112791 解决方案二: 非常感谢啊,不过我要的不是VLC程序,我是想自己用c#编程实现,用vlc的动态库,不知道你是否直到如何做呢?

Swift 使用ijkplayer框架播放直播视频2(RTSP视频流播放)

我介绍了 ijkplayer 框架的配置和使用.当时使用的是 ijkplayer 默认的编译配置,也就是精简配置.这种编译出来的包比较小,也支持大多数的视频格式.比如前文的 RTMP 或 HTTP 协议的直播视频都是可以播放的. 但有时我们需要支持更多的视频类型(比如做 RTSP 协议的视频直播),那么就需要修改默认的编译配置. 1,将Ijkplayer项目下载到本地,这个就不多说了 git clone https://github.com/Bilibili/ijkplayer.git ijkp

谷歌浏览器Chrome播放rtsp视频流解决方案

代码中的具体参数含义,大家可以移步这里: https://wiki.videolan.org/Documentation:WebPlugin/   找半天,HTML5的可以支持RTMP 但是无法播放RTSP,flash也止步于RTMP,最后同事推荐了个开源的好东东 VLC ,请教谷歌大神之后,这货果然可以用来让各浏览器(IE activex方式,谷歌.FF)实现播放RTSP视频流,那真是极好的~~ 废话不多说了附上参考文档和案例,大家自己看吧. 视频是用的海康网络摄像头(支持RTSP,标准H.2

rtsp-跪求大神指教Android下播放RTSP实时流问题!

问题描述 跪求大神指教Android下播放RTSP实时流问题! 小弟在做一个Android客户端,用于监控电脑端摄像头传过来的流,就是能在Android客户端看到电脑摄像头看到的东西.现在遇到了问题不会解决.1.先用了DarWin来充当流服务器,然后它里面有配置一个端口和地址,然后调用rtsp://218.192.127.43:554/live.sdp电脑上安装一个VLC.然后就可以看到摄像头传来的画面了.2.我想在Android端也实现这样的功能.我用SurfaceView,Mediaplay

摄像头-请问如何用VLC播放流媒体文件?

问题描述 请问如何用VLC播放流媒体文件? 我的硬件平台是海思的hi3516c+sony imx122的摄像头,然后在别人的帮助下,根据海思提供的sdk里面的sample例子在linux搭建了一个服务器,用rtsp来实现流的控制,RTP实现的视频图像的传输 因为我摄像头采集到的图像经过海思内部H.264的编码了,图像数据没有保存到本地,如果没有收到客户端RTSP发来的play行文那么这一帧数据就会丢掉,现在我想利用VLC这个播放器先测试下自己的服务器是否编写正确,但是我发现VLC播放器播放rts