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-ЦІЛЬНА ЦІЛЬ: 5
#EXTINF: 5,
./0.ц
#EXTINF: 5,
./1.ц
# EXTM3U: Першим рядком кожного файлу M3U8 повинен бути цей тег.
# EXT-X-TARGETDURATION: Вкажіть максимальну тривалість сегмента носія (секунди). Тривалість часу, вказана в #EXTINF, повинна бути меншою або дорівнює цьому максимальному значенню. Це значення може з’являтися лише один раз.
#EXTINF: Опишіть довжину одного медіафайлу. Далі йдуть медіафайли, такі як ./0.ts
2. файл TS
Файл ts - це файл транспортного потоку, основним форматом кодування відео є h264 / mpeg4, а аудіо відповідно до MP3.
Файл ts розділений на три шари: ts шар Transport Stream, pes шар Packet Elemental Stream, es шар Elementary Stream. Рівень es - це аудіо- та відеодані, а рівень pes - це інформація про опис кадру даних, така як мітка часу, додана до аудіо- та відеоданих. Шар ts полягає у додаванні необхідної інформації для ідентифікації та передачі потоку даних у шарі pes
Примітка: Деталі наведені нижче
(1) рівень ts Розмір пакета ts встановлений на рівні 188 байт, а рівень ts розділений на три частини: заголовок ts, поле адаптації та корисне навантаження. Заголовок ts зафіксовано на рівні 4 байт; поле адаптації може існувати, а може і не існувати, і його основною функцією є заповнення даних менше 188 байт; корисне навантаження - це дані даних.
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 означає незашифрований
adaptation_field_control 2b Чи включати поле адаптації, '00' зарезервовано; «01» означає відсутність поля адаптації, лише корисне навантаження; «10» означає лише поле адаптації, без корисного навантаження; «11» означає, що адаптація також включає домен та корисне навантаження.
continuity_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 аудіо- та відеопотоку.
Аудіопотік / відеопотік: передавання аудіо- та відеовмісту
адаптація
adaptation_field_length 1B довжина поля адаптації, кількість байт позаду
прапор 1B приймає 0x50 для позначення ПЛР або 0x40 для відсутності ПЛР
Посилання на програмний годинник PCR 5B, посилання на програмний годинник, використовується для відновлення системного годинника синхронізації STC (системний годинник часу), що відповідає кодеру.
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
номер_версії 5b Номер версії, встановлений на 00000, якщо PAT зміниться, номер версії збільшиться на 1
current_next_indicator 1b зафіксовано на 1, вказуючи на те, що цю таблицю PAT можна використовувати, якщо вона дорівнює 0, дочекайтеся наступної таблиці PAT
номер_секції 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 Довжина наступних даних
номер_програми 16b Номер каналу, що означає канал, пов'язаний з поточним PMT, значенням є 0x0001
зарезервований 2b закріплений на 11
номер_версії 5b Номер версії, встановлений на 00000, якщо PAT зміниться, номер версії збільшиться на 1
current_next_indicator 1b встановлено на 1
номер_секції 8b зафіксовано на 0x00
last_section_number 8b встановлено на 0x00
зарезервований 3b закріплений на 111
PCR_PID 13b PID пакета TS, де знаходиться PCR (програмний контрольний годинник), позначений як відео PID
зарезервований 4b закріплений на 1111
program_info_length 12b Інформація про опис програми, позначена як 0x000, означає ні
Стартовий цикл
тип_потоку 8b Тип потоку, позначка - Відео або Аудіо чи інші дані, кодування h.264 відповідає 0x1b, кодування aac відповідає 0x0f, кодування mp3 відповідає 0x03
зарезервований 3b закріплений на 111
елементарний_ПІД 13b ПІД, що відповідає типу_потоку
зарезервований 4b закріплений на 1111
ES_info_length 12b Інформація про опис, позначена як 0x000 означає номер
Кінцева петля
CRC32 32b Код перевірки CRC32 попередніх даних
(2) шар pes
Шар pes додає позначку часу та іншу інформацію до кожного відео / аудіокадру. Пакет pes містить багато вмісту, і ми залишаємо лише найбільш часто використовувані.
стартовий код pes 3B стартовий код, встановлений на 0x000001
значення потокового ідентифікатора 1B (0xc0-0xdf), зазвичай 0xc0
Значення відео (0xe0-0xef), зазвичай 0xe0
довжина пакета pes 2B Довжина даних pes позаду, 0 означає необмежену довжину,
Тільки тривалість відеоданих перевищуватиме 0xffff
Прапор 1B зазвичай приймає значення 0x80, що означає, що дані не зашифровані, не мають пріоритету та резервне копіювання даних
Значення прапорця 1B 0x80 означає лише очки, значення 0xc0 означає очки та dts
довжина даних pes 1B Довжина наступних даних, значення дорівнює 5 або 10
оч. 5В, 33 біт
dts 5B 33bit значення
pts - позначка часу відображення, а dts - позначка часу декодування. Обидві мітки часу потрібні для відеоданих. Бали та точки аудіоданих однакові, тому потрібні лише точки. Є дві мітки часу, pts і dts, які спричинені B кадрами. Точки I та P кадрів дорівнюють dts. Якщо у відео немає кадру B, точок завжди буде таким, як dts. Послідовно читайте відеокадри з файлу, і послідовність вилучених кадрів така ж, як і послідовність dts. Алгоритм dts відносно простий, достатньо початкового значення + приросту, обчислення очок є більш складним, і зсув потрібно додати до dts.
У аудіо-пісі є лише точки (те саме, що і dts), кадри I та P відео повинні мати обидві позначки часу, а кадру відео B потрібні лише точки (так само, як 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 базуються на шкалі часу, 1s = 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 seconds.
Параметри dts та pts відео в прямому ефірі повинні безпосередньо використовувати час у потоці даних у реальному часі і не повинні обчислюватися за формулами.
(3) шар
Рівень es посилається на аудіо- та відеодані, ми представляємо лише h.264 відео та аудіо-аудіо.
h.264 відео:
Щоб упакувати дані h.264, ми повинні додати nalu (одиницю рівня мережевої абстракції) до відеоданих. Налу включає заголовок налу і тип налу. Заголовок nalu зафіксовано на 0x00000001 (початок кадру) або 0x000001 (у кадрі). Дані h.264 складаються із фрагментів, а вміст фрагментів включає: відео, sps, pps тощо. Тип nalu визначає вміст наступних даних h.264.
F 1b заборонений_біт_біт, 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 бездротовий передавати відео та аудіо простіше!
Контакти
Адреса:
No.305 Кімната HuiLan Будівля No273 Huanpu Road Гуанчжоу Китай 510620
Категорії
Інформаційний бюлетень