2016-10-06 3 views
0

Я использую libstreaming.Нужна помощь в сохранении HD-видеопотока в файл

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

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

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

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

code block where I initiate the MediaCodecs

ответ

1

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

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

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

Неудачно ли ваше дело, только если у вас есть другие настройки во втором кодере, или если у них одинаковые настройки?

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

+0

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

+0

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