Android中如何把Byte数组中缓存的帧合成MP4文件?

如题,项目需求要将实时数据组成一个MP4文件缓存到本地,类似于直播录像,应用层拿到的数据是每一个帧的byte数组,请问如何封装成MP4?如果用MediaMuxer的话如何通过byte数组生成自定义的MediaFormat?

1个回答

之前我们项目做的时候是单独通过其他渠道将MediaFormat传到后才会开始视频流的传输的,主要是怕把头信息丢了没办法解码,
头信息在视频帧里面的表现就是PPS和SPS,一般情况下是视频文件的头2帧,长度和参数根据推流端不同而不同。像你这个需求的话,
是在没有头信息下自己生成然后去封装MP4?你可以尝试自己推流、编码、拉流、解码的流程,有助于你解决问题。太久没关注那部分
东西了,希望对你有用吧。

vqinlin
vqinlin 回复尤教授: 你问题解决了吗? 我们也有类似的需求 想借鉴下; 谢谢
5 个月之前 回复
csdn635406113
csdn003355 回复m0_37698652: 去掉csdn
一年多之前 回复
m0_37698652
尤教授 回复csdn635406113: 方便留个QQ或者微信吗 还有问题需要请教
一年多之前 回复
csdn635406113
csdn003355 回复m0_37698652: 你先熟悉那个类的用法在看吧,这类东西的话直接调试看效果再改就好了。
一年多之前 回复
m0_37698652
尤教授 回复csdn635406113: 如果手动创建MediaFormat,通过setByteBuffer添加了sps和pps之后是否还需要在通过muxer的writeSampleData方法添加到指定的track中?
一年多之前 回复
m0_37698652
尤教授 回复csdn635406113: 好的 非常感谢
一年多之前 回复
csdn635406113
csdn003355 回复m0_37698652: 对应的SPS和PPS是不是一开始的两帧要根据你们具体的传输规则来决定,如果那边的推流视频格式信息是固定的那应该可以手动生成MediaFormat,但是如果不是固定的那就不知道了,还有就是可以去了解一下MP4视频数据的结构,以及相对应的android系统自带的media相关的API,是可以解决的
一年多之前 回复
m0_37698652
尤教授 回复csdn635406113: 这篇我看过 但我现在是边接收byte数组边缓存的,应该是必须要手动生成MediaFormat对象,对应的SPS和PPS就是一开始的两帧么
一年多之前 回复
csdn635406113
csdn003355 回复m0_37698652: 你试试这样的方法https://blog.csdn.net/stn_lcd/article/details/72625954同类型的博客可以参考参考
一年多之前 回复
m0_37698652
尤教授 主要是我是做应用层的...对视频编解码方面了解有限。那如果在确定PPS和SPS的情况下 如何通过数据源的byte数组封装MP4呢?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问