【技术分享】如何实现功能完备性能优异的RTMP、RTSP播放器?

技术背景

这几年,我们对接了太多有RTSP或RTMP直播播放器诉求的开发者,他们当中除了寻求完整的解决方案的,还有些是技术探讨,希望能借鉴我们播放端的开发思路或功能特性,完善自己的产品。

忙里偷闲,今天我们就再聊一聊老生常谈的问题:如何实现功能完备性能优异的RTMP、RTSP播放器?

 

技术剖析

这里我们说的播放器,系直播播放,确切的说,是如何在保障播放体验的情况下,实现低延迟的RTMP或RTSP播放模块。

一个播放器,常规的关注点,主要有几个方面:延迟、资源占用率(特别是性能一般的机器多路播放场景下)、多实例支持、异常网络处理(非常稳定的网络环境不太现实)、实时状态回调、长时间运行稳定性等,下面,我就大概聊聊,我们关注的一些点:

1. 低延迟:这个功能诉求不再赘述,大多直播场景或有交互诉求的场景,对延迟的要求非常高,如果延迟过大,体验大打折扣。无论是RTMP还是RTSP播放器,我们目前都是毫秒级的体验。更重要的长时间运行,不会发生内存泄漏或其他异常。

2. 音视频同步处理:在极端低延迟下,音视频同步是可以忽略的,如果超过200ms的音视频时间差值,感官体验还是很差的,除此之外,还有些前端RTMP或RTSP时间戳会乱跳,这种也需要很好的兼容和矫正。

3. 支持多实例:多实例播放,这里分两块,一块Windows平台的,一块移动端,移动端一般来说多实例,建议控制在4个以内,Windows平台一般来说设备性能不会太差,但是随着音视频这块配套设备的提升和产品诉求,越来越多的场景下,开始对高分辨率高码率提出了要求,这对多实例的播放,就有很大挑战,解一路绘一路一般机器,只要程序写的不是太差,也不会太大性能瓶颈,但如果是同时4路8路甚至12或16路呢?我想大多自己拿开源改的播放器,都已经没法正常使用了;

4. 支持buffer time设置:buffer time设置,这里都可以理解,说白了就是为了异常网络环境下,尽可能缓冲点数据,提升播放流畅度,buffer time我们一般是按照毫秒设置,还有按照帧的,确切的说应该叫buffer frame,大家觉得哪种更好一些?

5. RTSP TCP/UDP模式设定自动切换:TCP、UDP模式设定这个好理解,好多设备在特定网络环境下,可能仅支持单模式,甚至有些服务器转出来的RTSP流,服务端就做了限定,如果一个通用的RTSP播放器,你就需要考虑,TCP、UDP模式自动切换的问题,比如RTSP TCP模式下收不到数据,达到超时时间后,你需要能自动切到UDP。

6. 实时静音、实时音量调节:实时静音,特别在多实例播放下,非常重要,实时音量调节,不再赘述,依赖系统音量调节,无法针对单个实例的audio音量做调整,好多播放器不支持实时音量调节;

7. 视频view旋转、水平反转、垂直反转:好多摄像头或一些移动单兵设备,由于安装或场景限制,导致图像倒置或旋转,一个像样的RTMP或RTSP播放器应该支持如视频view实时旋转(0° 90° 180° 270°)、水平反转、垂直反转;

8. 支持解码后audio/video数据输出:牛哥接触到好多开发者,希望能在播放的同时,获取到YUV或RGB数据,进行视觉算法的处理,这块就显得非常关键,特别是,回调需要尽量不影响性能;

9. 实时快照:实时快照的重要性不言而喻,这个我觉得应该是好多场景的标配;

10. 网络抖动处理(如断网重连):我们遇到好多开发者在做播放器选型的时候,说你们的RTMP和RTSP播放器除了非常低,长时间跑不挂,也没什么内存泄漏,资源占有低点,和我外面找的播放,其他也也测不出什么问题,那是因为大多测试是在内网稳定的网络环境下,网络抖动等异常处理做不好,很难经受得住现场奇奇怪怪网络环境的考验;

11. 长期运行稳定性:长时间稳定性适用于比如一些智能设备或监控等场景,几乎常开的,如果资源占用持续升高、莫名crash等问题,非常恼火,问题也非常难定位;

12. log信息记录:为什么要有日志?日志的目的,就是在发现问题的时候,不至于两眼一抹黑,便于之前的问题还原,一般播放器,可能对这块记录并不成体系。

