RTMP、RTSP直播播放器的低延迟设计探讨

​技术背景

没有多少开发者会相信RTMP或RTSP播放器,延迟会做到150-300ms内,除非测试过大牛直播SDK的,以Android平台启动轻量级RTSP服务和推送RTMP,然后Windows分别播放RTSP和RTMP为例,整体延迟如下:

大牛直播 SDK在保证超低延迟方面采取了多项技术措施。首先,其自有框架易于扩展,采用自适应算法,使得延迟更低、解码绘制效率更高。以 Windows 平台为例,海康摄像头 2560*1440 分辨率、8M 码率的 RTSP 流,SmartPlayer 延迟 200 毫秒左右,可满足平衡操控等低延迟场景。低延迟模式下,硬件性能无瓶颈的前提下,延迟可稳定在 150-300ms。

此外,大牛直播 SDK 的 RTSP 播放器支持 TCP 和 UDP 模式的自动切换,提高了播放的兼容性和灵活性,能够更好地适应不同的网络环境,减少延迟。同时,支持设置缓冲时间,以应对网络抖动等不稳定情况,确保播放的流畅性,在保证流畅性的同时也有助于控制延迟。

在技术实现上,底层原生模块把 RTSP|RTMP 流拉过来,做解析解码回调 YUV 或 RGB 数据到上层,在每个环节都做到极致,总体延迟可以达到 200 - 400ms。并且支持多实例播放,适用于需要同时监控多个视频源的场景,满足不同用户需求的同时也保证了低延迟性能。

如何设计低延迟的直播播放器

大牛直播 SDK 通过自有框架、自适应算法、协议自动切换、缓冲时间设置以及优化的技术实现等多方面措施,保证了超低延迟的播放效果。

自有框架如何降低延迟

大牛直播SDK的自有框架在降低延迟方面表现出色。它易于扩展,能够根据不同的应用场景进行灵活调整。这种自有框架在设计之初就以降低延迟为重要目标,通过优化各个模块之间的协作,提高数据处理效率。例如,在 RTMP 或 RTSP 直播播放器的设计中,从数据解析、解码、音视频数据同步到绘制等环节,自有框架能够确保数据传输的高效性,减少不必要的等待时间。同时,自有框架还能自适应不同的网络环境和硬件条件,自动调整参数以达到最佳的延迟效果。比如在网络状况不佳时,能够自动降低码率以保证流畅播放,同时尽量减少延迟的增加。此外,自有框架还通过优化内部算法,提高数据处理速度,进一步降低延迟。例如在解码过程中,采用高效的解码算法,充分利用硬件加速功能,如 GPU 加速,以快速处理大量的音视频数据。

自适应算法如何实现

大牛直播SDK的自适应算法是实现超低延迟的关键之一。该算法能够根据网络状况动态调整码率,确保直播服务的流畅性。例如,当网络带宽充足时,自适应算法会提高码率,以提供更高质量的视频画面;而当网络带宽受限或出现波动时,算法会自动降低码率,以减少数据传输量,保证视频的流畅播放,同时降低延迟。此外,自适应算法还能根据不同的硬件性能进行调整。如果硬件性能强大,算法会充分利用硬件资源,提高数据处理速度,进一步降低延迟;如果硬件性能有限,算法会自动优化参数,以确保在不影响播放质量的前提下,尽量降低延迟。在实际应用中,自适应算法会不断监测网络状况和硬件性能,并实时调整参数,以实现最佳的延迟效果。

RTSP播放器协议自动切换作用

大牛直播SDK的RTSP播放器支持 TCP 和 UDP 模式的自动切换,这在控制延迟方面起到了重要作用。不同的服务器可能支持不同的传输协议,自动切换功能可以提高播放的兼容性和灵活性。例如,在某些网络环境下,UDP 协议可能具有更低的延迟,但稳定性相对较差;而 TCP 协议则更加稳定,但延迟可能会稍高一些。通过自动切换功能,播放器可以根据实际情况选择最合适的传输协议,以达到平衡延迟和稳定性的目的。当网络状况良好时,播放器可以自动切换到 UDP 模式,以降低延迟;当网络出现抖动或不稳定时,播放器会自动切换到 TCP 模式,以保证播放的稳定性。这种自动切换功能使得播放器能够在不同的网络环境下都能保持较好的性能,为用户提供低延迟的播放体验。

