• 音视频封装格式


    mp4(mov.c)

     

    ffmpeg对应ff_mov_demuxer - "mov,mp4,m4a,3gp,3g2,mj2"

    mp4文件由一系列box组成,box 结构如下:

     box 脉络 (蓝色 - containter box, * - full box)

    ftypstsd
    mdatstts
    stss
    mdhdstsz
    tkhdhdlrstsc
    mvhdmdiaminfstblstco
    moovtrakedtselst *

     box 详情

    ftyp - size:32 type:ftyp; (isom - iso base media file)

               major_brand:isom - 4字节编码表示格式,"qt  ",mp41,mp42等

               minor_version:512 - 表示major_brand 的版本号说明信息;

               compatible_brands: isomiso2avc1mp41,具体如下:

    1. 00000000: 0000 0020 6674 7970 6973 6f6d 0000 0200 ... ftypisom....
    2. 00000010: 6973 6f6d 6973 6f32 6176 6331 6d70 3431 isomiso2avc1mp41

    stsd - full box, data=entry个数(4字节)+多个entry实体;

    avcC box(通常size为49=6+2+34+1+2+4,ffmpeg内没有具体解析,nalu大小一般占两个字节,实际(lengthSizeMinusOne & 3)+1)

    configurationVersion(8) AVCProfileIndication(8) profile_compatibility(8) AVCLevelIndication(8)

    reserved(6 ‘111111’b) lengthSizeMinusOne(2) reserved(3 ‘111’b) numOfSequenceParameterSets(低5位)

    spsSize(大端存放) sps numOfPictureParameterSets(8) ppsSize(大端存放) pps

    avcC格式打包的h264是用1、2或4字节NALU长度分割NALU单元,区别AnnexB起始码分割。

    stss - full box - entry_count表示多少个关键帧,numberX表示关键帧序号

    size type(0x73747373) + version(1) flags(3) entry_count(4) number1(4) number2(4) ...

    stsz - full box - sample_size表示采样大小,用于大小一致的音频,否则为0,sample_count表示表示多少个采样,entry_sizeX表示采样的大小

    size type(0x7374737A) + version(1) flags(3) sample_size(4) sample_count(4) entry_size1(4) entry_size2(4)...

    ts(mpegts.c)

    ffmpeg对应ff_mpegts_demuxer - "mpegts"

    PSI 是节目特定信息,包括节目关联表(PAT,Program Association Table)、节目映射表(PMT,Program Map Table)、条件接收表(CAT)、网络信息表(NIT)

    m3u8(hls.c)

    ffmpeg对应ff_hls_demuxer - "hls"

    1. #EXTM3U // 开始
    2. #EXT-X-VERSION:3
    3. #EXT-X-ALLOW-CACHE:YES
    4. #EXT-X-TARGETDURATION:16
    5. #EXT-X-MEDIA-SEQUENCE:0
    6. #EXT-X-PLAYLIST-TYPE:VOD
    7. #EXT-X-KEY:METHOD=AES-128,URI="",IV=0x00000000000000000000000000000000
    8. #EXTINF:11.000000,
    9. news-0.ts
    10. #EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS=“avc1.42e00a,mp4a.40.2”
    11. http://example.com/low/index.m3u8
    12. #EXT-X-ENDLIST // 结束

    flv

    flv header:F(1byte)+L(1byte)+V(1byte)+Version(1byte通常为1)+(5bit为0+1bit音频存在+1bit为0+1bit视频存在)+文件大小(4byte)

    flv body:多个pre tagsize + tag 单元(tag header+tag body)

       tag header:

    tag类型1byte8:audio,9:video,18:script data
    数据区大小3byte
    时间戳3byte
    时间扩展字段1byte
    StreamID3byte

       tag body:

        meta data tag

        audio data tag

        video data Tag

    dav(dhav.c)

    DAHUA或者DHAV0xfd(0x44\0x48\0x41\0x56\0xfd)开始

    最后dhav(0x64\0x68\0x61\0x76\0xfd),结尾偏移长度(小端)

    参考

    FLV协议分析        常见视频封装格式(2) —TS

  • 相关阅读:
    Flask 常用组件
    搭建NTP Sever实现网络设备时间同步
    html实现扫雷小游戏(附源码)
    开始MySQL之路——MySQL存储引擎概念
    LeetCode 1224. 最大相等频率 / 1450. 在既定时间做作业的学生人数 / 655. 输出二叉树
    Maven
    Java多线程常用面试题(含答案,精心总结整理)
    基于labview滑动轴承压力测量软件搭建
    JVM 内存模型
    前端培训丁鹿学堂:vue的性能优化(一)
  • 原文地址:https://blog.csdn.net/dadan1314/article/details/113559352