RTMP如何实现毫秒级延迟体验?

​技术背景

在我们大多数音视频行业从业者的认知里,RTMP播放器的延迟通常可以做到2到3秒。实际上,在较为理想的网络环境和优化良好的系统设置下,RTMP播放器一样可以做到几百毫秒的延迟水平。今天就影响RTMP播放延迟的一些因素,做个大概的探讨,首先,无图无真相,看看我们实际开发的RTMP播放器,延迟大概做到什么水准:

绝大多数开发者,可能觉得,RTSP的延迟,一般来说是比RTMP低很多的,以下是大牛直播SDK的Android平台实现的屏幕采集功能,然后分别启动了轻量级RTSP服务,和推送到RTMP服务器。

Windows客户端通过SmartPlayer播放器,分别播放RTSP和RTMP流,延迟如下,可以看到,RTMP播放器拉流,一样可以达到毫秒级可满足平衡操控场景(比如远程机器人操控、无人机、矿场矿车、无人挖掘机等高危作业场景)的极低延迟体验:

如何实现低延迟RTMP播放

一、优化编码设置

选择高效的编码格式

  • H.264 是目前广泛使用的视频编码格式,具有较高的压缩效率和良好的兼容性。在使用 RTMP 传输时,可以选择 H.264 编码格式,并根据实际情况调整编码参数,以降低编码延迟。
  • 对于音频编码,可以选择 AAC 等高效的编码格式,减少音频编码的时间和数据量。

调整编码参数

  • 降低视频的分辨率和帧率可以减少编码的数据量,从而降低编码延迟。但是,分辨率和帧率过低会影响视频的质量,需要根据实际需求进行平衡。
  • 调整编码的比特率也可以影响编码延迟。降低比特率可以减少数据量,但可能会导致视频质量下降。需要根据网络状况和视频质量要求进行合理调整。
  • 开启编码的硬件加速功能可以提高编码效率,降低编码延迟。如果设备支持硬件编码,可以在编码软件中开启硬件加速选项。

二、优化服务器设置

选择高性能的服务器

  • 选择配置高、性能好的服务器可以提高服务器的处理能力和带宽,减少数据在服务器端的处理时间和排队等待时间,从而降低延迟。
  • 可以选择专业的流媒体服务器软件,如 Nginx RTMP ,SRS等,这些软件具有更好的性能和稳定性,可以提供更低的延迟。

调整服务器参数

  • 调整服务器的缓存设置可以影响延迟。降低缓存大小可以减少数据在服务器端的缓存时间,从而降低延迟。但是,缓存过小可能会导致播放不流畅,需要根据实际情况进行调整。
  • 开启服务器的实时推送功能可以减少数据在服务器端的处理时间,提高推送效率,从而降低延迟。实时推送功能可以在服务器软件的配置文件中进行开启。

三、优化网络设置

选择稳定的网络环境

  • 选择稳定、高速的网络环境可以减少网络延迟和丢包率,提高数据传输的效率,从而降低 RTMP 播放器的延迟。可以选择有线网络连接或者稳定的无线网络连接。
  • 如果使用无线网络连接,需要确保信号强度良好,避免信号干扰和衰减。可以使用信号增强器或者调整无线路由器的位置和参数,提高无线网络的稳定性和速度。

调整网络参数

  • 调整网络的带宽限制可以影响数据传输的速度和延迟。如果网络带宽有限,可以适当降低视频的分辨率和帧率,或者调整编码的比特率,以减少数据量,提高数据传输的效率。
  • 开启网络的 QoS(Quality of Service)功能可以优化网络流量,提高关键数据的传输优先级,减少延迟和丢包率。QoS 功能可以在路由器或者网络设备的设置中进行开启和配置。

四、优化播放器设置

选择低延迟的播放器

  • 不同的RTMP播放器在延迟方面可能会有所不同,如 VLC 播放器、PotPlayer 等,这些播放器,适用于音视频点播,功能大而全,但是对RTMP的支持,并不太友好,甚至需要5-7秒的延迟。可以采用比如大牛直播SDK的SmartPlayer这种专门为低延迟直播场景打造的具有更好的性能和更低的延迟专业播放器。

