Создание webm-файла в андроиде

Я пытаюсь создать файл webm в Android, используя Android MediaCodec API. Я создал кодировщик VP8, используя MediaCodec.createEncoderByType("video/x-vnd.on2.vp8"), как показано в этом тесте CTS: https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/Vp8EncoderTest.java

Я передаю вход кодировщику из файла Surface.

И я использую этот класс IvfWriter: https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/IvfWriter.java для записи файла на SD-карту.

Но после написания я не могу воспроизвести этот файл ни в MxPlayer (Android), ни на своем рабочем столе с помощью VLC/Firefox. Firefox сообщает, что файл поврежден.

Это файл, который был создан: https://www.dropbox.com/s/dwk42m9qz2mlagv/derp.webm

Было бы здорово, если бы кто-нибудь подсказал мне способ отладки видео.


person omerjerk    schedule 17.07.2014    source источник


Ответы (2)


Созданный вами файл «webm» не является файлом webm — это файл ivf (гораздо более простой формат, в основном используемый для хранения данных кодека VPx для тестирования), и firefox не поддерживает этот формат. Хотя VLC это поддерживает.

Но что касается самого видео — каждый байт равен 0 в каждом видеопакете в вашем файле, поэтому, похоже, что-то идет не так в том, как вы вызываете класс IvfWriter из своего кода — не видя больше вашего кода, трудно сказать, что не так. Однако пакеты имеют различную длину, поэтому ошибкой является только содержимое отдельных пакетов.

Чтобы выполнить такую ​​отладку самостоятельно, вы можете использовать инструменты avconv (или ffmpeg), например. примерно так: avconv -loglevel debug -dump -hex -i derp.webm -f null - Это покажет вам метаданные (размер, метки времени, флаги) для каждого пакета и сам контент полезной нагрузки.

person mstorsjo    schedule 13.08.2014

Существует известная проблема с вводом данных Surface в VP8 на Android 4.3. :

Мы предоставили раннюю предварительную версию кодировщика VP8 для версии 4.3, в которой были некоторые недостатки, такие как отсутствие поддержки ввода с поверхности и неверные передаваемые форматы.

Согласно багу, проблемы были исправлены в Android 4.4.

person fadden    schedule 17.07.2014
comment
Привет, я тестирую свое приложение на Android 4.4.4, работающем на Nexus 5. Что еще может пойти не так? - person omerjerk; 17.07.2014