ffmpeg отображает только видео в Android

Я пишу видеоплеер в Android. До сих пор я мог захватывать кадры с помощью av_read_frame и avcodec_decode_video2 и обновлять до SDL2.0. Я следил за dranger tutorial02.c http://dranger.com/ffmpeg/ .

Судо-код:

 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, а мне нужно только отображать видео?

Этот сценарий хорошо работает в Samsung, но не в других мобильных телефонах.

Что бы вы посоветовали?


person Whoami    schedule 18.02.2014    source источник


Ответы (1)


Это зависит. Если вас устраивает тот факт, что ваше видео будет а) воспроизводиться так быстро, как устройство может его декодировать, и б) будет воспроизводиться с разной скоростью на разных устройствах и даже на одном и том же устройстве в зависимости от других процессов, то вы не нужно синхронизировать, и можно просто сбросить кадры, как только они будут декодированы.

В противном случае вам все равно нужно синхронизировать видеовыход с PTS. Поскольку у вас нет звука и не будет звуковых часов, единственным вариантом будет синхронизация видео с системными часами, что упрощает задачу.

person George Y.    schedule 19.02.2014
comment
Джордж, спасибо за ответ, как это зависит от других процессов? если мы получим кадр, мы не сможем его отобразить?, так все зависит от того, когда мы получим права?, тогда почему оч? - person Whoami; 26.02.2014
comment
Пока вы не получите кадр, вы не отобразите его, так как отображать нечего. И если вы это сделаете, то с помощью PTS вы узнаете, когда отображать этот кадр. - person George Y.; 27.02.2014
comment
Спасибо, Джордж, вот где мой вопрос. Когда я получу кадр как можно скорее, зачем учитывать PTS, поскольку у меня уже есть кадр, скажем, даже если я вычислю PTS, это, вероятно, должно быть в будущем. это означает, что я создаю больше задержек, верно? добрый совет!!! - person Whoami; 27.02.2014
comment
Поскольку это не так, скорость воспроизведения вашего видео будет зависеть от производительности устройства. На медленном устройстве вы воспроизведете, может быть, 1x, но на быстром устройстве ваше видео будет воспроизводиться как 4x. Поэтому, если вы декодируете PTS, и это в будущем, вы просто сохраняете кадр в очереди и показываете его, когда придет время. - person George Y.; 28.02.2014