2016-11-16 10 views
1

A/V 동기화 문제를 해결하려고합니다. 비디오는 오디오보다 1 초 지연됩니다. 어디서부터 시작해야 난 그냥이 영상과 동기화 할 수있는 오디오 타임 스탬프를 지연시킬 수, 안드로이드 미디어 프레임 워크 부분에서Android 기록 및 결과에 오디오 비디오 동기화 문제가 있습니다.

(하시기 바랍니다 아래 내 노트를 참조하십시오)? AudioSource입니까? MPEG4Writer? MediaCodecSource?

도와주세요 !!

[사례입니다] : 5 초짜리 비디오가있는 경우. 현재 상황 :

0-1 초에 비디오 부분은 고정되고 1-5 초는 정상적으로 유지됩니다. 1.00s에서 시작되는 비디오 프레임은 실제로 0.00s의 프레임입니다.

오디오 부분은 전체 장면에서 정상적으로 유지됩니다. 따라서 비디오 부분은 오디오 부분과 함께 1 초 지연됩니다.

1.00의 비디오 파트는 실제로 0.00의 오디오 파트와 일치합니다.

[실패 시도]

난 그냥 MPEG4Writer에 비디오 부분에 StartTimeUs를 이동하는 경우는 A/V 동기화됩니다 노력하지만, 파일에 결국, 비디오 동결과 1.00s있을 것입니다, 및 정상적인 오디오. I는 1.00s 0.00s에 오디오를 이동 오디오 1 초, 정지 경우

[MyThought]

, 그것을 동기화된다. 그러나 나는이 방법으로 바꿀 수있는 코드를 모른다. 도와주세요!

My Notes

+0

음성과 비디오를 별도로 녹음해야합니다. 오디오 녹음을 위해서는 OpenGLE을 사용해야합니다. 음성없이 비디오를 녹음하려면 Camera 클래스와 Surfaceview를 사용할 수 있습니다. 그 중 두 개를 섞어 라. –

답변

0

난 당신이 비디오 파일을 생성하는 MediaMuxer로 출력을 MediaCodec 인코더를 사용하여 먹이 가정에서 시작하고있다.

나는 this question에 직면 한 유사한 문제와 관련이있는 것 같습니다. 오디오 MediaCodec 인코더는 기본적으로 타임 스탬프를 무시합니다. 그래서 오디오 타임 스탬프를 변경하면 문제가 해결되지 않을 것이라고 생각합니다. 그러나 비디오 프레임 타임 스탬프를 프레임이 인코더를 떠난 후 그러나 멀티플렉서에 도달하기 전에 이전 시간 (오디오와 동기화 됨)으로 수정하여 문제를 해결할 수있는 것처럼 들립니다.

+0

질문을 업데이트했습니다. 상황은 비디오가 항상 오디오로 1 초 지연됩니다. MPEG4Writer에서 비디오 StartTimeUs를 1 초로 변경하려고했습니다. 파일의 마지막 1 초까지 동기화됩니다. 나는 동결 비디오가 있지만 정상적인 오디오를 가지고있다. Help ~ – user2871337

+0

"이전 프레임의 비디오 프레임 타임 스탬프를 수정하는 중"코드를 공유 할 수 있을까? 비디오가 오디오보다 1 초 지연된다고 가정합니다. – user2871337

+0

필자의 경우, 비디오 프레임은 MediaCodec 비디오 인코더의 입력으로 사용되는 Surface에 그려졌습니다. 그래서 내 코드는 Surface.lockCanvas() (또는 최신 장치에서 lockHardwareCanvas())와 Surface.unlockCanvasAndPost()의 쌍을 사용했습니다. unlock 메서드는 타임 스탬프를 전달할 수 없으므로 대신 MediaMuxer.writeSampleData()를 호출 할 때마다 BufferInfo에 타임 스탬프를 수동으로 넣습니다. – nyttimangus