IVF视频文件格式

作者: smallest_one | 来源:发表于2019-04-03 23:50 被阅读1次

    目录

    1. 参考
    2. 格式介绍
    3. 具体文件分析

    1. 参考

    2. 格式介绍

    IVF是一个非常简单的视频容器。用于封装VP8/VP9/AV1的数据。

    文件的格式如下所示:

    IVF header | Frame header | Frame payload | Frame header | Frame payload |...
    
    • 格式由IVF header和多个帧数据组成。
    • 帧由header和payload组成。

    IVF header 由32字节组成,下面多字节的数据是采用小端编码(little-endian)。

    字节 描述
    0-3 固定的'DKIF'字符串
    4-5 version,应该为0
    6-7 header的字节长度
    8-11 编码器的FourCC (e.g., 'VP80')
    12-13 width in pixels
    14-15 height in pixels
    16-19 framerate,单位为(1/timescale)
    20-23 timescale
    24-27 帧的个数
    28-31 unused

    Frame header 由12字节组成。

    字节 描述
    0-3 Frame playload的字节长度
    4-11 64-bit表示的pts时间戳

    解析的代码可以参考FFmpeg/libavformat/ivfdec.c

    3. 具体文件分析

    以下为ivf开头的一部分的hex查看形式。

    00000000: 444b 4946 0000 2000 4156 3031 0005 d002  DKIF.. .AV01..?.
    00000010: c05d 0000 e903 0000 0000 0000 0000 0000  ?]..?...........
    00000020: 585a 0000 0000 0000 0000 0000 1200 0a0b  XZ..............
    00000030: 0000 00fa a67f d9e4 10ac 121a 1710 0227  ...??.??.?.....'
    00000040: c8c8 8124 0820 1800 0821 249a 6acb 3efd  ?..$. ...!$?j?>?
    
    • 444b 4946 -> DKIF
    • 0000 -> version = 0
    • 2000 -> header的字节长度 = 0x0020 = 32。(注意是小端(little-endian)编码,低地址存储低有效字节。
    • 4156 3031 -> AV01
    • 0005 -> width = 0x0500 = 1280
    • d002 -> height = 0x02d0 = 720
    • c05d 0000 -> framerate = 0 / 0x5dc0 = 0 / 24000,单位为timescale
    • e903 0000 -> timescale = 0x03e9 = 1001,所以实际的帧率为24000/1001≈ 23.976
    • 0000 0000 -> 帧的个数 = 0,没有存储有效的数据。
    • 0000 0000 -> unused

    第一个Frame header

    • 585a 0000 -> Frame playload的字节长度 = 0x5a58 = 23128
    • 0000 0000 -> pts时间戳 = 0

    相关文章

      网友评论

        本文标题:IVF视频文件格式

        本文链接:https://www.haomeiwen.com/subject/kvwtiqtx.html