Какую полосу пропускания занимает видео с разрешением 480p, 720p, 1080p, 2k, 4k, 8k, 12k?
Какую полосу пропускания занимает видео с разрешением 480p, 720p, 1080p, 2k, 4k, 8k, 12k?

Технический опыт

Многим разработчикам при настройке параметров кодирования видео не хватает соответствующего опыта настройки полосы пропускания для разных разрешений. Фактически, на соотношение между разрешением видео и требуемой полосой пропускания влияет множество факторов, включая метод кодирования видео, частоту кадров, степень динамичности видео. контент и т. д. Ниже мы анализируем приблизительную пропускную способность, необходимую для разных разрешений:

Факторы, влияющие на пропускную способность видео

  1. Метод кодирования видео
    • Различные методы кодирования предъявляют очень разные требования к полосе пропускания. Например, H.264 Это широко используемый стандарт кодирования, обеспечивающий хорошее качество видео при относительно низкой полосе пропускания. H.265 (HEVC) обычно лучше, чем видео того же качества. H.264 Требуемая пропускная способность ниже.
    • Новые стандарты кодирования, такие как AV1 также постоянно повышает эффективность сжатия и еще больше снижает требования к полосе пропускания.
  2. Частота кадров
    • Частота Чем выше частота кадров, тем больше кадров изображения передается в секунду и соответственно увеличивается требуемая полоса пропускания. Общая Частота кадровиметь 24fps、30fps、60fps ждать.
    • Например, 1080p видео в 30fps Требуемая полоса пропускания может быть связана с 60fps Ниже есть большая разница.
  3. Насколько динамичен видеоконтент
    • Если видео содержит большое количество быстродвижущихся изображений, сложных сцен или изображений с высокой детализацией, для точной передачи этой информации требуется большая полоса пропускания.
    • По сравнению с видео, в основном статичными сценами, видео с динамическим контентом, например боевиками и спортивными событиями, обычно требуют более высокой пропускной способности.

Приблизительные требования к пропускной способности для разных разрешений

  1. 480p
    • Обычно 480p Видео также может быть лучше просмотрено при более низкой скорости передачи данных. Для стандартного разрешения 480p видео с использованием H.264 кодирование, в 1Mbps - 2Mbps Более плавный эффект воспроизведения можно получить при использовании полосы пропускания.
    • Если видеоконтент относительно простой и менее динамичный, он может 1Mbps Следующие полосы пропускания также могут воспроизводиться, но при этом может наблюдаться некоторая потеря качества изображения.
  2. 720p
    • 720p Видео высокой четкости требует более высокой пропускной способности для обеспечения качества изображения. Вообще говоря, используйте H.264 закодированный 720p видео в 2Mbps - 4Mbps Вы можете получить лучшее качество просмотра при такой пропускной способности.
    • Если это очень динамичный видеоконтент или требуется более высокое качество изображения, возможно, потребуется подойти к 5Mbps пропускная способность.
  3. 1080p
    • Полное HD 1080p Видео имеет более высокие требования к пропускной способности. Обычно используется H.264. закодированный 1080p видео в 4Mbps - 8Mbps Это может иметь лучший эффект воспроизведения при пропускной способности.
    • Для высокого качества 1080p видео, особенно 60fps извысокий Частота кадрвидео, может потребоваться 10 Мбит/с Еще вышепропускная способность.
  4. 2K
    • 2K разрешение (обычно 2560×1440) видео требует большой пропускной способности для передачи высококачественных изображений. Вообще говоря, используйте H.264 закодированный 2K видео в 8Mbps - 15Mbps Вы можете получить лучшее качество просмотра при такой пропускной способности.
    • Если оно очень динамичное и высокое Частота кадровили Если у пользователя очень высокие требования к качеству изображения, возможно, потребуется 20Mbps Вот и всепропускная способность.
  5. 4K
    • 4K разрешение (обычно 3840×2160) в настоящее время является очень высоким стандартом качества изображения, требующим огромной пропускной способности. использовать H.264 закодированный 4K Видео обычно требует 20Mbps - 50Mbps пропускную способность, чтобы получить лучшее качество просмотра.
    • Вместо этого используйте более эффективные стандарты кодирования, такие как H.265 или AV1 может обеспечить лучшее качество изображения при более низкой полосе пропускания, но обычно требует 15Mbps - 30Mbps пропускная способность.для высокого Частота кадров, высокодинамичный 4K видео, может потребоваться более 50Mbps пропускная способность.
  6. видео 8К
    • Если эффективность кодирования видео низкая, для плавного воспроизведения видео 8K может потребоваться 70-80Mbps пропускная способность.
    • Для более высокого качества, высокого Частота кадровиз видео 8К, требования к пропускной способности могут достигать 200Mbps Еще выше.
  7. 12К видео
    • в настоящий момент 12К видео еще не получило широкого распространения, и фактических данных о применении мало. Но теоретически 12К Требования к пропускной способности видео будут намного выше, чем видео 8К. Если оценивать на основе простого соотношения количества пикселей, 12К Требования к пропускной способности видео могут быть видео 8К 1.5 раз фактическая потребность в пропускной способности также будет зависеть от кодирования видео、Частота Влияние различных факторов, таких как кадры и глубина цвета.

