Кодек не поддерживается h 264 avc

Обновлено: 01.07.2024

В этой статье описываются ограничения разрешения видео для H.264 и стабилизации видео.

Применяется к: Windows 8
Исходный номер КБ: 2829223

Сводка

Поддержка H.264 в Windows 8 и Windows RT ограничена 2048x2048 пикселями для кодирования и декодирования. Пример кадров, используемых DSP стабилизации видео ограничены 16k пикселей DirectX 2D.

Дополнительная информация

Коддер/декодер

Стандарт H.264 распознает разрешения только до 2048x2048. Декодер и коддер Microsoft H.264 (MP4) предназначены только для поддержки видеоконтента до стандарта H.264. Коддер/декодер Microsoft H.264 (MP4) поддерживает любое пользовательское или стандартное разрешение в пределах 2048x2048. Коддер/декодер Microsoft H.264 (MP4) поддерживает любое настраиваемую или стандартную пропорцию аспектов.

Обычно поддерживаемые разрешения и коэффициенты аспектов включают:

  • 854 x 480 (16:9 480p)
  • 1280 x 720 (16:9 720p)
  • 1920 x 1080 (16:9 1080p)
  • 640 x 480 (4:3 480p)
  • 1280 x 1024 (5:4)
  • 1920 x 1440 (4:3)

DSP стабилизации видео

Процессор цифрового сигнала для стабилизации видео (DSP), используемый Windows 8 и Windows RT, основан на реализации DirectX 2D. DirectX 2D определяет ограничение в 16k для ширины буфера. DSP стабилизации видео создает буфер DirectX 2D, который представляет несколько кадров; содержимое каждой строки — это пример кадра, а каждая строка — это история образцов кадров. Каждая строка (пример кадра) содержит пиксели 1/16-й части кадров источника (Ширина/16 x Height/16). В связи с ограничением 16k в строке DirectX 2D максимальное стандартное разрешение, поддерживаемые для 16:9 и 4:3, является:

  • 16:9 — 2560 x 1440 (исходный кадр) = 160 x 90 (пример кадра) = 14 400 пикселей на строку
  • 4:3 — 2304 × 1728 (Исходный кадр) = 144 x 108 (пример кадра) = 15 552 пикселя на строкуНеся эти разрешения исходных кадров больше, чем ограничение H.264 2048x2048. Стабилизация видео в этих более высоких разрешениях может быть успешно использована, если она не связана с кодизацией H.264.

Приложение камеры

В режиме видео приложение Microsoft Store камеры сообщает об ошибке "Что-то пошло не так во время записи этого видео", когда разрешение камеры превышает пределы H.624 или стабилизации видео - во время захвата, а не при предварительном просмотре. Чтобы устранить эту ошибку, используйте более низкое разрешение или измените отношение аспектов.

Если ошибка приложения камеры наблюдается, обратитесь к поставщику камеры - неподтверченные разрешения видео не должны быть указаны драйвером камеры. Драйвер камеры может перечислять разрешения выше, чем ограничение видео для захвата изображений.

«У меня имеется система видеонаблюдения, и я хочу просмотреть свои прошлые записи. Видеофайлы загружаются в формате .h264, я пробовал открывать их с помощью VLC Player, но проиграть файлы не удалось».

Эти и другие вопросы, связанные с файлами формата .h264, сегодня встречаются достаточно часто. Связано это с тем, что стандарт H.264 завоевал большую популярность, как в любительском, так и в профессиональном цифровом видео.

H.264, чем открыть?

Что такое файл стандарта H.264?

Говоря простым языком, файл H.264 (MPEG-4 AVC) – это видеофайл, закодированный в лицензируемом стандарте сжатия видео H.264, обеспечивающем высокий уровень компрессии (низкий битрейт) при отличном качестве получаемого изображения.

Справка! Битрейт – количество бит (единиц информации), передающихся за единицу времени. Для фильмов стандарта Full HD (1080 p) битрейт видеофайла составляет около 10 Мбит/сек.

Из-за высокого уровня компрессии и других своих достоинств кодек H.264 заменил собой предыдущий кодек MPEG-4 ASP и широко применяется в видеокамерах AVCHD, на дисках Blu-ray и HD DVD, на ТВ HDTV и т.д.

