如何支持Enhanced RTMP H.265(HEVC)

在实时音视频传输中,H.264长期占据主流,但随着视频质量要求的不断提高和带宽压力的加大,H.265(HEVC)作为下一代视频编码标准逐渐崭露头角。
在这种背景下,我们顺应行业发展趋势,成功集成了对
Enhanced RTMP H.265
(HEVC)支持,通过协议扩展和编码解码优化,提升了直播视频质量,同时降低了带宽消耗。

今天,我们将从spec解读的角度出发,深入探讨如何在RTMP推送端与播放端支持Enhanced RTMP H.265(HEVC),并分享其中的技术要点与实现策略。


【一】Enhanced RTMP H.265(HEVC):技术规格解读

1. RTMP协议的扩展:

RTMP(Real-Time Messaging Protocol)作为一种历史悠久的流媒体协议,在其标准版中并不支持H.265编码的视频流。而Enhanced RTMP正是对原有RTMP协议的扩展,主要目的是引入对H.265(HEVC)等新视频编码标准的支持。

关键改进:
  • 支持HEVC编码 :Enhanced RTMP通过引入新的视频编码标识符,使得RTMP可以支持H.265视频流的传输。具体而言,RTMP的数据包头部会新增一个FourCC标识符,用于标识视频编码格式,包括HEVC(H.265)的支持。

  • Metadata扩展 :Enhanced RTMP还增加了Metadata功能,用于传输与视频内容相关的元数据。例如,视频的色彩信息、HDR信息等,这对于高质量视频流的传输至关重要。

  • 视频包格式调整 :为了适配HEVC编码,RTMP的视频包格式 也进行了扩展。比如,CodecID字段被重新定义,支持HEVC编码视频流的标识,同时添加了对新的视频帧类型和视频帧标记的支持。

H.265编码的优势:
  • 更高的压缩效率:H.265相比H.264提供了更高的压缩比,在相同画质下,H.265能减少**50%**的带宽消耗;

  • 更好的画质表现 :H.265在低比特率情况下仍能提供更清晰的图像,尤其适用于4K直播和**高动态范围(HDR)**内容。


【二】如何支持Enhanced RTMP H.265的实现策略

技术实现

本文以大牛直播SDK的Windows平台RTMP直播推送和RTMP直播播放模块为例,考虑到老的扩展CodecID 12的场景依然使用,我们添加了个设置接口:

RTMP推送端,对应文件为SmartPublisherSDK\nt_smart_publisher_sdk.h:

cpp 复制代码
       /*
		* disable enhanced RTMP, SDK默认是开启enhanced RTMP的
		* value: 1:disable, 0:enable
		*/
		NT_UINT32(NT_API *DisableEnhancedRTMP)(NT_HANDLE handle, NT_INT32 value);

RTMP播放端,对应文件为SmartPlayerSDK\smart_player_sdk.h:

cpp 复制代码
		/*
		* disable enhanced RTMP, SDK默认是开启enhanced RTMP的
		* value: 1:disable, 0:enable
		*/
		NT_UINT32(NT_API *DisableEnhancedRTMP)(NT_HANDLE handle, NT_INT32 value);

Enhanced RTMP针对flv原有VideoTagHeader中FrameType(4bits)做了如下调整:

| IsExHeader(1bit)FrameType(3bits) |

VideoTagHeader的第一个字节的第0位来判断是否是Enhanced RTMP格式,如果这一位是1,那就是扩展头,Enhanced-Rtmp格式。

RTMP推送端生成HEVC的FLV VideoTagHeader,对应的sample判断代码如下:

cpp 复制代码
/*
* Author:daniusdk.com
*/
*p = 0x80;
if (key)
	*p |= (1<<4);
else
	*p |= (2 << 4);
 
if (pts != dts)
	*p |= 1;
else
	*p |= 3;
 
p++;
 
*p++ = 'h';
*p++ = 'v';
*p++ = 'c';
*p++ = '1';
 
//....

RTMP播放端,对应的sample判断代码如下:

cpp 复制代码
/*
 * Author:daniusdk.com 
 */
bool is_ex_header;

if (p[0]&0x80)
    is_ex_header = true;
else
    is_ex_header = false;
 
if (is_ex_header) {
	auto video_fourcc = (p[1] << 24)|(p[2] << 16)|(p[3] << 8)|p[4];
	if (HEVC == video_fourcc) {
	   // hevc处理
	}else if (VP9 == video_fourcc) {
	   // vp9处理
	}else if (AV1 == video_fourcc ) {
	   // AV1处理
	}
}

启动Windows平台窗体采集,设置H.265硬编码,输入RTMP推流URL,实现Enhanced RTMP推送,播放端拉流播放,整体延迟如下:


【三】挑战与解决方案

在实现Enhanced RTMP H.265支持的过程中,存在若干挑战:

  • 解码复杂度:H.265的解码复杂度比H.264高,如何在低延迟的情况下完成高效解码是关键。大牛直播SDK通过硬件加速解码和优化解码流程,确保在高负载情况下依然能保持低延迟播放。

  • 带宽适应性 :由于H.265的高压缩率,视频质量和带宽之间的平衡尤为重要。SDK通过自适应码率控制,动态调整视频流的质量,确保在网络波动的情况下依然保持流畅播放。


【四】结语:直播行业的技术革新

"推流与播放,都是艺术;把技术做到极致,才是我们的功夫。"

我们不仅在RTMP推送端和播放端实现了对H.265(HEVC)的支持,而且通过Enhanced RTMP协议扩展了视频编码的边界。我们深知,超低延迟、稳定性和兼容性 是直播行业中的三大核心要求,在H.265的支持下,帮助各行业突破带宽瓶颈,提升视频质量,降低成本。

未来,随着更多编码标准的兴起,我们将继续秉持"技术领先"的原则,不断推动音视频技术向更高标准、更低延迟的方向前进。

相关推荐
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
2601_955662463 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
开发笔记-阿牛3 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
旺仔小馒头wang3 天前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
纳祥科技3 天前
拆机拆到芯片级:ARC功放机里的NX7026、NX8420、NX6805
单片机·音视频·智能音箱
youandyouyou3 天前
律所内部培训共享的内网部署方案:架构、参数与三步落地
音视频
爱吃提升3 天前
文生视频核心
人工智能·音视频
2601_955662463 天前
抖音视频怎么做多语言配音?2026年AI配音工具与制作流程详解
人工智能·音视频·语音识别·视频
音视频牛哥3 天前
Android与HarmonyOS NEXT如何接入GB28181:从SIP到PS/RTP的完整链路
音视频·gb28181-2022对接·鸿蒙next gb28181·gb/t 28181-2022·gb/t 28181-2016·gb28181-2022平台
美狐美颜SDK开放平台3 天前
直播APP源码与视频美颜sdk如何配合?一套完整开发思路
android·人工智能·计算机视觉·音视频·直播美颜sdk