如何支持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的支持下,帮助各行业突破带宽瓶颈,提升视频质量,降低成本

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

相关推荐
byte轻骑兵1 小时前
【AVDTP】规范精讲[6]: 打通全流程,蓝牙音频连接背后的12步信令博弈
人工智能·音视频·avrcp·蓝牙耳机·蓝牙车机
qq3621967051 小时前
# 视频转文字准确率如何提升?影响识别质量的 6 个关键因素与优化技巧
音视频
不爱记笔记1 小时前
音视频转笔记工具横评2026,通义听悟、Ai好记、NotebookLM 实测对比
人工智能·笔记·ai·音视频·飞书·obsidian
中微极客2 小时前
Seedance 2.5深度解析:字节跳动30秒4K视频生成模型架构与API实战
音视频
SimpleLearingAI3 小时前
生成图像/视频质量评估
音视频·多模态大模型
hz567893 小时前
音视频技术SDK选型指南:企业实时互动场景的关键能力解析
网络·云计算·音视频·实时音视频·信息与通信
paokuflying3 小时前
ffmpeg提取视频中的音频
ffmpeg·音视频
zandy10115 小时前
Seedance 2.0第三方创作工具怎么选?商用视频工作流评估指南
音视频
小猴子爱上树1 天前
一站式解决图片视频翻译难题的高效AI工具
人工智能·python·音视频
AI创界者1 天前
【AI视频重塑】MoCha-GGUF 视频人物/主体替换整合包:8G显存轻量化部署与ComfyUI批量工作流详解
人工智能·aigc·音视频