Основные преимущества файлов формата H.264 AVC

Преимущества H.264 AVC:

  • аудио в кодеке может быть сжато отдельно и захвачено вместе с видео потоком H.264;
  • обратно совместим со старыми стандартами сжатия, к примеру H.263/H.261 и т.д.;
  • уменьшает размер цифрового видеофайла примерно на 50%;
  • открыт для лицензирования для всех поставщиков;
  • является стандартом взаимодействия между различными устройствами;
  • позволяет передавать видео с камер высокого разрешения (high definition) через Интернет.

Чем открыть файл формата .h264 в ОС Windows?

Существует множество медиаплееров в ОС Windows, проигрывающих файлы формата h.264.

Лучшие программы, с помощью которых можно открыть файл формата H.264

Лучшие программы, с помощью которых можно открыть файл формата H.264

Некоторые лучшие из них:

  • VLC Media Player;
  • KMPlayer;
  • BSPlayer;
  • Light Alloy;
  • GOM Player;
  • Media Player Classic.

Воспроизведение файлов H.264 с помощью медиаплеера VLC

К примеру, у пользователя имеется отснятый материал с камер видеонаблюдения или бытовой видеокамеры в формате .h264 и ему требуется воспроизвести отснятое видео в ОС Windows.

Нажимаем «Download VLC»

Примечание! Скачанный файл можно найти в «Настройках» браузера, перейдя в его «Загрузки».

Заходим в «Настройки» браузера, открываем «Загрузки»

Шаг 2. Запустить скачанный файл.

Запускаем скачанный файл

Шаг 3. Выбрать язык и нажать «OK».

Выбираем язык и нажимаем «OK»

Шаг 4. Трижды нажать «Далее».

Нажимаем «Далее»

Шаг 5. Нажать «Установить».

Нажимаем «Установить»

Шаг 6. После установки программного обеспечения нажать «Готово».

Нажимаем «Готово»

Шаг 7. После запуска программы нажать «Инструменты» и щелкнуть «Настройки».

Нажимаем «Инструменты» и щелкаем «Настройки»

Шаг 8. Раскрыть слева щелчками мыши пункт «Ввод/кодеки» и выбрать «Демультиплексоры».

Раскрываем слева щелчками мыши пункт «Ввод-кодеки» и выбираем «Демультиплексоры»

Раскрываем слева щелчками мыши пункт «Ввод-кодеки» и выбираем «Демультиплексоры»

Шаг 9. Выбрать справа в выпадающем списке «Модуль демультиплексора» вариант «Демультиплексор H264» и нажать «Сохранить».

Выбираем в списке «Модуль демультиплексора» вариант «Демультиплексор H264», нажимаем «Сохранить»

Выбираем в списке «Модуль демультиплексора» вариант «Демультиплексор H264», нажимаем «Сохранить»

Теперь можно открывать и просматривать файлы H.264 в медиаплеере VLC. Для этого необходимо:

Шаг 1. Нажать «Медиа» и щелкнуть «Открыть файл…».

Нажимаем «Медиа» и щелкаем «Открыть файл…»

Шаг 2. Выбрать в раскрывающемся списке «все файлы», щелкнуть мышью в окне на нужном файле и нажать «Открыть».

Выбираем в раскрывающемся списке «все файлы», щелкаем мышью в окне на нужном файле и нажимаем «Открыть»

Выбираем в раскрывающемся списке «все файлы», щелкаем мышью в окне на нужном файле и нажимаем «Открыть»

Также можно просто перетащить нужный файл из папки Windows в окно медиаплеера для открытия файла.

С помощью мышки перетаскиваем файл из папки в окно медиаплеера для открытия файла

С помощью мышки перетаскиваем файл из папки в окно медиаплеера для открытия файла

Видео откроется в окне видеоплеера.

Воспроизведение видео формата H.264 в медиаплеере VLC

Воспроизведение видео формата H.264 в медиаплеере VLC

После просмотра видео можно вернуть автоматический выбор демультиплексора.

Совет! При проблемах воспроизведения видео с кодеками H.264 также можно попробовать переименовать расширение файла .h264 в файл .mpg и попробовать воспроизвести его.

Установка медиа декодера ffdshow