Кодирование видео на платформе Android

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

Если взять в качестве примера RTMP-конец Daniu Live SDK, диапазон скорости кода для оценки обычно задается на основе ширины и высоты видео, частоты кадров, типа кодирования H.264, H.265 и т. д., а затем устанавливается:

Платформа Android RTMP прямая трансляция push SDK

  • Кодирование звука: AAC/SPEEX;
  • Кодирование видео: H.264, H.265;
  • Push-протокол: RTMP;
  • [Аудио и видео] Поддержка чистого аудио/чистого видео/аудио и видео;
  • [Камера] Поддерживает переключение передней и задней камер в реальном времени во время процесса сбора;
  • поддерживать Частота кадров、Интервал ключевого кадра (GOP)、Настройка битрейта;
  • поддерживатьRTMP-отправка настройка режима прямой трансляции | записи;
  • Поддержка настроек зеркального отображения передней камеры;
  • Поддерживает мягкое и жесткое кодирование для конкретных моделей;
  • Поддерживает горизонтальное и вертикальное нажатие экрана;
  • Поддержка захвата экрана Android и нажатия;
  • Поддержка встроенного стандартного RTMP-сервера или CDN;
  • Поддерживает автоматическое переподключение и обратный вызов состояния сети после отключения сети;
  • Поддержка динамических водяных знаков в реальном времени;
  • Поддержка снимков в реальном времени;
  • Поддержка обработки шумоподавления и автоматической регулировки усиления;
  • Поддержка стыковки аудио и видео данных перед внешним кодированием;
  • Поддержка стыковки аудио и видео данных после внешнего кодирования;
  • Поддерживает расширение RTMP H.265 (требуется оборудование для поддержки жесткого кодирования конкретной модели H.265) и Enhanced RTMP;
  • Поддержка регулировки громкости в режиме реального времени;
  • Поддержка расширенного видеомодуля;
  • Поддержка интерфейса Unity;
  • Поддержка расширенного модуля отправки SEI H.264;
  • Поддерживает Android 5.1 и выше.
Язык кода:java
копировать
//Оцениваем жестко запрограммированную скорость кода, Можно отрегулировать в соответствии с фактической моделью
public static int estimate_video_hardware_kbps(int width, int height, int fps, boolean is_h264) {
	int kbps;
	int area = width * height;
	if (area <= (320 * 300))
		kbps = is_h264?350:280;
	else if (area <= (370 * 320))
		kbps = is_h264?470:400;
	 else if (area <= (640 * 360))
		kbps = is_h264?850:650;
   else if (area <= (640 * 480))
		kbps = is_h264?1200:800;
	else if (area <= (800 * 600))
		kbps = is_h264?1300:950;
	else if (area <= (900 * 700))
		kbps = is_h264?1600:1100;
	else if (area <= (1280 * 720))
		kbps = is_h264?2100:1500;
	 else if (area <= (1366 * 768))
		kbps = is_h264?2300:1900;
	 else if (area <= (1600 * 900))
		kbps = is_h264?2800:2300;
	else if (area <= (1600 * 1050))
		kbps =is_h264?3100:2500;
	 else if (area <= (1920 * 1088))
		kbps = is_h264?4200:2800;
	else
		kbps = is_h264?4500:3500;

	kbps = (int)(kbps*fps*1.0/25.0 + 0.5);
	return kbps;
}

Логика вызова уровня приложения Android следующая:

