Enhanced-Rtmp支持H265

Enhanced-Rtmp支持H265

千呼万唤使出来,rtmp/flv算是有统一支持H265的国际版本。本文介绍一下:

  • 现存rtmp/flv支持H265的方式;
  • Enhanced-Rtmp协议如何支持H265;
  • ffmpeg/obs/srs/media-server各个开源的实现;
  • 国内方案与国外方案的兼容性问题;

1. rtmp/flv封装视频方式

准确的说,rtmp是传输协议,传输协议内部的封装是flv格式,其实我们所说的支持H265,是在flv封装格式里面支持H265编码数据。

flv对视频的封装格式, 原有VideoTagHeader定义如下:

------------------------------------------------------------------------------------
| FrameType(4bits) | CodecID(4bits) | AVCPacketType(8bits)| CompositionTime(24bits)|
------------------------------------------------------------------------------------

其中:

  • FrameType: 4个bits, 1: keyframe, 也就是I帧; 2: inter frame, 非I帧,B帧或P帧;
  • CodecID: 4个bits,
1: JPEG (currently unused); 
2: Sorenson H.263; 
3: Screen video; 
4: On2 VP6; 
5: On2 VP6 with alpha channel; 
6: Screen video version 2; 
7: AVC;

这里如果是H264,就是7。

  • AVCPacketType: 8个bits,也就是一个字节,0: AVC sequence header; 1: AVC NALU
  • CompositionTime: 3个字节(24bits),表示pts与dts的差值;

举例:

  • 如果视频数据是H264的sequence header(也就是包含sps/pps的Avcc Header),就应该是0x17 00;
  • 如果视频数据是H264的Iframe,就应该是0x17 01;
  • 如果视频数据是H264的非Iframe,就应该是0x27 01

flv的标准中,只设定了H264的codecId为7,之后的flv标准就没在针对video的codecId进行增加,这也就是导致后面rtmp/flv没有支持H265的标准。

1.1. 国内rtmp/flv对H265的支持

随着国内前10年移动互联网对直播需求的增加,对高清画质的需求与日俱增,支持H265直播的需求很早就在各家CDN和云厂商成为top需求。

因此,国内云厂商和CDN厂商对H265很早就支持,支持的方式比较简单,就是自定义H265的CodecID=0xC,也就是CodecID值为12。

1: JPEG (currently unused); 
2: Sorenson H.263; 
3: Screen video; 
4: On2 VP6; 
5: On2 VP6 with alpha channel; 
6: Screen video version 2; 
7: AVC;
12: H265(国内自定义H265的CodecID);

这样的自定义的好处:迅速解决了国内统一rtmp/flv支持H265的格式标准;国内的cdn厂家的服务都遵循CodecID=12来实现rtmp/flv直播服务。

举例:

  • 如果视频数据是H265的sequence header,就应该是0x1c 00;
  • 如果视频数据是H265的Iframe,就应该是0x1c 01;
  • 如果视频数据是H265的非Iframe,就应该是0x2c 01

国内的多个开源也都遵循国内的H265标准:

但是,同样有其局限性:CodecID是自定义的,并且对CodecID只有4个bits的局限性没能解决,后面对新增的编码方式无法适用,如新增VP8,VP9, AV1,或未来的H266,扩展会很难。

国外为准的流媒体开源,并未支持CodecId=12为H265,如:

  • ffmpeg: 未支持CodecId=12为H265;
  • obs: 未支持CodecId=12为H265;

2. Enhanced-Rtmp

Enhanced-Rtmp公布支持H265的标准,彻底解决在rtmp/flv支持H265的编码。

2.1 Enhanced-Rtmp规范

Enhanced-Rtmp规范: 原文

flv对视频的封装格式, 原有V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值