免费网站入口,app开发公司比较好,网站 用户粘度,seo案例分析及解析摘要#xff1a;本文描述了FLV的文件格式。 关键字#xff1a;FLV
1 简介 FLV流媒体格式是sorenson公司开发的一种视频格式#xff0c;全称为Flash Video。 它的出现有效地解决了视频文件导入Flash后#xff0c;使导出的SWF文件体积庞大#xff0c;不能在网络上很好的… 摘要本文描述了FLV的文件格式。 关键字FLV
1 简介 FLV流媒体格式是sorenson公司开发的一种视频格式全称为Flash Video。 它的出现有效地解决了视频文件导入Flash后使导出的SWF文件体积庞大不能在网络上很好的使用等缺点。由于其视频文件体积轻、封装播放简单等优点使得其非常合适在网络上传输目前主流的视频网站无一例外支持FLV流媒体格式进行视频播放。 2020年12月31日Chrome作为最后一个宣布将不再支持使用Flash的应用程序浏览器flv视频均无法透过Google Chrome收看除开BiliBili、优酷等视频网站以外的视频网站均停止使用flv作为视频格式。 2 FLV文件格式 FLV整个文件由两部分组成Header和BodyHeader描述了FLV文件的基本信息Body存储了流数据。Body中由一个个Tag组成。
2.1 FLV Header FLV Header长度为9个字节前三个字节是固定的FLV三个字符表示当前文件的标签第四个字节是当前文件的版本比如0或者1第五个字节被分为了4个部分前5个bit位作为预留不使用的话写0接下来的3个bit位每一位表示是否有对应的流次序分别为音频预留视频为1则表示当前文件有对应的流最后4个字节表示当前Header的大小一般为9如果有扩充就会变。
2.2 FLV Body FLV Body紧跟在FLV Header之后即FLV Header中的dataoffset也是FLV Body的起始位置。FLV Body由一系列的Back-Pointer和Tag组成交错存储大概的结构如下 Back-Pointer就是一个4字节的区域存储前一个Tag的长度第一个Tag没有前任一定是0。另外FLV的Tag包含音频、视频或脚本元数据、可选的加密元数据和 payload。最基础的为FLV Tag还有其他的Audio Tag,Vidoe Tag, Data Tag等。
2.2.1 FLV Tag FLV Tag也有HeaderData组成基本结构如下
Reserved(2 bit)用于FMS的保留字段, 值为0Filter(1bit)指示packet是否需要预处理 0 不需要预处理1 packet 在渲染前需要预处理(例如解密)未加密文件中此值为0加密文件中此值为1 TagType(5bit)表示当前Tag的类型 8音频9视频18脚本数据 DataSize3byteTag中除通用头外的长度即HeaderData字段的长度 (等于Tag总长度 – 11即StreamID以下的数据长度不包含StreamID)Timestamp3byte当前Tag的解码时间戳 (DTS)单位是毫秒。FLV文件中第一个Tag的DTS总为0TimestampExtended1byte和Timestamp字段一起构成一个32 位值, 此字段为高 8 位单位毫秒StreamID3byte总是为0上面的数据是一定有的下面的数据是根据当前Tag类型或者其他一些属性来决定的 Tag Header TagType为8则为AudioTagHeaderTagType为9则为VideoTagHeader Filter为1有EncryptionHeaderFilter为1则有FilterParamsData TagType为8则为音频数据TagType为9则为视频数据TagType为18则为脚本数据。
2.2.2 Audio Tag Audio Tag包括AudioTagHeader和AudioTagBody两部分组成。
2.2.2.1 Audio Tag Header Audio Tag Header主要描述了音频的基本参数比如采样率等
SoundFormat音频格式 0: Linear PCM, platform endian1: ADPCM2: MP33: Linear PCM, little endian4: Nellymoser 16-kHz mono5: Nellymoser 8-kHz mono6: Nellymoser7: G.711 A-law logarithmic PCM8: G.711 mu-law logarithmic PCM 9 reserved10: AAC11: Speex14: MP3 8-Khz15: Device-specific sound SoundRate采样率FLV支持的采样率比较有限,AAC总为3: 0: 5.5 kHz1: 11 kHz2: 22 kHz3: 44 kHz SoundSize采样位深此参数仅适用未压缩格式压缩格式总在内部被解码为16位 0: 8位1: 16位 SoundType声道数 0: 单声道1: 立体声 AACPacketTypeAAC帧类型。仅当声音格式为 10 时存在此字段 0: AAC sequence header1: AAC raw。
2.2.2.2 Audio Tag Body 音频数据段即AUDIODATA根据是否加密可以存储加密数据即EncryptedBody或者AudioTagBody。AudioTagBody存储的数据根据当前格式不同而不同如果是AAC即SoundFormat10则存储AACAUDIODATA否则就是具体格式的数据。 AACAUDIODATA的存储结构根据是否设置AACPacketType而不同0则存储的AudioSpecificConfig否则直接存储AAC的数据。
2.2.3 Video Tag Video Tag 包含 VideoTagHeader 和 VideoTagBody 两部分。
2.2.3.1 VideoTagHeader FrameType帧类型 1: keyframe (for AVC, a seekable frame)2: inter frame (for AVC, a non-seekable frame)3: disposable inter frame (H.263 only)4: generated keyframe (reserved for server use only)5: video info/command frame CodecID编解码器ID 1: JPEG (currently unused)2: Sorenson H.2633: Screen video4: On2 VP65: On2 VP6 with alpha channel6: Screen video version 27: AVC AVCPacketTypeAVC帧类型只有AVC编码才有 0: AVC sequence header1: AVC NALU2: AVC end of sequence (lower level NALU sequence ender is not required or supported); CompositionTimePTS与DTS的时间偏移值单位ms记作CTS只有编码器为AVC才有。
2.2.3.2 VideoTagBody 同AudioTagBody区分加密和非加密。而非加密的VideoTagBody根据编解码器类型不同存储的数据不同
FrameType 5UI8CodecID 2H263VIDEOPACKETCodecID 3SCREENVIDEOPACKETCodecID 4VP6FLVVIDEOPACKETCodecID 5VP6FLVALPHAVIDEOPACKETCodecID 6SCREENV2VIDEOPACKETCodecID 7AVCVIDEOPACKET。
2.2.4 Data Tags 数据 Tag 封装了单一方法此方法通常在 Flash 播放器中的网络流对象上被调用。数据 Tag 包含方法名和一组参数。这部分就不详细说明了具体参考abode的标准。
3 简单查看下FLV的结构
FLV file version 1Contains audio tags: YesContains video tags: YesData offset: 9Prev tag size: 0
Tag type: 18 - Script data objectData size: 1195Timestamp: 0Timestamp extended: 0StreamID: 0Prev tag size: 1206
Tag type: 9 - Video dataData size: 54Timestamp: 0Timestamp extended: 0StreamID: 0Video tag:Frame type: 1 - keyframe (for AVC, a seekable frame)Codec ID: 7 - AVCAVC video tag:AVC packet type: 0 - AVC sequence headerAVC composition time: 0AVC nalu length: 23330847参考文献
Flash Video Format