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

目录
相关文章
|
缓存 API 开发工具
几款优秀的点播、RTSP/RTMP直播播放器介绍
介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API 易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电;提供 Android 平台下应用弹幕集成的解决方案。
2764 0
|
Ubuntu 开发工具
Ubuntu更换阿里云软件源
Ubuntu更换阿里云软件源
143413 0
|
10月前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
7916 80
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
应用服务中间件 Linux nginx
FFmpeg学习笔记(一):实现rtsp推流rtmp以及ffplay完成拉流操作
这篇博客介绍了如何使用FFmpeg实现RTSP推流到RTMP服务器,并使用ffplay进行拉流操作,包括在Windows和Linux系统下的命令示例,以及如何通过HTML页面显示视频流。
3164 0
|
9月前
|
JSON 运维 Ubuntu
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
2102 8
|
编解码 开发工具 Android开发
低延迟播放超高分辨率(4K+)帧率(50帧+)RTSP|RTMP流技术探讨和实现
为满足安检等场景需求,需支持4K+分辨率与50帧以上的高帧率视频流播放。实现这一目标的关键步骤包括:确保视频源支持高帧率输出、选用高性能RTSP/RTMP播放器以处理高负载视频解码、采用硬件解码以降低CPU负担、保证充足的网络带宽以维持流畅播放并控制延迟、合理配置播放器缓冲策略以适应网络波动、进行性能监控与调试以优化播放效果,以及确保播放器在多平台上的良好兼容性和表现。例如,大牛直播SDK的SmartPlayer在不同平台上实现了稳定且低延迟(150-300ms)的播放体验,支持多种视频和音频格式及多种功能,如多实例播放、事件回调、视频快照等。
748 1
|
编解码 网络协议 C#
wpf下如何实现超低延迟的RTMP或RTSP播放
本文介绍在Windows平台上使用大牛直播SDK的SmartPlayer模块实现在WPF中播放RTMP/RTSP流的方法。通过设置回调函数并选择RGB32格式,可以直接处理视频帧数据进行显示。此外,也可利用PictureBox控件简化视频流的展示。文章提供了示例代码,展示了如何初始化播放器、开始及停止播放,并演示了同时播放两路不同分辨率流的效果及CPU占用情况。SmartPlayer支持多实例播放、多种视频与音频格式、软硬解码、以及丰富的功能特性,适用于多种应用场景。
493 1
|
Docker 容器
docker:记录如何在x86架构上构造和使用arm架构的镜像
为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。
9249 2
|
弹性计算 网络安全
快速部署 RAGFlow 社区版
RAGFlow是一个基于深度文档理解的开源RAG(检索增强生成)引擎。当与LLM集成时,它能够提供真实的问答功能,并得到各种复杂格式数据的充分引用的支持。本文介绍如何通过计算巢快速部署 RAGFlow社区版。
快速部署 RAGFlow 社区版
|
Web App开发 安全 前端开发
新一代WebOffice高版本谷歌Chrome打开、编辑、保存微软Office/金山WPS解决方案大盘点
随着互联网技术的不断发展,越来越多的企业开始采用在线办公模式,微软Office Word 是最好用的文档编辑工具,然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的,如果可以实现Web在线预览编辑OffIce,肯定会还带来了更高效、便捷的办公体验,为我们的工作带来了更多可能性。
1551 91