6

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

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

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

谢谢!

4

2 回答 2

10

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

于 2014-01-08T12:44:03.350 回答
1

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

于 2016-01-19T18:09:00.543 回答