VLC播放RTSP视频延迟问题

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

之前写过一篇关于在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左右,比修改之前实时性有明显改善,实时性很好,希望这篇文章能给需要相关资料的朋友提供一些帮助,如果有什么问题欢迎给我留言。

目录
相关文章
|
3天前
|
Linux 开发工具 图形学
Unity下如何实现RTMP或RTSP播放端录像?
Unity下如何实现RTMP或RTSP播放端录像?
|
22天前
|
编解码 开发工具 图形学
Unity环境下RTMP推流+RTMP播放低延迟解决方案
在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台+Android平台)和RTMP|RTSP拉流(Windows平台+Android平台+iOS平台)低延迟的解决方案,今天做个整体汇总,权当抛砖引玉。
|
22天前
|
编解码 监控 图形学
Windows平台Unity下播放RTSP或RTMP如何开启硬解码?
我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。
|
22天前
|
Linux 开发工具 图形学
Unity下如何实现RTMP或RTSP流播放和录制
在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程: 1. 通过Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式; 2. Unity下创建相应的RGB/YUV420等Shader; 1. Unity从各个平台获取图像数据来填充纹理即可。
|
23天前
|
开发工具 开发者 Windows
QT实现低延迟的RTSP、RTMP播放器
好多开发者在QT环境下实现RTMP或RTSP播放时,首先考虑到的是集成VLC,集成后,却发现VLC在延迟、断网重连、稳定性等各个方面不尽人意,无法满足上线环境需求。本文以调用大牛直播SDK(官方)的Windows平台播放端SDK为例,介绍下如何在QT下实现低延迟的RTMP|RTSP播放器,废话不多说,先上图:
|
23天前
|
vr&ar 开发工具 图形学
Windows平台Unity3d下如何同时播放多路RTSP或RTMP流
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。
|
23天前
|
监控 开发工具 C++
Windows平台RTMP/RTSP播放器如何实现实时音量调节
RTMP或RTSP直播播放音量调节,主要用于多实例(多窗口)播放场景下,比如同时播放4路RTMP或RTSP流,如果音频全部打开,几路audio同时打开,可能会影响用户体验,我们通用的做法是支持播放端实时静音,更细粒度的做法是可以实时调节每一路RTMP/RTSP流的音量。
|
23天前
|
存储 编解码 开发工具
RTMP/RTSP推送端和RTMP/RTSP播放端录像设计探讨
好多开发者认为,无论是RTSP/RTMP推送端还是RTSP/RTMP播放端,涉及到录像,只要2个接口足矣:开始录像、停止录像。
|
23天前
|
网络协议 开发工具 C#
Windows平台如何快速实现RTSP/RTMP直播播放
前段时间,我们在 https://blog.csdn.net/renhui1112/article/details/104143794 提到“RTSP播放器开发过程中需要考虑哪些关键因素”,本次主要介绍,如何调用SDK实现RTSP/RTMP播放能力。
|
23天前
|
开发工具 图形学 Android开发
如何在Unity3d平台下低延迟播放RTMP或RTSP流
随着VR类、工业仿真、智慧城市等场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放,好多公司用起来体验都非常好,以下介绍大概实现流程。