缓冲时间设置如何控制延迟

大牛直播SDK支持设置缓冲时间,这是控制延迟的一个重要手段。缓冲时间的设置可以应对网络抖动等不稳定情况,确保播放的流畅性。如果缓冲时间设置得过长,虽然可以更好地应对网络波动,但会增加延迟;如果设置得过短,可能会导致播放卡顿。因此,合理设置缓冲时间是关键。例如,在网络状况较为稳定的情况下,可以适当缩短缓冲时间,以降低延迟;而在网络状况较差或不稳定时,可以适当增加缓冲时间,以保证播放的流畅性。同时,大牛直播 sdk 还会根据网络状况自动调整缓冲时间,以实现最佳的延迟和流畅性平衡。例如,当网络出现抖动时,自动增加缓冲时间,以避免播放卡顿;当网络恢复稳定时,逐渐减少缓冲时间,以降低延迟。

底层原生模块如何优化延迟

底层原生模块在优化延迟方面发挥了重要作用。以 Android 平台为例,原生模块拿到 RTSP 或 RTSP 流后,解码获取到原始的 YUV 或 RGB 数据,然后投递给上层应用。在这个过程中,为了降低延迟,原生模块会尽可能高效率地进行数据交互,减少数据的投递和拷贝。例如,采用优化的数据传输算法,确保数据能够快速、准确地传递到上层应用。同时,底层原生模块还会与上层应用进行紧密配合,根据不同的应用场景和需求进行优化。例如,在 VR 头显播放场景下,为了实现毫秒级延迟的播放,底层原生模块会与 Unity 进行高效的数据交互,确保数据能够快速绘制,减少延迟。此外,底层原生模块还会不断进行优化和改进,以适应不断变化的硬件和网络环境,为用户提供更低延迟的播放体验。

总结

做RTMP、RTSP播放器容易,做个好的播放器,真的要投入几十倍的精力,大牛直播SDK始于2015年,通过自有框架、自适应算法、RTSP 播放器协议自动切换、缓冲时间设置以及底层原生模块等多方面的优化,共同保证了超低延迟的播放体验。在实际应用中,这些技术手段相互配合,根据不同的网络环境和硬件条件进行自动调整,为用户提供了高质量、低延迟的直播服务。

相关推荐
WilliamLuo7 小时前
MP4结构初识-第一篇
前端·javascript·音视频开发
启明智显3 天前
视频直播5G CPE解决方案:ZX7981PG/ZX7981PMWIFI6网络覆盖
5g·直播·wifi6·5g cpe·无线路由器
音视频牛哥6 天前
Android平台如何拉取RTSP|RTMP流并转发至轻量级RTSP服务?
音视频开发·视频编码·直播
声知视界7 天前
音视频基础能力之 iOS 视频篇(一):视频采集
音视频开发
fareast_mzh7 天前
Setting Up a Simple Live Streaming Server on Debian 11
运维·debian·直播
关键帧Keyframe9 天前
音视频面试题集锦第 15 期 | 编辑 SDK 架构 | 直播回声 | 播放器架构
音视频开发·视频编码·客户端
伊织code12 天前
[2024最新] macOS 发起 Bilibili 直播(不使用 OBS)
macos·mac·web·直播·b站·bilibili
音视频开发技术13 天前
cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_
android·直播
关键帧Keyframe14 天前
iOS 不用 libyuv 也能高效实现 RGB/YUV 数据转换丨音视频工业实战
音视频开发·视频编码·客户端
关键帧Keyframe16 天前
音视频面试题集锦第 7 期
音视频开发·视频编码·客户端