如何向MediaMux提供音频数据和视频数据

时间:2014-01-07 12:47:32

标签: android audio video mediacodec

我正在尝试通过预览获取视频原始数据,通过AudioRecord获取音频原始数据。然后我将它们发送到MediaCodec(我将设置两个Codec实例)。之后,我将视频数据和音频数据发送到MediaMux以获取mp4文件。我有两个问题:

1)之前我曾使用MediaMux处理视频数据。对于视频数据,MediaMux按帧处理,但视频记录是连续的。 MediaMux如何同步处理视频和音频。

2)我在函数writeSampleData中只找到了inputbuffer的变量。 StackOverflow上的一个好人也提供了MediaMux的演示。但是这个演示只有一个源数据变量。这个变量怎么能同时代表视频数据和音频数据?

谢谢!

2 个答案:

答案 0 :(得分:8)

我已成功将同步的音频和视频传递给MediaMuxer。我计算了每帧视频应播放的音频样本数:基于音频采样率和视频帧率。然后我有一个循环,在每次迭代中写入一个视频帧和一个音频块。使用演示时间确保它们在播放时同步。在addTrack的通话中使用writeSampleData的跟踪索引,允许将视频和音频写入两个单独的曲目。

答案 1 :(得分:1)

总的来说要回答@ robin-royal,为了对视频和音频进行编码,你应该调用两次MediaMuxer的Addtrack方法,每个跟踪一个索引(int)。 因此,当您在MediaMuxer中调用WriteSampleData时,第一个参数指定轨道索引e。 G。如果audioTrackIndex = 2且videoTrackIndex = 1,如果您使用第一个参数等于1调用WriteSampleData,您将编写视频。 (对不起,我没有权利在评论中回答他) 感谢