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那就是扩展头,解析扩展头:
/*
* Copyright (C) 1130758427@qq.com. All rights reserved.
* 问题沟通微信:ldxevt
*/bool is_ex_header;
if (p[0]&0x80)is_ex_header = true;
elseis_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:
/*
* Copyright (C) 1130758427@qq.com. All rights reserved.
* 问题沟通微信: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:
/*
* Copyright (C) 1130758427@qq.com. All rights reserved.
* 问题沟通微信:ldxevt
*/*p++ = 0x80|(1 << 4);
*p++ = 'h';
*p++ = 'v';
*p++ = 'c';
*p++ = '1;//....
另外就是H.265的编解码, HEVC推荐硬编硬解,安卓和IOS设备一般都支持HEVC硬编解码,调用也很方便,Windows要看具体设备是否支持了。
支持后测试推送和播放端, 推送端配置:
播放效果:
测下来enhanced rtmp h265 延时也不高,Windows、Android等平台的推送和播放端都一起支持了。如需测试请联系qq: 1130758427, 微信:ldxevt 。