Enhancing RTMP, FLV 2023年7月31号正式发布,主要支持了HEVC(H.265)、VP9、AV1视频编码,很多开源项目已支持,我的播放器和推送端也改改,支持下enhanced rtmp H.265(HEVC).

  播放端和推送端connect RTMP server时,要在connect Command对象中加入一个新的name-value对:

property name:"fourCcList"
property value:Strict Array of Strings 
数组项可能是:{"av01", "vp09", "hvc1"}
其中"hvc1"就是H.265(HEVC)

  播放端需要改下FLV VideoTagHeader解析, 也就是根据VideoTagHeader的第一个字节的第0位来判断是否是扩展头,如果这一位是1那就是扩展头,处理就好:

// 问题沟通微信:ldxevt

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) {
	   // ....
	}else if (AV1 == video_fourcc ) {
	   // .....
	}
}

  推送端也要处理下,生成HEVC的FLV VideoTagHeader:

// 问题沟通微信:ldxevt

*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';

//.......

  生成HEVCDecoderConfigurationRecord的FLV VideoTagHeader:

// 问题沟通微信:ldxevt

*p++ = 0x80|(1 << 4);
*p++ = 'h';
*p++ = 'v';
*p++ = 'c';
*p++ = '1;
 
 // .......

  另外就是H.265的编解码, HEVC推荐硬编硬解,安卓和IOS设备一般都支持HEVC硬编解码,调用也很方便,Windows要看具体设备是否支持了。

  支持后测试推送和播放端, 推送端配置:

RTMP播放器和推送端支持enhanced RTMP H265(enhanced RTMP HEVC)_enhanced rtmp直播

  播放效果:

RTMP播放器和推送端支持enhanced RTMP H265(enhanced RTMP HEVC)_enhanced rtmp H265_02

  测下来enhanced rtmp h265 延时也不高,Windows、Android等平台的推送和播放端都一起支持了。