Кодирование видео (encoding) — это процесс сжатия цифрового видеосигнала в формат, пригодный для хранения и передачи по сети с минимальными потерями качества. Без кодирования одна минута несжатого видео в разрешении 4K занимает около 30 ГБ, что делает передачу через интернет невозможной. Согласно отчёту Sandvine Global Internet Phenomena (2025), видео составляет 65% всего интернет-трафика, и кодирование — ключевая технология, делающая это возможным.
Главное
Кодирование видео (encoding) — это процесс преобразования несжатого видеосигнала в цифровой формат с использованием алгоритмов сжатия. Алгоритмы, реализованные в видеокодеках, удаляют избыточную информацию как в пространственной области (внутри одного кадра), так и во временной (между последовательными кадрами).
Несжатое видео представляет собой последовательность кадров, каждый из которых хранится как массив пикселей в формате RGB или YUV. Без сжатия одна секунда видео 1080p при 30 FPS требует около 1,5 ГБ памяти. Кодек H.264 сжимает этот поток до 3–5 Мбит/с, что в 2500 раз меньше исходного объёма.
Видеокодеки используют два типа сжатия: внутрикадровое (intra-frame) и межкадровое (inter-frame). Intra-frame сжатие применяется к каждому кадру независимо, используя алгоритмы, схожие с JPEG: дискретное косинусное преобразование (DCT), квантование и энтропийное кодирование.
Inter-frame сжатие анализирует разницу между последовательными кадрами и кодирует только изменения. Если фон статичен, кодек передаёт полный кадр только один раз (I-frame), а затем только разницу (P- и B-кадры), что значительно снижает объём данных для сцен с малой динамикой.
Выбор видеокодека определяет соотношение качества и размера файла, совместимость с устройствами и лицензионные отчисления. На рынке мобильных приложений доминируют четыре основных кодека: H.264 (AVC), H.265 (HEVC), VP9 и AV1.
| Кодек | Стандарт | Год | Компрессия vs H.264 | Лицензирование |
|---|---|---|---|---|
| H.264/AVC | MPEG-4 Part 10 | 2003 | 1x (базовый) | Роялти (MPEG LA) |
| H.265/HEVC | MPEG-H Part 2 | 2013 | 40–50% эффективнее | Роялти (два пула) |
| VP9 | 2013 | 30–40% эффективнее | Бесплатно | |
| AV1 | AOM | 2018 | 50–60% эффективнее | Бесплатно (Royalty-free) |
H.264 (AVC — Advanced Video Coding) остаётся самым совместимым видеокодеком: он поддерживается всеми мобильными устройствами, браузерами и Smart TV начиная с 2005 года. Аппаратное ускорение декодирования H.264 есть даже на бюджетных устройствах, что делает его идеальным для универсального потока.
Основной недостаток H.264 — относительно низкая эффективность сжатия по сравнению с современными кодеками. При одинаковом битрейте H.265 и AV1 обеспечивают заметно более высокое качество, что особенно важно для HDR- и 4K-контента.
H.265 (HEVC — High Efficiency Video Coding) обеспечивает на 40–50% лучшую компрессию, чем H.264, при том же визуальном качестве. Это достигается за счёт более гибкого разбиения кадра на блоки (CTU до 64×64 пикселей вместо 16×16) и улучшенных алгоритмов предсказания движения.
HEVC поддерживается на всех устройствах Apple (начиная с iPhone 6), на Android (начиная с версии 5.0 с аппаратным декодированием) и на большинстве Smart TV. Лицензионные отчисления HEVC выше, чем H.264, и управляются двумя патентными пулами, что усложняет юридическое использование.
AV1 — видеокодек, разработанный Alliance for Open Media (AOM), консорциумом под руководством Google, Netflix, Amazon, Intel и Mozilla. AV1 обеспечивает на 50–60% лучшую компрессию, чем H.264, и полностью свободен от роялти, что делает его привлекательным для стриминговых сервисов.
Главный недостаток AV1 — высокая вычислительная сложность кодирования. Кодирование AV1 может быть в 5–10 раз медленнее H.264 на том же оборудовании, хотя аппаратное декодирование уже появляется на устройствах 2024–2025 годов (Snapdragon 8 Gen 3, Apple A17 Pro).
Аудиокодеки в мобильных приложениях не менее важны, чем видеокодеки. Для стриминга видео требуется аудио с минимальной задержкой, высоким качеством и совместимостью с контейнерами MP4 и WebM. Три основных аудиокодека покрывают 99% мобильных стриминговых приложений.
AAC (Advanced Audio Coding) — преемник MP3, разработанный MPEG в 1997 году и ставший стандартным аудиокодеком для iTunes, YouTube и Android. AAC обеспечивает одинаковое качество с MP3 при битрейте на 30% ниже и поддерживает многоканальный звук до 7.1.
Для мобильных приложений рекомендуется AAC-LC при битрейте 128–192 кбит/с для стерео и AAC-HE для низких битрейтов 32–64 кбит/с. Аппаратное декодирование AAC есть на всех современных устройствах, что минимизирует энергопотребление.
Opus — открытый аудиокодек от IETF (RFC 6716), обеспечивающий лучшее качество среди всех аудиокодеков при битрейтах от 6 до 510 кбит/с. Opus объединяет SILK (алгоритм для речи) и CELT (для музыки) и автоматически переключает режимы в зависимости от контента.
Opus используется в WebRTC для видеозвонков, в приложениях Spotify и Discord, и поддерживается в HLS начиная с iOS 11 и Android 5.0. Низкая задержка Opus (5–26 мс против 40–100 мс у AAC) делает его предпочтительным выбором для живых трансляций и видеоконференций.
Параметры кодирования определяют конечный размер файла, качество видео и совместимость с устройствами. Разработчик мобильного приложения должен подобрать оптимальные настройки для каждого типа контента: фильмы, спортивные трансляции, пользовательский контент.
Битрейт — количество бит, используемых для кодирования одной секунды видео. Различают CBR (Constant Bitrate) — постоянный битрейт для живых трансляций, VBR (Variable Bitrate) — переменный с целевым качеством для архивного хранения и ABR (Average Bitrate) — усреднённый для стриминга.
| Разрешение | H.264 (рекомендуемый) | H.265/HEVC | AV1 |
|---|---|---|---|
| 360p | 400–800 кбит/с | 250–500 кбит/с | 200–400 кбит/с |
| 720p | 1,5–4 Мбит/с | 1–2,5 Мбит/с | 0,8–2 Мбит/с |
| 1080p | 3–8 Мбит/с | 2–5 Мбит/с | 1,5–4 Мбит/с |
| 4K (2160p) | 15–40 Мбит/с | 10–25 Мбит/с | 8–20 Мбит/с |
CRF (Constant Rate Factor) — параметр кодирования в x264 и x265, задающий целевое качество вместо фиксированного битрейта. Шкала CRF от 0 (lossless) до 51 (наихудшее качество), где 18–28 — рабочий диапазон. Для мобильных приложений рекомендуется CRF 23 для x264 и CRF 25 для x265.
CRF 18–20 обеспечивает высокое качество для презентационного контента и офлайн-просмотра. CRF 24–28 подходит для стриминга и пользовательского контента, где размер файла важнее абсолютного качества.
Стандарт H.264 определяет профили (Baseline, Main, High) и уровни (Level 1–5.2), которые ограничивают максимальные параметры видео. Baseline Profile совместим со всеми устройствами, но не поддерживает B-кадры. High Profile обеспечивает максимальное качество и используется для 1080p-контента.
Для 4K-стриминга требуется Level 5.1 и выше, что поддерживается большинством мобильных устройств начиная с 2018 года. Уровень кодека определяет максимальное разрешение, битрейт и размер буфера, гарантируя корректное декодирование на всех сертифицированных устройствах.
Кодирование для стриминга отличается от архивного кодирования необходимостью создания нескольких вариантов качества (ABR ladder) и оптимизацией для сетевой передачи. Контент-провайдеры используют транскодирование в реальном времени или предварительное кодирование для VOD.
Типовой ABR-набор для мобильных приложений включает 4–6 вариантов: от 144p (200 кбит/с) для слабых сетей до 1080p (8 Мбит/с) для Wi-Fi. Рекомендуемые разрешения: 144p, 240p, 360p, 480p, 720p, 1080p. Для 4K-контента добавляется 1440p и 2160p.
val mediaCodec = MediaCodec.createEncoderByType(
MediaFormat.MIMETYPE_VIDEO_AVC
)
val format = MediaFormat.createVideoFormat(
MediaFormat.MIMETYPE_VIDEO_AVC,
1280, 720
).apply {
setInteger(MediaFormat.KEY_BIT_RATE, 3_000_000)
setInteger(MediaFormat.KEY_FRAME_RATE, 30)
setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
setInteger(MediaFormat.KEY_PROFILE,
MediaCodecInfo.CodecProfileLevel.AVCProfileHigh)
setInteger(MediaFormat.KEY_LEVEL,
MediaCodecInfo.CodecProfileLevel.AVCLevel31)
}
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
Для живых трансляций особенно важна низкая задержка. Настройки кодирования должны минимизировать задержку ввода/вывода кодека: рекомендуется GOP размер 1–2 секунды (каждые 30–60 кадров), B-кадры отключены или минимизированы, для H.264 используется Baseline Profile.
Современные протоколы для низкой задержки — LL-HLS и CMAF-Low Latency — требуют фрагментированного кодирования с сегментами 1–2 секунды и возможностью частичной загрузки (Partial Segments). Кодек должен поддерживать moof-box в каждом сегменте для фрагментированного MP4.
Часто задаваемые вопросы
Кодирование видео — процесс сжатия цифрового видеосигнала с помощью кодеков для уменьшения объёма данных. В мобильных приложениях кодирование позволяет передавать и хранить видео, уменьшая размер в сотни раз без заметной потери качества на экране устройства.
H.264 обеспечивает максимальную совместимость со старыми устройствами, а H.265 на 40–50% эффективнее при том же качестве. Для контента 1080p и ниже достаточно H.264, для 4K рекомендуется H.265 или AV1 при поддержке устройством.
Битрейт — количество данных на секунду видео. Для 1080p оптимален битрейт 3–8 Мбит/с для H.264, 2–5 Мбит/с для H.265. Выбор зависит от контента: динамичные сцены (спорт) требуют более высокого битрейта, статичные (интервью) — более низкого.
VP9 — предшественник AV1 от Google, обеспечивающий компрессию на уровне H.265. AV1 сжимает на 20–30% эффективнее VP9, но требует в 5–10 раз больше ресурсов на кодирование. VP9 лучше для YouTube, AV1 — для Netflix и современных стриминговых сервисов.
Для живых трансляций используйте H.264 Baseline Profile с GOP 1–2 секунды, без B-кадров, битрейт 2–4 Мбит/с для 1080p. Включите фрагментированный MP4 (CMAF) для LL-HLS и используйте аппаратное кодирование через MediaCodec или VideoToolbox.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также