Если файл не проигрывается, в операционную систему можно установить универсальный медиа декодер ffdshow.

Переходим на официальный сайт, нажимаем по ссылке для скачивания, которая соответствует установленной ОС

Переходим на официальный сайт, нажимаем по ссылке для скачивания, которая соответствует установленной ОС

Шаг 2. Запустить скачанный файл из папки «Загрузки» или из другой папки, в которую сохранили при скачивании.

Запускаем скачанный файл из папки «Загрузки»

Шаг 3. Нажать «OK».

Нажимаем «ОК»

Шаг 4. Шесть раз нажать «Далее».

Читаем информацию, нажимаем «Далее»

Шаг 5. Нажать «Установить».

Нажимаем по кнопке «Установить»

Шаг 6. Снять галочки с пунктов настройки декодера и нажать «Завершить».

Снимаем галочки с пунктов настройки декодера и нажать «Завершить».

Снимаем галочки с пунктов настройки декодера и нажать «Завершить».

После установки медиа декодера он сможет проигрывать видеопоток H.264 в любом DirectShow-совместимом медиаплеере автоматически.

Как воспроизводить файлы H.264 и H.265 на плеере VLC и конвертировать в MP4?

Видеокодеки H.264 и H.265 сегодня являются наиболее распространенным для сжатия видео в системах видеонаблюдения. Но как воспроизводить сжатые этими кодеками файлы на компьютере под управлением Windows или Mac OS?

Проще и лучше всего для этого использовать видео проигрыватель VLC. Для этого нужно выполнить несколько действий:

Шаг 1. Загрузите последнюю версию VLC здесь и установите ее на свой компьютер.

Шаг 2. Запустите медиаплеер VLC. Перейдите в Инструменты, а затем нажмите Настройки.




Шаг 4. Выберите «H264 video demuxer» или HEVC/H.265 video demuxerв модуле Demux. Затем нажмите Сохранить.


После этого сжатое одним из этих кодеков видео можно просматривать на ПК или ноутбуке пол любой операционной системой в медиаплеере VLC.

Кому проще увидеть один раз, чем 10 раз прочесть, предлагаем посмотреть видеоролик.

Если у вас возникают проблемы и вы не можете воспроизводить видео H.264 или H.265 на проигрывателе VLC, попробуйте следующие советы по устранению неполадок, которые могут помочь решить проблемы:

Как конвертировать файлы H.264 в MP4

Другой способ воспроизвести видео H.264 на VLC заключается в том, чтобы сначала преобразовать файлы H.264 или H.265 в формат MP4, а затем воспроизвести видео на медиаплеере VLC. Однако в настоящее время большинство производителей видеонаблюдения предоставляют встроенные конвертеры, поэтому при экспорте видео они уже находятся в формате MP4.

Для преобразования файлов H.264 / H.265 в MP4 нужно:

Шаг 1. Используйте бесплатный видео конвертер, такой как VSDC Free Video Converter или Subler . Загрузите его и установите на свой компьютер.

Шаг 2. Нажмите « Добавить файлы » и добавьте файлы H.264 или H.265 , которые необходимо преобразовать.

Шаг 3. Выберите « MP4 » в качестве формата видео, в который вы хотите преобразовать.

Шаг 4. Нажмите « Преобразовать» , дождитесь завершения и нажмите « Сохранить» .

После того, как вы закончите преобразование файлов H.264 в формат MP4, вы сможете воспроизводить и просматривать видео в проигрывателе VLC.

Ну а мы напоминаем, что наша компания «Запишем всё» с 2010 года занимается монтажом, модернизацией и обслуживанием любых систем видеонаблюдения, а также видеодомофонов в Москве и Подмосковье.

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

Для видеозвонков в Badoo мы используем стандарт WebRTC и кодек H.264. Если верить документации, этот кодек должен без проблем работать на любых устройствах Android начиная с Android 5.0. Но на практике всё оказалось не совсем так. В этой статье я расскажу про особенности реализации аппаратного кодирования для кодека H.264 в WebRTC и о том, как заставить его работать на большем количестве устройств.




Почему именно H.264?

