RTMP播放器开发填坑之道

简介: 好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTMP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github:

好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTMP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github:


1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTMP播放器非常重要的指标,目前大牛直播SDK的RTMP直播播放延迟比开源播放器更优异(大牛直播SDK延迟在1秒左右,开源播放器如VLC,延迟在5-7秒),而且长时间运行下,大牛直播SDK播放端不会造成延迟累积,开源或第三方播放器,长时间运行,容易产生延迟累积;


部分服务器会缓存GOP,确保快速实现首屏播放,又不影响延迟,对此,我们设计了快速启动接口,快速render第一帧的同时,追到最新的播放数据:


2. 音视频同步处理:大多播放器为了追求低延迟,甚至不做音视频同步,拿到audio video直接播放,导致a/v不同步,还有就是时间戳乱跳等各种问题,大牛直播SDK提供的播放器,具备好的时间戳同步和异常时间戳矫正机制;


备注:如果是超低延迟模式下,可以0 buffer,不做音视频同步:


3. 支持多实例:大牛直播SDK提供的RTMP直播播放SDK支持在设备性能允许的情况下,支持多实例播放RTMP流数据,大多开源播放器对多实例支持不太友好;


除了常规的多实例外,比如大屏监控场景下,尽管我们CPU占用已经是行业内非常低的了,但是好多厂家下,不是每路都需要全帧播放,针对此种情况,我们做了实时只播放关键帧和全帧播放的接口设计,比如8个实例,其中不太重要的几路数据,可以设置只播放关键帧,需要重点关注时,点击全帧率播放即可,这样既节省了系统开销,又实现了多路播放的目的:


4. 支持buffer time设置:在一些有网络抖动的场景,播放器需要支持buffer time设置,一般来说,以毫秒计,开源播放器对此支持不够友好;


5. 实时静音:比如,多窗口播放RTMP流,如果每个audio都播放出来,体验非常不好,所以实时静音功能非常必要,开源播放器不具备实时静音功能;


6. 视频view旋转:好多摄像头由于安装限制,导致图像倒置,所以一个好的RTMP播放器应该支持如视频view实时旋转(0° 90° 180° 270°)、水平反转、垂直反转,开源或第三方播放器不具备此功能;


7. 支持解码后audio/video数据输出:大牛直播SDK接触到好多开发者,希望能在播放的同时,获取到YUV或RGB数据,进行人脸匹配等算法分析,开源播放器不具备此功能;


8. 实时快照:感兴趣或重要的画面,实时截取下来非常必要,一般播放器不具备快照能力,开源播放器不具备此功能;


9. 网络抖动处理(如断网重连):稳定的网络处理机制、支持如断网重连等,开源播放器对网络异常处理支持较差;


10. 长期运行稳定性:大牛直播SDK提供的RTMP直播播放SDK适用于长时间运行,开源播放器对长时间运行稳定性支持较差;


11. 实时下载速度反馈:大牛直播SDK提供音视频流实时下载回调,并可设置回调时间间隔,确保实时下载速度反馈,以此来监听网络状态,开源播放器不具备此能力;


12. 异常状态处理、Event状态回调:如播放的过程中断网,大牛直播SDK提供的播放器可实时回调相关状态,确保上层模块感知处理,开源播放器对此支持不好;


13. 设置视频填充模式(等比例显示):好多情况下,有些场景需要全view铺满播放,有些为了防止视频拉伸,可以设置成等比例缩放显示;


14. D3D检测:一般来说市面上的大多Windows都支持D3D,有些小众化的,只支持GDI模式绘制,所以为了更好的兼容性,这个接口非常必要;


15. 实时音量调节:实时音量调节特别是在多路播放的场景下,如大屏窗体环境下,通过更细粒度的音量调节,实现更好的播放体验;


16. 只播放关键帧:特别是大屏多实例场景播放的时候,尽管我们已经CPU占用非常低了,如果只是查看大概的监控情景,实现更多路的播放,只播放关键帧是个非常好的功能点,如果需要原始帧播放,可以实时调节即可;


17. 特定机型硬解码:特定机型硬解码,也主要是用于多路播放场景下,通过硬解码,实现更低的CPU占用目的。

相关文章
|
人工智能 安全
Sora内测资格申请保姆级教程,附申请提示词
快去申请,不知道什么时候会关闭,早就是优势
5465 3
|
数据可视化 图形学 开发者
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
2634 4
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
4134 1
|
前端开发
🔈阿里云百炼工作流里循环节点和批量节点,你需要知道的事儿
本文介绍了智能体应用和工作流应用中的循环节点与批量节点的使用方法及区别。两者都适用于多次调用任务,输入为列表,输出也为列表。不同在于:循环节点顺序执行,可依赖前序结果;批量节点并行执行,各任务独立。以旅游推荐为例,用户输入城市后,通过大模型生成景点列表,再用循环或批量节点生成详细攻略。最后通过脚本处理输出结果,形成清晰展示。
2442 22
|
机器学习/深度学习 自动驾驶 搜索推荐
今日热门论文推荐:多模态CoT综述、BlobCtrl、Being-0、DreamRenderer、WideRange4D 等
这篇调查论文是首个系统回顾多模态思维链(MCoT)推理的综述。论文阐明了相关基础概念和定义,提供了全面的分类法,并从不同角度对当前方法进行了深入分析。MCoT将思维链推理的优势扩展到多模态环境中,设计了各种方法和创新推理范式来解决图像、视频、语音、音频、3D和结构化数据等不同模态的独特挑战,在机器人技术、医疗保健、自动驾驶和多模态生成等应用中取得了广泛成功。
562 1
|
存储 持续交付 虚拟化
Docker与VMWare优缺点
【10月更文挑战第18天】Docker与VMWare优缺点
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
1263 2
|
存储 NoSQL Redis
如何修改docker默认数据目录
【7月更文挑战14天】
1560 3
|
小程序 JavaScript 前端开发
微信小程序更新操作失效解决和微信小程序引入echarts
该文介绍了微信小程序的两个问题及解决方案:1)当更新云开发数据库操作无效(返回更新0条数据)时,需检查并修改数据表的权限设置,确保`read`和`write`均为`true`。2)如何引入Echarts:从[GitHub](https://github.com/ecomfe/echarts-for-weixin)下载微信版Echarts,然后在小程序中引入组件,配置`app.json`,并在页面JS中导入并使用Echarts,提供示例代码展示柱状图、折线图和饼图的实现。
908 1
|
NoSQL Linux Redis
使用docker-compose搭建redis-cluster集群
使用docker-compose搭建redis-cluster集群
2185 0