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

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

相关推荐
白熊1881 小时前
【图像大模型】深度解析RIFE: 基于中间流估计的实时视频插帧算法
人工智能·算法·音视频·通用智能体·web search
我怀里的猫2 小时前
音频应用的MediaSession冲突
音视频
胖虎117 小时前
(十三)深入了解AVFoundation-采集:视频帧采集与实时滤镜处理
音视频·滤镜·avfoundation·实时滤镜·视频帧
源码方舟1 天前
【小明剑魔视频Viggle AI模仿的核心算法组成】
人工智能·算法·音视频
AI+程序员在路上1 天前
C及C++的音频库与视频库介绍
c语言·c++·音视频
西西弗Sisyphus1 天前
Wan2.1 图生视频 支持批量生成
音视频·wan·anytext2
哔哩哔哩技术1 天前
Index-AniSora技术升级开源:动漫视频生成强化学习
人工智能·音视频
白熊1881 天前
【图像大模型】Stable Video Diffusion:基于时空扩散模型的视频生成技术深度解析
人工智能·chrome·计算机视觉·音视频
沉迷单车的追风少年1 天前
畅游Diffusion数字人(30):情绪化数字人视频生成
音视频