13. 实时下载速度反馈:为什么需要音视频流实时下载回调?其实就是为了确保实时下载速度反馈,以此来监听网络状态,当然,如果不需要,我们也快设置关闭,也可以设置回调时间间隔;

14. 异常状态处理Event状态回调好的播放器,不止服务稳定的网络环境,一些断网、网络抖动、等异常场景,我们可以实时回调相关状态,确保上层模块感知处理;

15. 关键帧/全帧播放实时切换:移动端,一般对只播放关键帧真正场景,需求不大,但是window端,好多场景下,因为需要播放非常多路,但是又不想占用太多的系统资源,如果全帧播放,路数过多,全部解码、绘制,系统资源占用会加大,如果能灵活的处理,可以随时只播放关键帧,全帧播放切换,对系统性能要求大幅降低,想全帧播放的时候,随时切换全帧绘制。

16. 特定机型硬解码:无论是Windows还是Android、iOS平台,如果需要播放高分辨率或多实例场景,硬解码的支持非常必要,

17. 跨平台,接口尽可能统一:跨平台这块,这个看开发者所服务的场景,像我们,是直接支持Windows、Linux、Android、iOS平台,一般开发者,可能只需要支持一两个平台即可,如果涉及到多个平台,尽可能的接口相对统一。

18. 可扩展:比如,我们RTMP、RTSP播放器,针对Unity平台的配套解决方案,Unity环境下调用我们原生的RTMP、RTSP播放模块,通过回调YUV/RGB数据,在Unity绘制,实现Unity环境下低延迟播放的友好体验,此外,移动端,也可以用于Flutter框架下。

总结

不管是基于开源播放器二次开发,还是全自研内核,一个好的RTMP播放器或RTSP播放器,设计的时候,更多考虑的应该是如何做的更灵活、更稳定、延迟更低、资源占用更小,单纯的几个接口,很难满足通用化的产品诉求,啰啰嗦嗦说了这么多,权当抛砖引玉,感兴趣的开发者,可以酌情参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我正在参加2022年度博客之星评选,大家帮我点个五星好评

大家好,我是音视频牛哥,致力于跨平台的实时RTMP推流、转发、RTMP/RTSP直播播放、GB28181设备接入。 有幸参加2022年度博客之星评选,欢迎大家帮点五星好评。如果我的博客能给开发者带来哪怕一丝启发,对博主来说,也甚感…

Win10系统切换输入法快捷键设置方法

无论是家用电脑还是办公电脑,一般都没有单一的输入法。有些人每次使用时都必须使用鼠标单击,其实真的很麻烦。Windows10系统切换输入法与以往的都不同,Win10系统如何修改切换输入法按键?就此问题,小编今天就把Win10切换输入法快捷…

rtmp/rtsp/hls公网真正可用的测试地址

相信大家在调试播放器的时候,都有这样的困惑,很难找到合适的公有测试源,以下是大牛直播SDK(GitHub地址)整理的真正可用的直播地址源。 其中,rtmp和rtsp的url,用我们播放器验证通过。 1. rtmp:…

Firefox火狐浏览器怎么设置中文 火狐浏览器语言设置方法

如果下载的是官方版的火狐浏览器,默认的预言可能会是英文版的,如何将火狐浏览器设置中文的呢? 1、打开浏览器,在地址栏中输入about:config,然后按下回车。 2、在列表中找到“general.useragent.locale”,双击&#…

公网可用的RTMP、RTSP测试地址(更新于2021年3月)

好多博客提到的公网可测试的RTSP和RTMP URL大多都不用了,以下是大牛直播SDK(Github)于2021年3月亲测可用的几个URL,有其他可用的URL,也欢迎大家在评论区回复。 RTMP流地址 湖南卫视:rtmp://58.200.131.2:1935/livetv/hunantv (7…

Unity环境下RTMP推流+RTMP播放低延迟解决方案

在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台Android平台)和RTMP|RTSP拉流(Windows平台Android平台iOS平台)低延迟的解决方案,今天做个整体汇总,权当抛砖引玉。 1. Unity环境下RTM…

mac怎么设置默认浏览器 mac默认浏览器设置方法

现在很多人都开始使用mac电脑,而有些人不大喜欢Safari浏览器,或许也有别的原因导致用户想要将Mac OS X系统下的默认浏览器换成其他更符合自己口味的浏览,如果你你不会换,那就由小编为你解答mac怎么设置默认浏览器。 mac默认浏览器…

麒麟操作系统|Linux下低延时RTMP|RTSP直播播放实现

