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要看具体设备是否支持了。
支持后测试推送和播放端, 推送端配置:
播放效果:
测下来enhanced rtmp h265 延时也不高,Windows、Android等平台的推送和播放端都一起支持了。