HLS аудиопътеката се сменя, но няма звук: диагностика по заявките
Диагностицирайте беззвучна алтернативна HLS аудиопътека чрез групите, плейлистите, сегментите, кодеците, времевите маркери, събитията и аудиоизхода.
HLS плейърът може да покаже езикова или коментарна аудиопътека, да приеме избора и въпреки това да остане без звук. Видимата отметка доказва единствено, че опцията е показана в интерфейса. Тя не доказва, че избраната разновидност принадлежи към активния вариант, че плейлистът ѝ е зареден, че аудиосегментите са пристигнали или че декодираният звук е достигнал изходното устройство.
Това ръководство проследява веригата в правилния ред. Проверявайте само потоци, които притежавате или за които имате разрешение. Преди споделяне на запис премахнете подписани URL адреси, бисквитки, токени, идентификатори на зрители и IP адреси.
Метод на проверка — 19 септември 2026 г., повторна проверка на 21 септември 2026 г.: изпълнихме скрипт с Node.js 24.12.0 върху два синтетични многовариантни плейлиста. Валидният пример съдържаше две алтернативни аудиоразновидности в група audio и вариант, който сочи към нея. Невалидният пример сочеше към несъществуваща група audio-v2 и задаваше DEFAULT=YES и на двата члена на audio. Скриптът откри и двете структурни грешки и прие валидния пример. Той анализира само полетата, използвани в този контролиран тест. Не изтегля медия, не декодира звук, не сменя пътека в реален плейър, не тества браузъри или устройства и не заменя пълноценен HLS валидатор. Скриптът е в scripts/test-hls-audio-rendition-links.cjs.
Уточнете какво всъщност означава „смени се“
Запишете точния симптом. Маркира ли менюто друг език? Излъчи ли плейърът събитие за смяна? Поиска ли избрания аудиоплейлист? Изтегли ли нови аудиофрагменти? Продължи ли медийният часовник? Това са отделни контролни точки, а не взаимозаменяеми доказателства.
| Последна потвърдена точка | Какво още не е доказано | Следващо доказателство |
|---|---|---|
| Изборът в менюто се промени | Плейърът прие или зареди разновидността | Събития за пътеката и избран идентификатор |
| Плейърът отчита новата пътека | Плейлистът и фрагментите ѝ са заредени | Мрежови заявки към избрания аудио URI |
| Аудиофрагментите връщат 200 | Съдържат използваем и синхронизиран звук | Тип, байтове, грешки при демултиплексиране/декодиране, времеви маркери |
| Аудиобуферът напредва | Звукът достига желания изход | Сила и заглушаване на елемента, системен миксер, маршрут |
| Звукът се връща след обратно превключване | Алтернативният път е изправен | Сравнение на плейлисти, кодеци, фрагменти и времеви линии |
Отворете панела Network преди възпроизвеждането и запазете дневника. Отбележете активния вариант, името и езика на аудиопътеката, версията на плейъра, браузъра, операционната система, устройството, аудиоизхода и точния час на смяната. Нашето ръководство за M3U8 в инструментите за разработчици съдържа безопасен за поверителността списък.
Проверете свързването на групите разновидности
Алтернативното HLS аудио се декларира с #EXT-X-MEDIA:TYPE=AUDIO. Етикетите с еднакъв GROUP-ID образуват група разновидности. Атрибутът AUDIO в #EXT-X-STREAM-INF на варианта трябва да съвпада точно с GROUP-ID на аудиогрупа в многовариантния плейлист.
Проверете избрания път, а не само дали съществува някакъв аудиоетикет:
- Намерете активния ред
#EXT-X-STREAM-INFи запишете стойносттаAUDIO. - Намерете всички аудио записи
#EXT-X-MEDIAс точно тозиGROUP-ID. - Потвърдете, че всеки член има уникално
NAMEи подходящоLANGUAGE. - Потвърдете, че групата няма повече от един
DEFAULT=YES; приDEFAULT=YESRFC 8216 изискваAUTOSELECT=YES. - Разрешете
URIна избраната разновидност спрямо URL адреса на многовариантния плейлист. - Ако различни варианти използват различни аудиогрупи, проверете дали съответните групи съдържат един и същ набор алтернативи, както изисква спецификацията.
Документацията на Apple отбелязва, че липсващ URI може да означава, че описаната медия е включена във варианта. Не го обявявайте за липсващ адрес, преди да проверите схемата на пакетиране. Проверете и CHANNELS, когато разположенията на каналите се различават; RFC 8216 го изисква, когато две разновидности използват един кодек, но различен брой канали.
Контролираният тест откри две грешки на ниво манифест, но не доказва, че реалната беззвучна пътека има същите проблеми. Използвайте пълен валидатор и прегледайте заявките, преди да правите заключение.
Проследете заявките за избраното аудио
След избор на пътека с външен URI намерете заявката към медийния ѝ плейлист, а след това инициализационната секция, ключа и медийните сегменти. Запишете крайните URL адреси след пренасочвания, статуса, типа съдържание, прехвърлените байтове, времето, кеширащите заглавки и първия неуспешен ресурс.
| Мрежово наблюдение | Вероятна област | Следваща контролирана стъпка |
|---|---|---|
| Няма заявка към избрания аудиоплейлист | Връзка между интерфейс и плейър, грешен ID, неактивна група | Запишете избраната пътека преди и след действието |
| Аудиоплейлистът връща 401/403 | Упълномощаване или подписан адрес на дъщерен ресурс | Сравнете удостоверяването и срока с работещата разновидност |
| Плейлистът връща 200, сегментите — 404 | Ред на публикуване, адресиране, origin/CDN | Заявете точно разрешения сегмент с равностойно упълномощаване |
| Заявки 200 с празно или много малко тяло | Празна/грешна страница зад успешен статус | Проверете дължина, тип и разрешен образец от отговора |
| Фрагментите се зареждат, но append или decode се проваля | Кодек, контейнер, инициализация, криптиране, времева линия | Запишете грешки при demux, append, media и decode |
| Заявките спират само след смяна на качеството | Новият вариант сочи към различна или непълна аудиогрупа | Сравнете AUDIO групите на вариантите |
Статус 200 не доказва наличие на звук. CDN или приложение може да върне HTML грешка с успешен статус, а валиден медиен контейнер може да съдържа тишина или неподдържан формат. Не публикувайте защитени фрагменти в доклад за дефект.
Проверете кодеците, каналите и времевата линия
Декларацията CODECS трябва да описва форматите на варианта и на свързаните групи. С разрешени за вашето съдържание инструменти сравнете декларацията с реалните инициализационни и медийни данни. Проверете дали засегнатият браузър и устройство поддържат аудиокодека и броя канали.
Указанията на Apple изискват отделното аудио да се декларира чрез EXT-X-MEDIA, а алтернативното аудио да покрива цялата продължителност. Точките на прекъсване трябва да са подравнени между варианти и разновидности. Около превключването сравнете времеви маркери, discontinuity маркери, инициализационни секции, промени в криптиране/ключове и дали аудиобуферът покрива текущото видео време.
Пътеката може да се зареди правилно, но да остане тиха, ако времевата ѝ линия започва другаде, семплите са без звук или декодерът отхвърля формата. Обратно, събитие с име „switched“ не доказва, че първият декодиран семпъл е възпроизведен. Пазете отделно доказателствата за плейлиста, мрежата, буфера и изхода.
Запишете пътя на плейъра и събитията
При hls.js записвайте AUDIO_TRACKS_UPDATED, AUDIO_TRACK_SWITCHING, AUDIO_TRACK_LOADING, AUDIO_TRACK_LOADED, AUDIO_TRACK_SWITCHED, събитията за фрагменти и буфер и ERROR. Запазете избрания hls.audioTrack, метаданните и полетата details и fatal. API на hls.js отделя грешките и изтичането на време при аудиоплейлист — много по-полезно от общото „няма звук“.
Не приемайте, че вграденият HLS излага същите събития. Според MDN HTMLMediaElement.audioTracks има ограничена наличност, затова кодът, който разчита на него, не е универсална диагностика. При вградено възпроизвеждане използвайте медийните инструменти и събитията, които конкретният браузър или устройство поддържа.
Ако цялото представяне спре, вместо само да утихне, използвайте диагностиката за HLS буфериране. Ако отказът е преди началото, използвайте списъка за HLS възпроизвеждане.
Накрая изключете заглушаване и грешен изход
Преди промени в манифеста проверете дали video елементът, разделът, сайтът и браузърът в системния миксер не са заглушени и дали силата е над нула. Проверете реалното изходно устройство: повторно свързване по Bluetooth, HDMI дисплей, casting, слушалки или маршрут за достъпност могат да преместят звука към друг изход.
Използвайте известен работещ, разрешен поток в същата браузърна сесия. Ако и той е тих, първо изследвайте браузъра и изхода. Ако само една HLS пътека е тиха, докато друга работи в същия момент, сравнете специфичните за разновидността мрежови и медийни доказателства.
Не поправяйте изходния маршрут чрез пренаписване на плейлиста и не поправяйте повреден дъщерен плейлист чрез многократно извикване на video.play().
Тествайте смяната в трудни граници
Едно успешно превключване в началото е слабо доказателство. За всеки поддържан браузър и реално устройство тествайте стандартната и всички избираеми пътеки:
- Преди началото, ако продуктът позволява предварителен избор.
- При стабилно възпроизвеждане и повече от едно качество.
- Близо до граница на сегмент и след seek.
- Преди и след discontinuity, рекламен блок или смяна на ключ.
- След кратка загуба на мрежа и връщане на приложението от фон.
- Със стерео и многоканалните изходи, които продуктът официално поддържа.
Запишете дали изборът се запазва след смяна на видеокачеството. Стеснен настолен прозорец не тества мобилно декодиране, Bluetooth маршрут, фонови правила или вграден HLS. Отбелязвайте непроверените платформи като непроверени.
Напишете резултат, по който може да се действа
Полезен доклад гласи: „В 14:03:12 hls.js избра немска пътека ID 1. Немският аудиоплейлист върна 200, но първият сегмент — 404; английският продължи от същото видео време. Query токените са премахнати.“ Така екипите на плейъра, пакетирането и CDN получават първата неуспешна заявка.
Включете URI на активния вариант, аудиогрупата, метаданните на избраната разновидност, първия неуспешен аудиоресурс, кодек/канали, поредицата от събития, текущото време, съответния буферен диапазон, версиите и изходния маршрут. Не свеждайте всичко до „бутонът за език е повреден“.
Източници
- RFC 8216: алтернативни разновидности и групи
- Apple: Добавяне на алтернативна медия към плейлист
- Apple: HLS authoring specification
- hls.js audio track API
- hls.js event listener reference
- hls.js error details
- MDN: HTMLMediaElement audioTracks
Диагностицирайте тишината като верига: връзка в манифеста, избран плейлист, аудиообекти, демултиплексиране и декодиране, синхронизиран буфер, после изход. Първата липсваща контролна точка показва следващия отговорен компонент и предотвратява догадки в останалата система.