FMUSER Беспроводная передача видео и аудио еще проще!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> африкаанс
sq.fmuser.org -> албанский
ar.fmuser.org -> арабский
hy.fmuser.org -> Армянский
az.fmuser.org -> Азербайджанский
eu.fmuser.org -> Баскский
be.fmuser.org -> Белорусский
bg.fmuser.org -> Болгарский
ca.fmuser.org -> каталонский
zh-CN.fmuser.org -> Китайский (упрощенный)
zh-TW.fmuser.org -> Китайский (традиционный)
hr.fmuser.org -> хорватский
cs.fmuser.org -> Чешский
da.fmuser.org -> датский
nl.fmuser.org -> Голландский
et.fmuser.org -> эстонский
tl.fmuser.org -> Филиппинский
fi.fmuser.org -> финский
fr.fmuser.org -> Французский
gl.fmuser.org -> Галицкий
ka.fmuser.org -> Грузинский
de.fmuser.org -> Немецкий
el.fmuser.org -> Греческий
ht.fmuser.org -> гаитянский креольский
iw.fmuser.org -> Иврит
hi.fmuser.org -> Хинди
hu.fmuser.org -> Венгерский
is.fmuser.org -> Исландский
id.fmuser.org -> индонезийский
ga.fmuser.org -> Ирландский
it.fmuser.org -> Итальянский
ja.fmuser.org -> Японский
ko.fmuser.org -> корейский
lv.fmuser.org -> латышский
lt.fmuser.org -> Литовский
mk.fmuser.org -> македонский
ms.fmuser.org -> малайский
mt.fmuser.org -> Мальтийский
no.fmuser.org -> Норвежский
fa.fmuser.org -> Персидский
pl.fmuser.org -> Польский
pt.fmuser.org -> португальский
ro.fmuser.org -> Румынский
ru.fmuser.org -> Русский
sr.fmuser.org -> сербский
sk.fmuser.org -> словацкий
sl.fmuser.org -> словенский
es.fmuser.org -> Испанский
sw.fmuser.org -> Суахили
sv.fmuser.org -> шведский
th.fmuser.org -> Тайский
tr.fmuser.org -> Турецкий
uk.fmuser.org -> украинский
ur.fmuser.org -> урду
vi.fmuser.org -> Вьетнамский
cy.fmuser.org -> валлийский
yi.fmuser.org -> Идиш
HLS и Http Live Streaming - это протоколы для потоковой передачи в реальном времени, определенные Apple. HLS реализован на основе протокола HTTP. Контент передачи состоит из двух частей: одна - это файл описания M3U8, а другая - медиафайл TS.
1. Файл M3U8
Медиа-файл описывается в тексте, который состоит из серии тегов.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.тс
#EXTINF: 5,
./1.тс
# EXTM3U: первая строка каждого файла M3U8 должна быть этим тегом.
# EXT-X-TARGETDURATION: укажите максимальную продолжительность медиа-сегмента (в секундах). Продолжительность времени, указанная в #EXTINF, должна быть меньше или равна этому максимальному значению. Это значение может появиться только один раз.
#EXTINF: Опишите длину одного медиафайла. Далее следуют медиафайлы, например ./0.ts.
2. ts файл
Файл ts - это файл транспортного потока, основной формат кодирования видео - h264 / mpeg4, а аудио - acc / MP3.
Файл ts разделен на три уровня: транспортный поток уровня ts, элементарный поток пакетов pes уровня, элементарный поток es уровня. Слой es - это аудио- и видеоданные, а слой pes - это информация описания кадра данных, такая как временная метка, добавленная к аудио- и видеоданным. Уровень ts предназначен для добавления необходимой информации для идентификации и передачи потока данных на уровне pes.
Примечание: подробности следующие
(1) Уровень ts Размер пакета ts фиксирован и составляет 188 байтов, а уровень ts разделен на три части: заголовок ts, поле адаптации и полезная нагрузка. Заголовок ts имеет фиксированное значение 4 байта; поле адаптации может существовать, а может и не существовать, и его основная функция заключается в заполнении данных размером менее 188 байт; полезная нагрузка - это данные pes.
заголовок ts
sync_byte 8b байт синхронизации, фиксированный на 0x47
transport_error_indicator 1b Индикатор транспортной ошибки, указывающий на то, что после поля адаптации заголовка ts есть бесполезный байт, обычно 0, этот байт учитывается в длине поля адаптации
payload_unit_start_indicator 1b Индикатор запуска единицы загрузки, который помечается как 1 в начале полного пакета данных
transport_priority 1b Транспортный приоритет, 0 - низкий приоритет, 1 - высокий приоритет, обычно 0
pid 13b значение pid
transport_scrambly_control 2b Управление скремблированием транспорта, 00 означает незашифрованный
адаптация_field_control 2b Включать ли поле адаптации, «00» зарезервировано; «01» означает отсутствие поля адаптации, только полезную нагрузку; «10» означает только поле адаптации, без полезной нагрузки; «11» означает, что адаптация также включена в домен и полезную нагрузку.
Continity_counter 4b Увеличивая счетчик от 0 до f, начальное значение не обязательно принимает 0, но оно должно быть непрерывным
Содержимое уровня ts идентифицируется значением PID, а основное содержимое включает в себя: таблицу PAT, таблицу PMT, аудиопоток и видеопоток. Чтобы проанализировать поток ts, вы должны сначала найти таблицу PAT, пока вы найдете PAT, вы можете найти PMT, а затем вы можете найти аудио- и видеопотоки. Значение PID таблицы PAT фиксировано на 0. Таблицу PAT и таблицу PMT необходимо регулярно вставлять в поток ts, потому что пользователь может присоединиться к потоку ts в любое время, этот интервал относительно мал, обычно каждые несколько видеокадры для добавления PAT и PMT. Таблицы PAT и PMT необходимы, и другие таблицы, такие как SDT (таблица описания услуг), также могут быть добавлены, но поток hls можно воспроизводить, пока есть PAT и PMT.
Таблица PAT: ее основная функция - указывать значение PID таблицы PMT.
Таблица PMT: ее основная функция - указать значение PID аудио- и видеопотока.
Аудиопоток / видеопоток: переносят аудио и видео контент.
адаптация
адаптации_field_length 1B длина поля адаптации, количество байтов позади
флаг 1B принимает 0x50, чтобы указать PCR, или 0x40, чтобы не включать PCR
PCR 5B Program Clock Reference, эталонное время программы, используется для восстановления системных тактовых импульсов STC (System Time Clock) в соответствии с кодировщиком.
stuffing_bytes xB байт заполнения, значение 0xff
Длина области адаптации должна включать один байт, идентифицированный индикатором ошибки передачи. pcr - это эталонное время программы, pcr, dts, pts - все выборочные значения одних и тех же системных часов, pcr является инкрементным, поэтому его можно установить как значение dts, аудиоданные не требуют pcr. Если поля нет, ipad может играть, а vlc играть не может. При упаковке потока ts таблицы PAT и PMT не имеют поля адаптации. Если длины недостаточно, просто введите 0xff. И видеопоток, и аудиопоток должны добавить поле адаптации, которое обычно добавляется к первому пакету ts и последнему пакету ts кадра, а средний пакет ts не добавляется.
Формат PAT
table_id 8b Таблица PAT фиксируется на 0x00
section_syntax_indicator 1b зафиксирован на 1
ноль 1b зафиксирован на 0
зарезервировано 2b зафиксировано на 11
section_length 12b Длина следующих данных
transport_stream_id 16b Идентификатор транспортного потока, фиксированный как 0x0001
зарезервировано 2b зафиксировано на 11
version_number 5b Номер версии, фиксированный на 00000, при изменении PAT номер версии увеличится на 1
current_next_indicator 1b имеет фиксированное значение 1, указывая, что эту таблицу PAT можно использовать, если она равна 0, дождитесь следующей таблицы PAT
section_number 8b фиксируется на 0x00
last_section_number 8b фиксируется на 0x00
Цикл запуска
program_number 16b Когда номер программы 0x0000, это означает, что это NIT, когда номер программы 0x0001, это означает, что это PMT
зарезервировано 3b зафиксировано на 111
PID 13b Значение PID, соответствующее содержанию номера программы
Конец цикла
CRC32 32b CRC32 проверочный код предыдущих данных
Формат PMT
table_id 8b Таблица PMT имеет любое значение, 0x02
section_syntax_indicator 1b зафиксирован на 1
ноль 1b зафиксирован на 0
зарезервировано 2b зафиксировано на 11
section_length 12b Длина следующих данных
program_number 16b номер канала, что означает канал, связанный с текущим PMT, значение 0x0001
зарезервировано 2b зафиксировано на 11
version_number 5b Номер версии, фиксированный на 00000, при изменении PAT номер версии увеличится на 1
current_next_indicator 1b зафиксирован на 1
section_number 8b фиксируется на 0x00
last_section_number 8b фиксируется на 0x00
зарезервировано 3b зафиксировано на 111
PCR_PID 13b PID пакета TS, в котором расположены PCR (программные опорные часы), обозначенный как PID видео.
зарезервировано 4b зафиксировано на 1111
program_info_length 12b Информация описания программы, обозначенная как 0x000, означает, что нет
Цикл запуска
stream_type 8b Тип потока, метка - видео, аудио или другие данные, кодировка h.264 соответствует 0x1b, кодировка aac соответствует 0x0f, кодировка mp3 соответствует 0x03
зарезервировано 3b зафиксировано на 111
elementary_PID 13b PID, соответствующий stream_type
зарезервировано 4b зафиксировано на 1111
ES_info_length 12b Описание информации, обозначенное как 0x000, означает, что нет
Конец цикла
CRC32 32b CRC32 проверочный код предыдущих данных
(2) слой pes
Слой pes добавляет метку времени и другую информацию к каждому видео / аудио кадру. Пакет pes содержит много контента, и мы оставляем только наиболее часто используемые.
pes start code 3B стартовый код, фиксированный на 0x000001
идентификатор потока 1B аудио значение (0xc0-0xdf), обычно 0xc0
Значение видео (0xe0-0xef), обычно 0xe0
длина пакета pes 2B Длина данных pes позади, 0 означает неограниченную длину,
Только длина видеоданных будет превышать 0xffff
Флаг 1B обычно принимает значение 0x80, что означает, что данные не зашифрованы, не имеют приоритета и являются резервными данными.
Флаг 1B, значение 0x80 означает только pts, значение 0xc0 означает pts и dts
pes data length 1B Длина следующих данных, значение 5 или 10
pts 5B 33-битное значение
dts 5B 33-битное значение
pts - это отметка времени отображения, а dts - отметка времени декодирования. Обе отметки времени требуются для видеоданных. Pts и dts аудиоданных одинаковы, поэтому необходимы только pts. Есть две метки времени, pts и dts, которые вызваны кадрами B. Pts I и P кадров равны dts. Если в видео нет B-кадров, pts всегда будет таким же, как dts. Последовательно считайте видеокадры из файла, и последовательность извлеченных кадров такая же, как последовательность dts. Алгоритм dts относительно прост, достаточно начального значения + приращения, вычисление pts более сложное, и смещение необходимо добавить к dts.
В звуковых pes есть только pts (так же, как dts), кадры I и P видео должны иметь обе отметки времени, а кадру видео B нужны только pts (так же, как dts). Чтобы упаковать pts и dts, вам необходимо знать тип видеокадра, но мы не можем судить о типе кадра по формату контейнера. Чтобы получить тип кадра, необходимо проанализировать содержимое h.264.
например:
IPBBBP
Порядок чтения: 1 2 3 4 5 6
порядок dts: 1 2 3 4 5 6
порядок пунктов: 1 5 3 2 4 6
Алгоритм видео по запросу dts:
dts = начальное значение + 90000 / video_frame_rate, начальное значение может быть указано произвольно, но лучше не принимать 0, video_frame_rate - это частота кадров, например 23, 30.
pts и dts основаны на шкале времени, 1 с = шкала времени 90000, один кадр должен быть шкалой времени 90000 / video_frame_rate.
Разделение шкалы времени одного кадра на частоту дискретизации может быть преобразовано в продолжительность воспроизведения одного кадра.
Алгоритм аудио по запросу dts:
dts = начальное значение + (90000 * audio_samples_per_frame) / audio_sample_rate, значение audio_samples_per_frame связано с кодеком, значение aac - 1024, значение mp3 - 1158, audio_sample_rate - частота дискретизации, например 24000, 41000. AAC декодирует кадр 1024 выборки на канал, что означает, что продолжительность кадра составляет 1024 / sample_rate секунд. Таким образом, метка времени каждого кадра равна 0, 1024 / sample_rate, ..., 1024 * n / sample_rate секунд.
В точках и точках видео в реальном времени должно напрямую использоваться время в потоке данных в реальном времени, и их не следует рассчитывать по формулам.
(3) слой es
Уровень es относится к аудио и видео данным, мы представляем только видео h.264 и аудио aac.
видео h.264:
Чтобы упаковать данные h.264, мы должны добавить nalu (модуль уровня сетевой абстракции) к видеоданным. Nalu включает заголовок nalu и тип nalu. Заголовок nalu фиксируется на 0x00000001 (начало кадра) или 0x000001 (в кадре). Данные h.264 состоят из фрагментов, и их содержимое включает: видео, sps, pps и т. Д. Тип nalu определяет содержимое последующих данных h.264.
F 1b disabled_zero_bit, h.264 предусматривает, что он должен быть 0
NRI 2b nal_ref_idc, значение 0 ~ 3, указывает важность этого nalu, I-кадр, sps, pps обычно занимает 3, P-кадр обычно занимает 2, а B-кадр обычно занимает 0
Тип 5b см. В таблице ниже
nal_unit_type описание
0 не используется
1 Изображение без IDR, IDR относится к ключевому кадру
2-х секционная перегородка A
3-х секционная перегородка B
|
Введите адрес электронной почты, чтобы получить сюрприз
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> африкаанс
sq.fmuser.org -> албанский
ar.fmuser.org -> арабский
hy.fmuser.org -> Армянский
az.fmuser.org -> Азербайджанский
eu.fmuser.org -> Баскский
be.fmuser.org -> Белорусский
bg.fmuser.org -> Болгарский
ca.fmuser.org -> каталонский
zh-CN.fmuser.org -> Китайский (упрощенный)
zh-TW.fmuser.org -> Китайский (традиционный)
hr.fmuser.org -> хорватский
cs.fmuser.org -> Чешский
da.fmuser.org -> датский
nl.fmuser.org -> Голландский
et.fmuser.org -> эстонский
tl.fmuser.org -> Филиппинский
fi.fmuser.org -> финский
fr.fmuser.org -> Французский
gl.fmuser.org -> Галицкий
ka.fmuser.org -> Грузинский
de.fmuser.org -> Немецкий
el.fmuser.org -> Греческий
ht.fmuser.org -> гаитянский креольский
iw.fmuser.org -> Иврит
hi.fmuser.org -> Хинди
hu.fmuser.org -> Венгерский
is.fmuser.org -> Исландский
id.fmuser.org -> индонезийский
ga.fmuser.org -> Ирландский
it.fmuser.org -> Итальянский
ja.fmuser.org -> Японский
ko.fmuser.org -> корейский
lv.fmuser.org -> латышский
lt.fmuser.org -> Литовский
mk.fmuser.org -> македонский
ms.fmuser.org -> малайский
mt.fmuser.org -> Мальтийский
no.fmuser.org -> Норвежский
fa.fmuser.org -> Персидский
pl.fmuser.org -> Польский
pt.fmuser.org -> португальский
ro.fmuser.org -> Румынский
ru.fmuser.org -> Русский
sr.fmuser.org -> сербский
sk.fmuser.org -> словацкий
sl.fmuser.org -> словенский
es.fmuser.org -> Испанский
sw.fmuser.org -> Суахили
sv.fmuser.org -> шведский
th.fmuser.org -> Тайский
tr.fmuser.org -> Турецкий
uk.fmuser.org -> украинский
ur.fmuser.org -> урду
vi.fmuser.org -> Вьетнамский
cy.fmuser.org -> валлийский
yi.fmuser.org -> Идиш
FMUSER Беспроводная передача видео и аудио еще проще!
Контакты
Адрес:
Номер 305, здание Хуэйлань, дом 273 Хуанпу, Гуанчжоу, Китай, 510620
Категории
Новостные рассылки