本文介绍了通过RTMP协议推流,基于FLV封装的H.265流协议格式。
通过RTMP协议推H.265流时,在FLV的VideoTagHeader增加CodecID枚举类型,标识当前流是H.265视频流。
视频流格式为H.265流时,FLV VideoTagHeader的CodecID字段值为 12。
VideoTagBody以及avcconfig都是标准格式。
avcconfig填的裸的SPS、PPS、VPS。
VideoTagHeader包含特定的视频元数据。
字段 | 类型 | 描述 |
---|---|---|
FrameType | UB[4] | 视频帧类型,定义了以下值: 1:关键帧(对于AVC / HEVC,可搜索) 2 :帧间(对于AVC / HEVC,不可搜索) 3:disposable inter frame(只针对H.263) 4 : 生成的关键帧(仅供服务器使用) 5 : 信息/命令帧 |
CodecID | UB[4] | 编码类型: 2: Sorenson H.263 3 : Screen video 4 : On2 VP6 5 : On2 VP6 with alpha channel 6 : Screen video version 2 7 : AVC 12 : HEVC |
AVCPacketType | IF CodecID ==7/12 UI8 | 0:AVC/HEVC序列头 1: AVC/HEVC NALU 2:AVC/HEVC序列结束(不需要或不支持较低级的NALU序列ender) |
CompositionTime | IF CodecID ==7/12 SI24 | 当AVCPacketType =1,CompositionTime表示PTS(显示时间)相对于DTS(解码时间)的偏移值,否则为0,单位:ms |
VideoTagBody包含视频帧有效负载。
字段 | 类型 | 描述 |
---|---|---|
VideoTagBody | IF FrameType ==5 UI8 ELSE ( IF CodecID ==2 H263VIDEOPACKET IF CodecID ==3 SCREENVIDEOPACKET IF CodecID ==4 VP6FLVVIDEOPACKET IF CodecID ==5 VP6FLVALPHAVIDEOPACKET IF CodecID ==6 SCREENV2VIDEOPACKET IF CodecID ==7 AVCVIDEOPACKET IF CodecID ==12 HEVCVIDEOPACKET ) | 视频帧有效载荷或帧信息 当FrameType=5时,Tag不再是视频负载数据,而是一个UI8字段,含义如下: 0:客户端寻找视频帧序列的开始 1:客户端寻找视频帧序列的结束 对于每个数据包的解析,请参考FLV和SWF标准文档中的说明。 |