调整播放器参数

  • 调整播放器的缓存设置可以影响延迟。降低缓存大小可以减少数据在播放器端的缓存时间,从而降低延迟。但是,缓存过小可能会导致播放不流畅,需要根据实际情况进行调整。
  • 开启播放器的硬件加速功能可以提高播放效率,降低延迟。如果设备支持硬件解码,可以在播放器的设置中开启硬件加速选项。

RTMP播放器功能设计

以大牛直播SDK的SmartPlayer播放器为例,我们设计的RTMP播放器功能如下,如不单独说明,系Windows、Linux(含x86_64|aarch64)、Android、iOS全平台支持。

  • 多实例播放\]支持多实例播放;

  • 视频格式\]支持RTMP扩展H.265和Enhanced RTMP H.265,H.264;

  • H.264/H.265软解码\]支持H.264/H.265软解;

  • H.265硬解\]Windows/Android/iOS支持特定机型H.265硬解;

  • 缓冲时间设置\]支持buffer time设置;

  • 低延迟模式\]支持低延迟模式设置(公网150\~300ms);

  • 快速切换URL\]支持播放过程中,快速切换其他URL,内容切换更快;

  • 实时静音\]支持播放过程中,实时静音/取消静音;

  • 实时快照\]支持播放过程中截取当前播放画面;

  • 渲染角度\]支持0°,90°,180°和270°四个视频画面渲染角度设置;

  • 等比例缩放\]支持图像等比例缩放绘制(Android设置surface模式硬解模式不支持);

  • ARGB叠加\]Windows平台支持ARGB图像叠加到显示视频(参看C++的DEMO);

  • 解码后视频数据回调\]支持解码后YUV/RGB数据回调;

  • 解码前音频数据回调\]支持AAC/PCMA/PCMU/SPEEX数据回调;

  • 扩展录像功能\]完美支持和录像SDK组合使用。

如果要实现低延迟的RTMP解决方案,可以从编码、服务器、网络、播放器和其他方面这几个角度来考虑降低RTMP播放器延迟的方法。在编码方面,选择高效编码格式和调整编码参数;RTMP服务器选择高性能服务器和调整服务器参数;网络方面,有选择稳定网络环境和调整网络参数;RTMP播放器方面,选择专为直播场景打造的低延迟播放器,并调整播放器参数,以达到好的播放体验。以上是RTMP低延迟设计的一点心得,感兴趣的开发者,可以单独跟我探讨。

相关推荐
Tiny_React21 小时前
使用 Claude Code Skills 模拟的视频生成流程
人工智能·音视频开发·vibecoding
aqi002 天前
FFmpeg开发笔记(九十八)基于FFmpeg的跨平台图形用户界面LosslessCut
android·ffmpeg·kotlin·音视频·直播·流媒体
aqi003 天前
FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditor
android·ffmpeg·音视频·直播·流媒体
aqi004 天前
FFmpeg开发笔记(一百)国产的Android开源视频压缩工具VideoSlimmer
android·ffmpeg·音视频·直播·流媒体
haibindev6 天前
【终极踩坑指南】Windows 10上MsQuic证书加载失败?坑不在证书,而在Schannel!
直播·http3·quic·流媒体
飞鸟真人9 天前
livekit搭建与使用浏览器测试
直播·视频会议·视频聊天·livekit
hk112410 天前
【音视频/边缘计算】2025年度H.265/HEVC高并发解码与画质修复(Super-Resolution)基准测试报告(含沙丘/失控玩家核心样本)
ffmpeg·边缘计算·音视频开发·h.265·测试数据集
aqi0017 天前
FFmpeg开发笔记(九十五)国产的开源视频美颜工具VideoEditorForAndroid
android·ffmpeg·音视频·直播·流媒体
sno_guo18 天前
直播抠图技术100谈之17----相机帧率和直播帧率如何定?
直播·内容运营·抠图·直播运营·直播伴侣
李小轰_Rex20 天前
把手机变成听诊器!摄像头 30 秒隔空测心率 - 开箱即用
android·音视频开发