背景 国产操作系统多为以Linux为基础二次开发的操作系统。2014年4月8日起,美国微软公司停止了对Windows XP SP3操作系统提供服务支持,这引起了社会和广大用户的广泛关注和对信息安全的担忧。而2020年对Windows7服务支持的终止再一次推动了国产系统的发展…

基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送

背景 Windows操作系统自问世以来,以其简单易用的图形化界面操作受到大众追捧,为计算机的普及、科技的发展做出了不可磨灭的功绩,也慢慢的成为人们最依赖的操作系统。在中国,90%以上的办公环境都是Windows,…

Windows11关机键在哪 Win11系统关机键的位置

很多用户更新了Win11系统之后就发现Win11系统有很多功能的位置都不一样了,导致用户们找不到自己想要的功能。就像是关机功能,很多用户更新了系统之后发现自己找不到关机键了,下面让小编教教大家吧,希望能帮助您。 Windows11关机键…

如何快速实现Android平台前端设备接入能力

技术背景 SIP(会话初始化协议)是在 IP网络上进行多媒体通信的应用层控制协议,以几种RFC的形式提供,其中最重要的是包含核心协议规范的RFC3261。该协议用于创建,修改和终止与一个或多个参与者的会话。通过会话,我们了解了一组进行…

如何解决Win11系统显示你的账户已被停用

现在Win11系统是现在非常火热的电脑操作系统,很多用户都想去升级体验,最近有使用Win11系统用户在咨询这样一个情况,就是电脑突然提示“你的账户已被停用,请向系统管理员咨询”,遇到这样的问题该如何解决呢?下面小编就…

Win11系统创建虚拟桌面的方法

现在Win11系统是非常火热的电脑操作系统,现在已经有越来越多的小伙伴在使用Win11系统,Win11系统集成了Windows10的许多便利的功能,例如虚拟桌面,但是有的朋友不知道在Windows11上怎么进行操作。接下来小编就来为大家简单的介绍一下…

Win10系统开机任务栏一直转圈怎么解决

Win10系统可说是最常用的系统之一,不过最近有不少使用Win10系统的小伙伴发现自己开机之后任务栏一直转圈,那么Win10系统开机任务栏一直转圈怎么解决呢?下面小编就带给大家带来了Win10系统开机任务栏一直转圈的解决方法。 Win10系统开机任务栏一直转圈怎…

Win10系统电脑不会一键还原系统怎么解决

在我们电脑遇到大问题之后,还原系统是最简单有效的办法,现在网络上有很多种系统还原系统的办法,有简单的也有复杂的,Win10系统电脑不会一键还原系统怎么解决呢,这个办法是我觉得最简单的办法之一,小伙伴们可…

Win10本地账户怎么更改为Microsoft账户

在使用电脑的时候,用户想要使用任何Microsoft服务,就需要创建一个Microsoft帐户。那有些用户一直使用的本地账户,这该怎么切换成Microsoft账户呢?其实方法很简单,小编这里就教教大家Win10本地账户更改为Microsoft账户的吧。 Win…

edge浏览器怎么恢复默认设置 edge恢复默认设置方法

edge浏览器也是我们最常用的浏览器之一了,但是edge浏览器还存在着一些小问题,比方说edge浏览器不能看视频等问题,那着个时候可以尝试恢复默认设置能让浏览器恢复正常。那edge浏览器怎么恢复默认设置?请看下面。 1、从win10的开始菜单中找到…

桔子浏览器电脑版如何登录 桔子浏览器PC版账号登录教程

桔子浏览器电脑版如何登陆?桔子浏览器支持账号登录功能,能够帮助用户收藏自动备份,不用担心丢失的情况,今天我们就来讲讲怎么登录账号。 桔子浏览器PC版账号登录教程 1、打开桔子浏览器点击【工具】-【登录桔子浏览器】 桔子浏览器电脑版…

Win11任务栏图标重叠怎么办 Win11任务栏图标重叠的解决方法

Win11操作系统也推出一段时间了,不少小伙都有下载体验,但有一些小伙伴在使用Win11系统的时候发现自己任务栏图标重叠在一起,那么碰到这种情况应该怎么办,下面就和小编一起来看看有什么解决方法。 Win11任务栏图标重叠怎么办&…

怎么隐藏Windows11开始菜单中的推荐面板

相信现在很多用户都在使用Win11操作系统,在“开始”菜单的下半部分包含了“推荐”面板。目前它用于突出显示最近使用的文件和最近安装的应用程序,但有些人担心Microsoft会使用它向用户发送其他推荐的垃圾邮件。如果你不喜欢它,这里是如何禁用…