2014-01-03 2 views
2

Я разрабатываю плеер на android, используя ffmpeg. Однако я обнаружил, что avcodec_decode_video2 очень медленный. Иногда для декодирования кадра с видео с разрешением 1920 × 1080 требуется около 0,1, даже 0,2 секунды.slow avcodec_decode_video2, ffmpeg on android

Как я могу улучшить скорость avcodec_decode_video2()?

ответ

1

Если ваше устройство имеет необходимые аппаратные средства + возможности прошивки, вы можете использовать ffmpeg with libstagefright support.

Update: здесь простая процедура, чтобы решить, стоит ли время, чтобы переключиться на libstagefright на устройстве для данного класса видео: использовать FFmpeg на вашем компьютере, чтобы преобразовать репрезентативной видеопоток в mp4:

ffmpeg -i your_video -an -vcodec copy test.mp4 

и попробуйте открыть полученный файл с помощью видеопроигрывателя на вашем устройстве. Если видео действительно работает с разумным качеством, вы можете использовать libstagefright с ffmpeg, чтобы улучшить ваше приложение для проигрывателя. Если вы видите «Can not Play Video», ваше устройство hw + fw не поддерживает видео.

"Cannot Play Video" popup

+0

Я использую Samsung S3, можно использовать FFmpeg с libstagefright? У вас есть рабочий пример использования libstagefright? –

+0

Существует простой способ проверить, стоит ли libstagefright, обновленный ответ. –

+0

ffmpeg недавно сбросил libstagefright: http://stackoverflow.com/a/35563448/895245 –

1

Это звучит об обряде. HD-видео занимает много процессора. Некоторые кодеки могут поддерживать многопоточное декодирование, если устройство имеет несколько ядер. Но воля потребляет огромные количества батареи и нагревает устройство. Вот почему большинство мобильных устройств используют специализированные аппаратные декодеры вместо CPU. В Android с использованием MediaCodec API вместо libavcodec следует вызывать аппаратный декодер.