2016-11-16 8 views
1

A/V同期の問題を解決しようとしています。ビデオはオーディオよりも1秒遅れます。私はちょうどそれは私が開始する必要があり、ビデオ、と同期させるために、オーディオタイムスタンプを遅らせるでし 、Androidのメディアフレームワークの一部からAndroid録画と結果にオーディオビデオの同期に関する問題があります

を(下の私の注意をしてくださいを参照してください)?それはAudioSourceですか? MPEG4Writer? MediaCodecSource?

助けてください!

[ケースは]:5秒のビデオがある場合。現在の状況:

0-1秒のビデオ部分はフリーズし、1〜5秒は通常のままです。ビデオフレームは1.00秒から開始し、実際には0.00秒のフレームです。

オーディオ部分は、シーン全体で普通です。ビデオ部分はオーディオ部分で1秒遅れます。

1.00のビデオ部分は、0.00のオーディオ部分と実際に一致します。

[失敗してみ]

私はちょうどMPEG4Writer上のビデオパートのStartTimeUsを移動した場合、A/Vが同期しますしようとしますが、ファイルの末尾に、動画の凍結と1.00sがあるだろう、と正常なオーディオ。

[MyThought]

Iは1.00sに音声0.00sを移動するオーディオ1秒、一時停止することができた場合、それが同期されます。しかし、私はこの方法のために変更できるコードを知らない。助けてください!

My Notes

+0

音声と映像を別々に録音する必要があります。音声を録音するには、OpenGLEを使用する必要があります。声なしのビデオ録画では、CameraクラスとSurfaceviewを使用できます。それらの2つを混ぜる。 –

答えて

0

私はあなたがMediaCodecエンコーダを使用して、ビデオファイルを生成するMediaMuxerに出力を供給している前提で始めています。

これは、私がthis questionに直面した同様の問題に関連する可能性があります。私は、オーディオMe​​diaCodecエンコーダは基本的にあなたがそれに投げるタイムスタンプを無視すると信じています。私はオーディオのタイムスタンプを変更するとあなたの問題を解決するとは思わない。しかし、フレームがエンコーダから離れた後、マルチプレクサに到達する前に、ビデオフレームのタイムスタンプを(オーディオと同期して)より早い時間に修正することで、問題を解決できるように思えます。

+0

私は質問を更新しました。状況は、オーディオは常に1秒遅れです。私は、MPEG4WriterでVideo StartTimeUsを1秒に変更しようとしました。ファイルの最後の1秒まで同期します。ヘルプ - – user2871337

+0

「ビデオフレームのタイムスタンプを修正する」というコードを共有できますか?ビデオよりオーディオが1秒遅れているとします。 – user2871337

+0

私の場合、ビデオフレームは、MediaCodecビデオエンコーダの入力として機能するSurfaceに描画されました。そこで私のコードでは、Surface.lockCanvas()(または新しいデバイスではlockHardwareCanvas())とSurface.unlockCanvasAndPost()のペアを使用していました。 unlockメソッドはタイムスタンプを渡すことを許可しないので、MediaMuxer.writeSampleData()を呼び出すたびにBufferInfoにタイムスタンプを手動で入れます。 – nyttimangus

関連する問題