Я нашел MediaPlayer
не может воспроизводить видео, которые кодируются H.264 Main Profile
и я попытался ExoPlayer
и Vitamio
, но ни один из них не решить мою проблему. наконец, я нашел лучшее решение для конвертирования видео в H.264 Baseline Profile
. FFmpeg
- это почти 9 МБ, и это очень тяжело для моего проекта, поэтому я не люблю использовать его для преобразования видео в этот профиль с помощью команд. Мой друг предложил конвертировать видео на серверной стороне, но мы оба знаем, что он имеет плохую производительность. Что мне делать? Какое наилучшее решение этой проблемы?Android - лучшее решение для преобразования записывается H.264 Main Profile видео в H.264 Baseline Profile
ответ
Android технически поддерживает только базовый уровень H.264, но многие из новых (обычно высокопроизводительных устройств) будут играть в основной профиль H.264. Например, Nexus 4,5,6,7 и 10 выполняются, например. Итак, у вас есть несколько вариантов ... Вы либо просто используете H.264 Main, и не заботитесь о старых устройствах, которые его не поддерживают, или вы конвертируете на сервер. Выполнение преобразования на устройстве - плохая идея. Если он не поддерживает базовый уровень H.264, он, вероятно, был сделан по соображениям производительности и выполнял преобразование на устройстве, а затем декодирование собирается раздавить CPU.
Стоит отметить, что ExoPlayer будет использовать те же устройства-кодеки, что и MediaPlayer, потому что это всего лишь оболочка MediaCodec. Vitamio - это обертка вокруг ffmpeg, и возможно, что главный кодек H.264 может быть создан с помощью специальной сборки ffmpeg, но опять же, если ее нет, производительность, вероятно, была проблемой.
Мы уже конвертируем видео на серверной стороне, но мы сомневаемся в его производительности. Мы считаем, что такие приложения, как Instagram, обрабатывают эту проблему по-другому. Мы боремся с проблемой почти два месяца! Если вы знаете больше о проблеме и ее решениях, или вы лично ее испытали, поделитесь ими с сообществом, включая меня, пожалуйста. – Alireza
Для поддержки большинства устройств Android требуется обслуживание базовой линии H.264. Преобразование из Main или High требует декодирования и кодирования для удаления B-кадров для перехода к базовой линии. Выполнение этого на устройстве нецелесообразно, потому что декодирование может не поддерживаться в первую очередь. Для компаний, у которых есть ресурсы, я подозреваю, что они кэшируют несколько форматов и битрейт на стороне сервера, а затем обслуживают их динамически через фрагментированный MP4 (или что-то подобное) на основе того, что поддерживает устройство, и качества сети. – Kaleb