音视频封装格式

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,具体如下:

00000000: 0000 0020 6674 7970 6973 6f6d 0000 0200  ... ftypisom....
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"

#EXTM3U          // 开始
#EXT-X-VERSION:3            
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:16
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD

#EXT-X-KEY:METHOD=AES-128,URI="",IV=0x00000000000000000000000000000000
#EXTINF:11.000000,
news-0.ts

#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS=“avc1.42e00a,mp4a.40.2”
http://example.com/low/index.m3u8

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值