При соединении по WebRTC все устройства, участвующие в сеансе, передают различные параметры связи, в том числе видео- и аудиокодеки. Если устройства поддерживают несколько кодеков (например, VP8 и H.264), приоритетные для платформы кодеки указываются первыми. Эти данные используются на этапе согласования в WebRTC, после которого остаются только кодеки, поддерживаемые всеми устройствами. Пример таких данных с расшифровкой можно увидеть в этом документе.

В случае с видеозвонками при отсутствии на одном из устройств поддержки кодека H.264 оба устройства могут перейти, например, на кодек VP8, который не зависит от аппаратной реализации на устройстве. Но наше приложение доступно на самых разных гаджетах, в том числе на смартфонах предыдущих поколений. Поэтому для видеосвязи мы хотели по возможности использовать аппаратное кодирование: оно снижает нагрузку на процессор и не так сильно ест батарею, что критично для устаревших гаджетов. Поддержка аппаратного кодирования H.264 реализована на большом количестве устройств, в отличие от того же VP8.

Поддержка H.264 на Android

Если верить описанию поддержки форматов мультимедиа, декодирование H.264 Baseline Profile должно работать на всех Android-устройствах, а кодирование — начиная с Android 3.0. В Badoo мы поддерживаем устройства начиная с Android 5.0, так что у нас не должно было возникнуть проблем. Но всё оказалось не так просто: даже в гаджетах с пятой версией мы обнаружили большое количество особенностей.

С чем это может быть связано?

Нас в этом наборе тестов интересуют мультимедиа-тесты, а конкретнее — тесты на кодирование и декодирование видео. Я решил остановиться на тестах EncodeDecodeTest, MediaCodecTest, DecoderTest и EncoderTest, так как они присутствуют на всех версиях Android начиная с 4.3. График количества строк кода в этих тестах выглядит так:


До версии 4.3 большинства из этих тестов просто не существовало, и значительный их прирост пришёлся на версии 5 и 7. Поэтому можно говорить о том, что до версии Android 4.3 Google никак не проверяла соответствие устройств своей спецификации по кодированию и декодированию видео, а в версии 5.0 значительно улучшила эту проверку.

Казалось бы, это указывает на то, что начиная с версии 5.0 с кодированием всё должно быть в порядке. Но, учитывая предыдущий мой опыт работы с декодированием потокового видео на Android, я был уверен, что это не так. Достаточно было посмотреть на количество топиков про кодирование в Google-группе discuss-webrtc.

Искать подводные камни нам помогали исходные файлы WebRTC, которые находятся в свободном доступе. Рассмотрим их подробнее.

Поддержка H.264 в WebRTC

Тут есть метод с говорящим названием isHardwareSupportedInCurrentSdkH264:


Как мы видим, поддержка аппаратного кодирования на Android реализована только для чипсетов Qualcomm и Exynos. Почему же в стандартной реализации WebRTC нет поддержки других чипсетов? Вероятнее всего, это связано с особенностями реализации аппаратных кодеков производителей. И выявить эти особенности часто можно только на продакшене, поскольку найти те или иные устройства не всегда представляется возможным.

Все описания кодеков на устройстве хранятся в файле media_codecs.xml. Вот, например, этот файл для Pixel XL и для HUAWEI P8 lite. При получении списка кодеков с помощью метода getCodecInfos() объекта MediaCodecList этот файл парсится — и возвращаются кодеки, хранящиеся в нём. Эта операция и правильность заполнения этого файла производителем покрываются в CTS тестом MediaCodecListTest, который также увеличился со 160 строк кода в Android 4.3 до 740 строк в Android 10.

В Badoo мы поменяли код метода isHardwareSupportedInCurrentSdkH264, отказавшись от «белого» списка кодеков и заменив его «чёрным» списком префиксов программных кодеков, которые перечислены в WebRTC:


Но нельзя просто так взять и реализовать поддержку всех кодеков, не обращая внимания на особенности производителей. Из названий топиков, посвящённых аппаратному кодированию на Android в группе discuss-webrtc, можно понять, что в этом случае у нас точно возникнут ошибки. В основном они появляются на этапе конфигурации кодека.

Параметры конфигурации кодека

Инициализация кодека для кодирования выглядит так:


