分析使用mediarecord采集的实时流格式

分析使用mediarecord采集的实时流格式

编者:李国帅

qq:9611153 微信lgs9611153

时间:2013-7-13

背景原因:

对使用android自身的录像接口采集的实时流进行远程播放,需要写一个专门的播放程序对流进行适当处理才能进行播放。

 

差异说明:

采集mediarecord实时流传输时,和3gp或者mp4文件格式不同,因为实时流中每一帧的第一个4字节是该帧大小,而文件格式裸流的第一个4字节是标记000010BX等,所以不能混淆。

流分析:

以3gp格式

如果以3gp格式录制,编码格式如果是mp4v,

0x 00000018 66747970 69736F6D00000000 69736F6D33677034 文件头0x18字节

0x 0008737B 6D646174 文件头后面是媒体标记(mdat大小-包含大小和标记,"mdat")

 

0x 000001B6 10631996 CFACCFB6FF36DBFC 后面是mp4v帧分隔符000001B6,以及真正的视频数据,这个地方实际上是不符合mp4格式BOX标准的。

 

0x DB6FB9B6 DFE6DF7F 9F6DFE6DB7F9B6DF

在这个文件中,媒体帧的大小是从moov单元中分析出来的,所以在mdat单元中没有给出大小。

再后面就是moov单元了,放在文件最后。

 

以h264格式

如果编码格式是h264,也就是avc1,那么媒体是

00000018 667479703367703400000000 69736F6D33677034 文件头 ftyp box

00067DF5 6D646174  mdat

3C1CA8A5B89DE9C7  音频头,说明音频帧没有指明大小----------我们的测试中暂时不考虑音频

00000480 65B8407FFFF0BC50001070F7 视频帧前面的00000480指的是不包含长度的视频帧的数据大小。

补充说明:

从网络获取流的时候,可能3gp或者mp4的moov单元丢失或者没有传递,仅仅传递了数据,这时候如何播放呢?

如果只能使用流形式进行播放,需要设置好解码配置,输入关键帧,然后一帧帧的传递媒体数据到解码器进行解码播放。

传递到解码的数据必须是annexb格式而不能是rtp格式或者3gp这种必须配合索引才能解码的格式。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值