Какую полосу пропускания занимает видео с разрешением 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.