В некоторых из этих параметров легко допустить ошибку, что вызовет исключение при конфигурации кодека и нарушит работу приложения. Также при работе с кодеком может понадобиться регулировать его битрейт в зависимости от различных факторов, так как сам кодек делает это неправильно. За это в WebRTC отвечает класс BaseBitrateAdjuster, у которого есть два наследника:

    — регулирует битрейт в зависимости от объёма данных, — регулирует битрейт в зависимости от частоты кадров.

Разрешение потока

После получения для кодека объекта MediaCodecInfo можно изучить кодек подробнее, получив его возможности в классе CodecCapabilities. Из них можно узнать, поддерживает ли кодек выбранные разрешение и частоту кадров. Если он поддерживает эти параметры, их можно устанавливать безопасно.

Однако иногда это правило не работает. Мы столкнулись с тем, что кодеки с префиксом “OMX.MARVELL.” кодировали неправильно, показывая зелёные полосы по краям экрана, если разрешение потока отличалось от 4:3. При этом сам кодек утверждал, что выбранные разрешение и частота кадров поддерживаются.

Режим битрейта

Стандартный режим для всех видеокодеков — постоянный битрейт. Однако однажды нам пришлось использовать переменный битрейт:


Произошло это на устройстве Lenovo A1000 с чипсетом компании Spreadtrum (теперь Unisoc), начинающимся с префикса “OMX.sprd.”. Поиск в Интернете привёл нас к посту шестилетней давности о Firefox OS, описывающему эту проблему и способ её решения.

Цветовой формат

При использовании кодека в режиме байт-буферов необходимо выбрать правильный формат. Обычно это делается с помощью функции следующего вида:


Грубо говоря, всегда выбирается первый из поддерживаемых цветовых форматов.

Однако в случае с кодеками HUAWEI, начинающимися с префиксов «OMX.IMG.TOPAZ.», «OMX.hisi.» и «OMX.k3.», это не работало, и после долгих поисков мы нашли решение: вне зависимости от того, какой формат возвращают эти кодеки, необходимо использовать формат COLOR_FormatYUV420SemiPlanar. Разобраться в этом нам помог тред на одном китайском форуме.

Регулировка битрейта

Стандартный код WebRTC содержит следующее:


Как видно из этого кода, для всех чипсетов, кроме Exynos, регулировка битрейта выключена. Но это относится только к Qualcomm, так как в стандартном коде поддерживаются только Exynos и Qualcomm. Поэкспериментировав с различными значениями этой настройки, а также поискав в Интернете, мы выяснили, что для кодеков с префиксами «OMX.MTK.» её тоже нужно включить. Также необходимо сделать это для кодеков HUAWEI, начинающихся с префикса «OMX.IMG.TOPAZ.», «OMX.hisi.» или «OMX.k3.». Это связано с тем, что эти кодеки не используют временные метки кадров для регулировки битрейта, считая, что все кадры приходят с одинаковой частотой, установленной при конфигурации кодека.

В завершение приведу список кодеков, которые мы получили для устройств на Android 5.0 и 5.1. Они были нам интересны в первую очередь потому, что на более новых версиях Android ситуация улучшается и нестандартных кодеков становится всё меньше.

Это видно на графике ниже. Шкала логарифмическая, чтобы лучше показать редкие случаи.



Как мы видим, у большинства устройств были чипсеты Spreadtrum, MediaTek, HUAWEI и MARVELL — поэтому наши изменения помогли включить аппаратное кодирование на этих гаджетах.

Результат

Хотя мы и предполагали, что на некоторых устройствах при работе с H.264 будут возникать проблемы, Android опять смог нас удивить. Как мы видим из статистики пользователей Badoo, на руках у пользователей ещё достаточно много устройств 2014–2016 года выпуска, которые они не хотят или не могут обновлять. И хотя ситуация с выходом обновлений Android для новых устройств уже гораздо лучше, чем несколько лет назад, доля гаджетов предыдущего поколения сокращается довольно медленно и поддерживать их придётся ещё достаточно долго.

Сейчас WebRTC активно развивается Google из-за его использования в проекте Stadia (вот видео с подробностями на эту тему), поэтому он будет становиться всё лучше и лучше и, скорее всего, станет стандартом для реализации видеосвязи. Надеюсь, что эта статья поможет вам понять особенности работы с H.264 в WebRTC и использовать это в своих проектах.

Читайте также: