FLV视频格式是Adobe推出的Flash可直接播放的视频流。需要注意的概念是编码格式和文件封装格式。编码格式是指编码器输出的“裸”的视频流或音频流,常见的视频编码格式就是H.264,常见的音频编码格式是AAC和MP3。FLV是一种文件封装格式,它可以封装H264和AAC,其他常见的文件封装格式还有MP4、TS、MKV等等。不同的文件封装格式可以相互转换,只要把一种文件封装格式拆包,解出“裸”的视频流和音频流,再按另一种文件封装格式打包,就可以完成转换,不需要重新编码,因此速度非常快。
本文讨论FLV的文件封装格式,FLV的文件格式定义最权威的就是Adobe的官方文档:
该文档的Annex E列出了FLV的详细封装格式。FLV采用网络字节序(高字节在前),无符号整数。
我们先找一个FLV文件,包含H264视频和AAC音频:
464c 5601 0500 0000 0900 0000 0012 0000
3f00 0000 0000 0000 0200 0a6f 6e4d 6574
6144 6174 6108 0000 0002 0008 6475 7261
7469 6f6e 0040 27c8 b439 5810 6200 0c76
6964 656f 636f 6465 6369 6400 4000 0000
0000 0000 0000 0900 0000 4a08 0000 0400
0000 0000 0000 af00 1208 0000 000f 0900
0043 0000 0000 0000 0017 0000 0000 0142
001f 0301 002f 6742 801f 9652 0283 f602
a100 0003 0001 0000 0300 32e0 6003 0d40