我正在尝试通过预览获取视频原始数据,通过AudioRecord获取音频原始数据。然后我将它们发送到MediaCodec(我将设置两个Codec实例)。之后,我将视频数据和音频数据发送到MediaMux以获取mp4文件。我有两个问题:
1)之前我曾使用MediaMux处理视频数据。对于视频数据,MediaMux按帧处理,但视频记录是连续的。 MediaMux如何同步处理视频和音频。
2)我在函数writeSampleData中只找到了inputbuffer的变量。 StackOverflow上的一个好人也提供了MediaMux的演示。但是这个演示只有一个源数据变量。这个变量怎么能同时代表视频数据和音频数据?
谢谢!
答案 0 :(得分:8)
我已成功将同步的音频和视频传递给MediaMuxer
。我计算了每帧视频应播放的音频样本数:基于音频采样率和视频帧率。然后我有一个循环,在每次迭代中写入一个视频帧和一个音频块。使用演示时间确保它们在播放时同步。在addTrack
的通话中使用writeSampleData
的跟踪索引,允许将视频和音频写入两个单独的曲目。
答案 1 :(得分:1)
总的来说要回答@ robin-royal,为了对视频和音频进行编码,你应该调用两次MediaMuxer的Addtrack方法,每个跟踪一个索引(int)。 因此,当您在MediaMuxer中调用WriteSampleData时,第一个参数指定轨道索引e。 G。如果audioTrackIndex = 2且videoTrackIndex = 1,如果您使用第一个参数等于1调用WriteSampleData,您将编写视频。 (对不起,我没有权利在评论中回答他) 感谢