Язык кода:java
копировать
if (videoEncodeType == 1) {
	int kbps = LibPublisherWrapper.estimate_video_hardware_kbps(width, height, fps, true);
	Log.i(TAG, "h264HWKbps: " + kbps);
	int isSupportH264HWEncoder = lib_publisher.SetSmartPublisherVideoHWEncoder(handle, kbps);
	if (isSupportH264HWEncoder == 0) {
		lib_publisher.SetNativeMediaNDK(handle, 0);
		lib_publisher.SetVideoHWEncoderBitrateMode(handle, 1); // 0:CQ, 1:VBR, 2:CBR
		lib_publisher.SetVideoHWEncoderQuality(handle, 39);
		lib_publisher.SetAVCHWEncoderProfile(handle, 0x08); // 0x01: Baseline, 0x02: Main, 0x08: High

		// lib_publisher.SetAVCHWEncoderLevel(handle, 0x200); // Level 3.1
		// lib_publisher.SetAVCHWEncoderLevel(handle, 0x400); // Level 3.2
		// lib_publisher.SetAVCHWEncoderLevel(handle, 0x800); // Level 4
		lib_publisher.SetAVCHWEncoderLevel(handle, 0x1000); // Level 4.1 В большинстве случаев этого достаточно
		//lib_publisher.SetAVCHWEncoderLevel(handle, 0x2000); // Level 4.2

		// lib_publisher.SetVideoHWEncoderMaxBitrate(handle, ((long)h264HWKbps)*1300);

		Log.i(TAG, "Great, it supports h.264 hardware encoder!");
	}
} else if (videoEncodeType == 2) {
	int kbps = LibPublisherWrapper.estimate_video_hardware_kbps(width, height, fps, false);
	Log.i(TAG, "hevcHWKbps: " + kbps);
	int isSupportHevcHWEncoder = lib_publisher.SetSmartPublisherVideoHevcHWEncoder(handle, kbps);
	if (isSupportHevcHWEncoder == 0) {
		lib_publisher.SetNativeMediaNDK(handle, 0);
		lib_publisher.SetVideoHWEncoderBitrateMode(handle, 1); // 0:CQ, 1:VBR, 2:CBR
		lib_publisher.SetVideoHWEncoderQuality(handle, 39);

		// libPublisher.SetVideoHWEncoderMaxBitrate(handle, ((long)hevcHWKbps)*1200);

		Log.i(TAG, "Great, it supports hevc hardware encoder!");
	}
}

Конструкция интерфейса уровня JNI выглядит следующим образом:

Язык кода:java
копировать
 /*
 * SmartPublisherJniV2.java
 * WeChat:xinsheng120
 * Created by daniusdk.com on 2015/09/20.
 */
 
 /**
  * Set Video H.264 HW Encoder, if support HW encoder, it will return 0 (установлен жестко запрограммированный H.264)
  * 
  * @param kbps: the kbps of different resolution.
  * 
  * @return {0} if successful
  */
public native int SetSmartPublisherVideoHWEncoder(long handle, int kbps);

/**
 * Set Video H.265(hevc) hardware encoder, if support H.265(hevc) hardware encoder, it will return 0 (установить H.265 жестко запрограммировано)
 *
 * @param kbps: the kbps of different resolution.
 *
 * @return {0} if successful
 */
public native int SetSmartPublisherVideoHevcHWEncoder(long handle, int kbps);

/**
 * Установите, используется ли жесткое кодирование Native Media NDK, По умолчанию не используется, Устройства ниже Android 5.0 не поддерживаются.
 * @param handle
 * @param is_native: 0 означает, что не используется, 1 означает использование, Значение SDK по умолчанию — 0.
 * @return {0} if successful
 */
public native int SetNativeMediaNDK(long handle, int is_native);

/*
* Установите режим жесткого контроля скорости видео
* @param hw_bitrate_mode: -1 означает использование значения по умолчанию, Если не установлено, будет использоваться значение по умолчанию. 0:CQ, 1:VBR, 2:CBR, 3:CBR_FD, Версия:android.media.MediaCodecInfo.EncoderCapabilities
* Обратите внимание, что жесткое кодирование связано с аппаратным обеспечением мобильного телефона. Большинство мобильных телефонов поддерживают только некоторые режимы скорости передачи данных. Кроме того, жестко запрограммированные устройства сильно различаются, и эффект одного и того же режима управления скоростью на разных устройствах может быть разным.
* @return {0} if successful
*/
public native int SetVideoHWEncoderBitrateMode(long handle, int hw_bitrate_mode);


