2016-11-16 141 views
1

我正在尝试解决A/V同步问题。视频将比音频延迟1秒。 (见我的音符下请)Android录音和结果有音频视频同步问题

从Android的媒体框架的一部分, 我能不能延迟音频时间戳,让它与视频同步,我应该从哪里开始呢?它是AudioSource吗? MPEG4Writer? MediaCodecSource?

请帮忙!!

[案例是]:如果有5秒的视频。目前的情况:

视频部分 0-1秒会冻结,1-5秒保持正常。视频帧从1.00s开始实际上是从0.00s开始的帧。

音频部分在整个场景中保持正常。所以视频部分将延迟1秒,并带有音频部分。

1.00s上的视频部分实际上与0.00s上的音频部分匹配。

[失败尝试]

我试试,如果我只是继续前进视频部分的StartTimeUs上MPEG4Writer时,A/V将同步,但在文件末尾,会有1.00S与视频冻结,和正常的音频。

[MyThought]

如果我可以暂停音频1秒,这将音频0.00S移动到1.00S,它将同步。但我不知道这个方法可以改变的代码。请帮忙!

My Notes

+0

您需要单独录制语音和视频。对于音频录制,您需要使用OpenGLE。对于没有语音的视频录制,您可以使用Camera类和Surfaceview。然后混合其中两个。 –

回答

0

我开始与你使用的是MediaCodec编码器和喂养输出到MediaMuxer产生的视频文件的假设。

听起来这可能与我在this question中遇到的类似问题有关。我相信一个音频MediaCodec编码器本质上会忽略你投射的任何时间戳;所以我不认为改变音频时间戳可以解决你的问题。然而,听起来好像你可以通过在帧离开编码器之后但在到达复用器之前将视频帧时间戳更早地(与音频同步)解决问题。

+0

我已经更新了这个问题。情况是视频将总是1秒延迟与音频。我试图在MPEG4Writer上将Video StartTimeUs更改为1秒。它会同步到File的最后1秒。我有冻结的视频,但正常的音频...帮助〜 – user2871337

+0

你能分享代码“更正视频帧时间戳在更早的时间”假设视频比音频延迟1秒。 – user2871337

+0

在我的情况下,视频帧被绘制到一个Surface上,作为MediaCodec视频编码器的输入。所以我的代码在新设备上使用了一对Surface.lockCanvas()(或lockHardwareCanvas())和Surface.unlockCanvasAndPost()。由于解锁方法不允许传递时间戳,因此每次调用MediaMuxer.writeSampleData()时,我都会在BufferInfo中手动输入时间戳。 – nyttimangus