RTSP播放器开发填坑之道

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

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


18. TCP-UDP设置:考虑到部分服务器或硬件设备或网络环境对TCP、UDP某一个支持的比较好,我们加了设置接口;


19. TCP-UDP自动切换:这个是更细力度的接口,比如默认设置了TCP模式,TCP模式下收不到数据,超时后,自动切换到UDP模式尝试,一般开源播放器不具备此功能;


20. 超时时间设定:比如10-12秒收不到数据,自动重连,一般开源播放器支持不好。

总结

基于上述因素,想做好一个RTSP或者RTMP播放器,需要考虑的点实在太多了,特别是细节问题,开源的表面看省了前80%的经历,但是因为大多开源播放器系统比较庞大,适用于点播播放,却对直播播放支持很差,如果要做细粒度的控制和bug修复,剩余20%的经历,可能会耗费研发人员更大的精力,不过换句话说,对技术人员成长还是非常有利的。

相关文章
|
安全 Unix 开发工具
【git 实用指南】git 如何忽略文件权限
【git 实用指南】git 如何忽略文件权限
1174 2
|
Python
使用Python实现股票资金模拟盘交易
使用Python实现股票资金模拟盘交易案例
1104 2
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
消息中间件 PHP 数据安全/隐私保护
docker安装rabbitmq并配置hyperf使用
通过以上步骤,您可以实现在Docker容器中安装和配置RabbitMQ,并在PHP的Hyperf框架中进行集成和使用。这种方式为开发者提供了快速部署并实现消息队列解决方案的能力,同时维持了环境与生产环境的一致性,从而为开发高效的分布式应用程序提供了便利。
676 3
docker安装rabbitmq并配置hyperf使用
|
Java API PHP
获取1688商品详情API:步骤与代码示例
在电子商务领域,阿里巴巴的1688平台是一个广受商家和开发者欢迎的批发交易市场。若您是一名开发者,希望建立自己的应用程序或网站来获取并展示1688上的商品信息,您可能需要使用到1688提供的API接口。以下是获取1688商品详情API的详细步骤说明。
银河麒麟桌面操作系统中获取硬盘序列号
银河麒麟桌面操作系统中获取硬盘序列号
|
Kubernetes Perl 容器
在K8S中,replicaset 和deploy有何区别?
在K8S中,replicaset 和deploy有何区别?
|
机器学习/深度学习 搜索推荐
高斯-马尔科夫定理(Gauss-Markov theorem)
高斯-马尔科夫定理(Gauss-Markov theorem),也称为高斯-马尔科夫定理(Gauss-Markov theorem)或线性最小二乘定理(linear least squares theorem),是统计学中一个重要的定理,它描述了在一些假设条件下,普通最小二乘估计(Ordinary Least Squares, OLS)是线性回归模型中最优的无偏估计。
1674 1
|
前端开发 Java 应用服务中间件
springboot 升级(1.5.7.RELEASE升级到2.7.10) Tomcat启动报错
springboot 升级(1.5.7.RELEASE升级到2.7.10) Tomcat启动报错
|
域名解析 缓存 网络协议
如何在 Linux 上刷新本地 DNS 缓存?
如何在 Linux 上刷新本地 DNS 缓存?
2074 0
如何在 Linux 上刷新本地 DNS 缓存?

热门文章

最新文章