/*
 * Установите жестко запрограммированную сложность видео, Поддерживается Android 5.0 и выше.
 * @param hw_complexity: -1 означает, что не установлено, Версия:android.media.MediaCodecInfo.EncoderCapabilities.getComplexityRange() и android.media.MediaFormat.KEY_COMPLEXITY
 * Остерегайтесь жесткого кодированияи Аппаратное обеспечение мобильного телефона,Некоторые мобильные телефоны могут неподдерживать Эта настройка
 * @return {0} if successful
 */
public native int SetVideoHWEncoderComplexity(long handle, int hw_complexity);

/*
 * Установите жестко запрограммированное качество видео, Поддерживается Android 9 и выше, Только если режим управления скоростью передачи данных жесткого кодера (BitrateMode) установлен на CQ (постоянное качество). Это действительно только тогда, когда режим
 * @param hw_quality: -1 означает, что не установлено, Версия:android.media.MediaCodecInfo.EncoderCapabilities.getQualityRange() и android.media.MediaFormat.KEY_QUALITY
 * Остерегайтесь жесткого кодированияи Аппаратное обеспечение мобильного телефона,Некоторые мобильные телефоны могут неподдерживать Эта настройка
 * @return {0} if successful
 */
public native int SetVideoHWEncoderQuality(long handle, int hw_quality);

/*
 * Установите жестко запрограммированный профиль H.264, Поддерживается Android 7 и выше.
 * @param hw_avc_profile: 0 означает использование значения по умолчанию, 0x01: Baseline, 0x02: Main, 0x08: High, 0x10000: ConstrainedBaseline, 0x80000: ConstrainedHigh;
 * Уведомление: ConstrainedBaseline и ConstrainedHigh Возможно, большинство устройств не поддерживают его,
 * Рекомендуется H.264 High или ВОЗ ConstrainedHigh, Если используемый вами мобильный телефон не может декодировать его методом жесткого декодирования, лучше настроить Baseline.
 * Если установленный профиль не поддерживается аппаратным кодировщиком, кодировщик будет использовать значение по умолчанию.
 * Код:android.media.MediaCodecInfo.CodecProfileLevel
 * @return {0} if successful
 */
public native int SetAVCHWEncoderProfile(long handle, int hw_avc_profile);

/*
 * Установите жестко закодированный уровень H.264, Это действительно только в том случае, если установлен профиль. Поддерживается Android 7 и выше.
 * @param hw_avc_level: 0 означает использование значения по умолчанию, 0x100: Level3, 0x200: Level3.1, 0x400: Level3.2,
 * 0x800: Level4, 0x1000: Level4.1, 0x2000: Level4.2,
 * 0x4000: Level5, 0x8000: Level5.1,  0x10000: Level5.2,
 * 0x20000: Level6, 0x40000: Level6.1,  0x80000: Level6.2,
 * Если установленный уровень слишком высок и не поддерживается хардкодером, SDK внесет соответствующие коррективы внутри себя.
 * Уведомление: Минимальный поддерживаемый уровень 640*480 при 25 кадрах в секунду — Level3. Минимальный поддерживаемый уровень 720p — Level3.1. Минимальный поддерживаемый уровень 1080p — уровень 4.
 * Код:android.media.MediaCodecInfo.CodecProfileLevel
 * @return {0} if successful
 */
public native int SetAVCHWEncoderLevel(long handle, int hw_avc_level);

/*
 * Установите жестко запрограммированный максимальный битрейт видео, Для Android нет соответствующей документации, Поэтому не рекомендуется его устанавливать,
 * @param hw_max_bitrate: максимальная скорость передачи данных в секунду, Единица бит/с
 * @return {0} if successful
 */
public native int SetVideoHWEncoderMaxBitrate(long handle, long hw_max_bitrate);

Следует отметить, что приведенные выше значения являются лишь приблизительными диапазонами пропускной способности, а фактическая требуемая полоса пропускания может варьироваться в зависимости от конкретных обстоятельств. В плохих сетевых средах, чтобы обеспечить плавное воспроизведение видео, платформа воспроизведения видео может автоматически уменьшать разрешение и скорость передачи данных видео, тем самым снижая требования к полосе пропускания.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose