Нужна помощь в сохранении видеопотока HD в файл

#android #android-mediacodec

#Android #android-mediacodec

Вопрос:

Я использую libstreaming.

Я хотел бы инициировать два MediaCodec s с разными настройками и битрейтами (один низкого качества, который будет передаваться через HTTP, и один высокий, который будет сохранен на SDCARD).

Проблема, похоже, в том, что я не могу захватить два отдельных объекта Mediacodec с разными настройками.

Версия с высоким битрейтом сохраняется как видео, не содержащее ничего, кроме зеленого фона *, если размеры не установлены на <352×288, однако версия с низким битрейтом успешно (и правильно) транслируется в Интернет.

Я действительно надеюсь, что я делаю что-то явно неправильное и что есть простой способ сохранить HD-версию потока на диск.

блок кода, в котором я инициирую MediaCodecs

Ответ №1:

В общем, это должно работать на большинстве устройств — я делаю это без проблем на ряде устройств.

Но есть некоторые устройства, на которых драйвер кодировщика имеет ограничения для этого — в частности, некоторые устройства Intel отказываются создавать второй экземпляр кодировщика, пока он активен. (На ум приходит Samsung Galaxy Note 3 10.1 — не уверен, есть ли у всех других устройств на базе Intel такая же проблема или только у некоторых из них.)

К сожалению, даже если в тестах Android CTS есть тесты, чтобы убедиться, что аппаратный кодировщик работает, нет теста, который гарантировал бы, что у вас может быть более одного активного кодировщика одновременно.

Ваш случай завершается неудачей, только если у вас разные настройки на втором кодировщике или у них одинаковые настройки?

Если один поток имеет низкое разрешение, вы можете попробовать использовать для этого кодировщик SW, а для версии с высоким разрешением — кодировщик HW. На Android 6.0 кодировщик SW OMX.google.h264.encoder должен быть вполне приличным, в то время как в более старых версиях он практически непригоден для использования.

Комментарии:

1. Большое спасибо… последует вашему совету и отчитается. В ответ на ваш вопрос о сбое case — да — кажется, что сбой происходит только тогда, когда настройки разные. Локальная версия сохраняется правильно, когда разрешение меньше некоторого (довольно небольшого) числа.

2. Хм, верно. Не могли бы вы рассказать, что это за устройство и какие комбинации разрешений работают, а какие нет? Это также может быть своего рода ограничение на общий объем памяти, доступный для кодировщика HW. Например, если вы на максимуме можете кодировать один поток 1080p, вы можете кодировать 720p с низким разрешением, если общее использование памяти для них обоих не превышает одногоиспользуется поток 1080p.