实现参考
- 金山云:https://github.com/CDN-Union/Code/tree/master/flv265-Kingsoft
- patch参考:https://github.com/CDN-Union/Code/blob/master/flv265-Kingsoft/flv265patch_from_kingsoft.7z
针对《video_file_format_spec_v10_1》 VIDEODATA部分扩展如下:
VIDEODATA
The VideoTagHeader contains video-specific metadata.
VideoTagHeader
Field | Type | Comment |
---|---|---|
Frame Type | UB [4] | Frame Type Type of video frame. The following values are defined: 1 = key frame (for AVC and HEVC, a seekable frame) 2 = inter frame (for AVC and HEVC, a non-seekable frame) 3 = disposable inter frame (H.263 only) 4 = generated key frame (reserved for server use only) 5 = video info/command frame |
CodecID | UB [4] | Codec Identifier. The following values are defined: 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 |
HVCPacketType | IF CodecID == 12 UI8 | The following values are defined: 0 = HEVC sequence header 1 = HEVC NALU 2 = HEVC end of sequence (lower level NALU sequence ender is not required or supported |
CompositionTime | IF CodecID==7 OR CodecID == 12 SI24 | IF AVCPacketType == 1 OR HVCPacketType == 1 Composition time offset ELSE 0 See ISO 14496-12, 8.15.3 for an explanation of composition times. The offset in an FLV file is always in milliseconds. |
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 HVCVIDEOPACKET ) | Video frame payload or frame info If FrameType == 5, instead of a video payload, the Video Data Body contains a UI8 with the following meaning: 0 = Start of client-side seeking video frame sequence 1 = End of client-side seeking video frame sequence For all but AVCVIDEOPACKET or HVCVIDEOPACKET, see the SWF File Format Specification for details |