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

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

相关推荐
EasyDSS2 小时前
私有化视频会议平台/视频高清直播点播EasyDSS构建智慧校园音视频协作新生态
音视频
runafterhit4 小时前
显示调研专题-OLED行业技术趋势分析报告
音视频
灰灰勇闯IT4 小时前
DVPP 视频预处理:YOLO 视频检测的瓶颈与解法
yolo·音视频
Luna-player5 小时前
音频服务未运行,未安装音频设备,Windows 无法启动 Windows Audio 服务,错误 0x80070005:拒绝访问,本计算机无法播放音频
音视频
中小企业实战军师刘孙亮6 小时前
小微企业生存发展指南:从求稳到扩张的实战策略-佛山鼎策创局破局增长咨询
架构·产品运营·音视频·制造·业界资讯
视频号下载助手6 小时前
2026视频号视频下载去水印方法!4种无水印视频提取方法
音视频
青w韵6 小时前
视频链接处理 + 提取字幕
音视频
ting94520007 小时前
Vivago Video Agent 技术深度解析:大模型驱动的叙事视频全链路生成
人工智能·音视频
ZC跨境爬虫7 小时前
跟着 MDN 学CSS day_3:(为一个传记页面添加样式)
前端·javascript·css·ui·音视频·html5
不昀8 小时前
VOOHU沃虎:音频变压器的匝数比和阻抗比如何换算?
网络·音视频·以太网·网络通信·电子元器件