2014-12-09 8 views
0

Я работаю над проектом, который требует точного поиска видео, потому что система должна быть синхронизирована с другими устройствами. ОС для воспроизведения видео - это Android. До сих пор я использовал класс MediaPlayer, но в зависимости от количества ключевых кадров поиск был очень неточным.Пользовательский код для плавного поиска воспроизведения видео на Android

Итак, моя следующая идея - кэшировать декодированные изображения и обернуть вокруг него собственный класс воспроизведения. До сих пор я понимаю, как использовать классы MediaExtractor и MediaCodec для декодирования видео вручную. Класс android.media.ImageReader, похоже, именно то, что я хочу.

Но я не понимаю, как визуализировать такой файл android.media.Image вручную, как только я его получу? Я хотел бы предотвратить преобразование YUV в RGB вручную, вместо этого предпочтительным методом было бы сделать такое изображение на поверхности или каким-то образом скопировать его в SurfaceTexture.

+0

никогда не использовали его, но есть getSurface() метод так вы можете использовать его? – pskink

+1

У вас есть два подхода: (1) визуализировать все из предыдущего ключевого кадра, сохраняя все выходные данные; (2) каждый раз переходите к ключевому кадру и играйте вперед, отбрасывая все кадры, которые вы не хотите. Если декодер способен достаточно быстро декодировать кадры, нет необходимости хранить полные несжатые кадры. Для # 1 ImageReader - это то, что вы хотели бы использовать, но в последнее время я проверил его только с камерой, а не с MediaCodec (который использует разные форматы YUV). И нет соответствующего ImageWriter, чтобы вернуть данные на поверхность. – fadden

ответ