2014-02-18 2 views
0

나는 안드로이드에 비디오 플레이어를 쓰고 있습니다. 지금까지 av_read_frame 및 avcodec_decode_video2를 사용하여 프레임을 캡처하고 SDL2.0으로 업데이트 할 수있었습니다. 나는 술집 tutorial02.c http://dranger.com/ffmpeg/을 따라 갔다.ffmpeg는 Android에서 비디오 만 표시합니다.

도우 코드입니다 : 내가 비디오를 표시하기 만하면 동안

while (1) 

    { 
     1. Read packet 
     2. check if video frame; if not Go to Step 3. 
       2.1 if video frame, then update with SDL_UpdateYUVTexture, 
     3. Handle SDL Event 
     4. Clear the Renderer. 
     5. Present Renderer. 
    } 

내가 궁금해 내가 비디오의 동기화 알아서해야합니까, DTS/계산 PTS?

이 시나리오는 삼성에서는 잘 작동하지만 다른 휴대 전화에서는 잘 작동하지 않습니다.

귀하의 조언은 무엇입니까?

답변

0

에 따라 다릅니다. 비디오가 a) 장치가 디코딩 할 수있는 한 빨리 재생하고 b) 다른 장치에서 다른 속도로 재생할 것입니다. 다른 프로세스에 따라 동일한 장치에서도 재생할 수 있습니다. 동기화가 필요하며 해독되는 즉시 프레임을 덤프 할 수 있습니다.

그렇지 않으면 비디오 출력을 PTS와 동기화해야합니다. 오디오가 없으므로 오디오 클록이 없기 때문에 비디오를 시스템 클록에 동기화하면 더 간단 해집니다.

+0

조지, 답장을 보내 주셔서 감사합니다. 다른 프로세스에 어떻게 의존합니까? 프레임을 얻지 못하면 프레임을 표시 할 수 없으므로 우리가 올바르게 될 때마다 달라지는 이유는 무엇입니까? – Whoami

+0

프레임이 표시되지 않으면 표시 할 것이 없으므로 프레임을 표시하지 않습니다. 그런 다음이 프레임을 표시 할시기를 알게되는 PTS를 사용하십시오. –

+0

감사합니다 조지, 그게 내 질문입니다. 가능한 한 빨리 프레임을 얻을 때, PTS를 고려해야하는 이유는 이미 프레임을 가지고 있기 때문에 PTS를 계산한다고해도 나중에 미래의 시간이되어야한다고 가정 해 봅시다. 그게 바로 대기 시간을 늘리는거야? 사려 깊은 조언!!! – Whoami

관련 문제