添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
vlc-android播放网络视频流时网络延时参数设置




    
:
options.add(":file-caching=1500");
options.add(":network-caching=1500");
options.add(":codec=mediacodec,iomx,all");
options.add(":demux=h264");
值越大,缓存越大,延迟越大。
 下面是摘录别人的pc端的方法,供大家参考
vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg。而且这款播放器还支持RTSP协议,这个主要是用开源的live555来实现的,live555这个库以后还需要认真研习。

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

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

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

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

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

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

vlcrtsp://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 networkresources ,

  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. 1834add_integer ( "network-caching" , CLOCK_FREQ / 3000 ,

  4. 1835NETWORK_CACHING_TEXT , NETWORK_CACHING_LONGTEXT , true )

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

为进一步降低延迟,采用极端方法修改 VLC 读缓冲机制。 0x01 VLC 读缓冲机制 对于一个rtmp 流 的读取,发起端在Demux module中,具体在该模块的Demux方法中调用ffmepg的接口av_read_frame读取每一帧数据。但是这个read的接口实在不清晰,经过了多个抽象层的封装,最后真正指向了rtmp_read接口。还是通过一个图来看会比较清晰: 了解一定 播放 器知识的同学应该都知道, 播放 器内部是有 缓存 的(非直播场景)。 缓存 的作用主要是解决生产者和消费者速度的不匹配,给用户更好的使用体验。例如,在 网络 不稳定的情况下,可以提前 缓存 部分数据确保视频 流 畅 播放 ;在 网络 差的情况下,可以及时弹出缓冲标志提示用户当前 网络 不好。下面简单介绍下 VLC 的Buffering机制。 我们在使用 VLC 播放 视频时,能够明确的看到类似如下日志: 08-0613:48:51.8451149512427D VLC : [894f9830/308b...
VLC 版本2.0.1         最近研究IP-STB音视频同步问题,发现方案自带的自动STC在 网络 延时 过大时,不能成功同步音视频。在参考了 VLC 的串 流 播放 机制后,以为适当缓冲可以解决此问题,可惜最终结果是稍有缓解,并不能从根本上解决。但这种缓冲 时间 的计算,对于基于 网络 这种音视频数据的注入有一定的参考意义。         1、最初的线索:          使用-vvv参数启动VL
步骤2:从侧边栏菜单中选择“串 流 输出”(Stream Output)。影响缓冲区大小的 设置 标记为“ 流 输出混 流 器 缓存 (毫秒)”(Stream Output Muxer Caching)。 步骤3:在“ 流 输出混 流 器 缓存 (毫秒)”后面的输入框中输...