TLDR:
- загрузка видео через aws -sdk (js) -> AWS Elasti c Транскодер на S3 в формате HLSv4
- загрузка моего видео с 4 предустановками: video_only_low, video_only_mid, video_only_high, audio_only (HLSv4 в Elasti c Транскодер не поддерживает предустановки, включая видео и аудио)
- автоматически созданный файл .m3u8 имеет поток только для аудио, следующий в мои 3 видеопотока, чтобы пользователь с медленным inte rnet слышал только аудио без видео (черный экран) в видео-плеере
- я мог удалить строку потока только для аудио из файла .m3u8 вручную, но я хотел бы иметь автоматически сгенерированные файлы .m3u8 без этого потока только для аудио
-> см. вопросы в конце.
Полная версия:
Я передаю видео + аудио с HLSv4, и я использую aws -sdk (js) (2.604.0) с AWS Elasti c Транскодером и S3 для преобразования оригинала файл (например, .mp4) в HLSv4. Я указал 4 пресета Elasti c Transcoder: video_low, video_mid, video_high и один для аудио, который используется каждым видео. Для HLSv4 я не могу сгенерировать один пресет для видео И аудио, должен быть один или несколько пресетов для видео и один для аудио. После транскодирования следующий сгенерированный файл .m3u8 находится в выходном хранилище S3 (рядом с видео / аудио файлами различного качества):
(заменен Guid на случайный guid)
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-0",NAME="Default",AUTOSELECT=YES,DEFAULT=YES,URI="11111111-2222-3333-4444-555555555555_audio_v4.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=14024000,CODECS="avc1.4d001f",URI="11111111-2222-3333-4444-555555555555_video_low_iframe.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=22071000,CODECS="avc1.4d001f",URI="11111111-2222-3333-4444-555555555555_video_mid_iframe.m3u8"
#EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=38803000,CODECS="avc1.4d0029",URI="11111111-2222-3333-4444-555555555555_video_high_iframe.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1387000,RESOLUTION=960x540,CODECS="avc1.4d001f,mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_video_low_v4.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2001000,RESOLUTION=1280x720,CODECS="avc1.4d001f,mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_video_mid_v4.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4061000,RESOLUTION=1920x1080,CODECS="avc1.4d0029,mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_video_high_v4.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=182000,CODECS="mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_audio_v4.m3u8
Наш code + Elasti c Транскодер отлично работал в последние годы. С начала 2020 года наши пользователи открывают много билетов, чтобы они иногда слышали только аудиопоток без видео. Таким образом, мы протестировали видео с разными inte rnet -полосами и можем воспроизвести ошибку, когда пропускная способность недостаточно высока для видео низкого качества.
Файл .m3u8 определяет во второй строке файла выше, что это аудио с идентификатором 'audio-0', которое используется в каждом видео. Ничего страшного, поэтому звук сохраняется только один раз для всех различных качеств видео.
Файл .m3u8 определяет в последней строке, что только аудио - это поток для устройств с низкой полосой пропускания. Так что я понимаю, что устройства с медленным inte rnet получают только аудио-поток. Но я не хочу, чтобы наши пользователи транслировали аудио только без видео, они должны видеть значок загрузки, пока видеоплеер не буферизуется достаточно для самого низкого качества видео. Итак, для теста я удалил эту последнюю строку, так что для видеоплеера доступны только потоки video_low, -_mid и -_high, поэтому, когда я нахожусь на медленном inte rnet, видеоплеер буферизует, пока не загрузит первый сегмент (7 секунд) видео.
Так что я мог бы удалить строку потока только для аудио из всех файлов .m3u8 наших видео, чтобы устранить эту ошибку. Но я не хочу обновлять все новые файлы .m3u8 каждый день и удалять последнюю строку файла.
Создание задания для Elasti c Транскодирование осуществляется с помощью aws -sdk для javascript и использует объект CreateJobOutputs со всей информацией о пресетах, которые должны транскодироваться в новом видео.
2 вопроса:
Что я могу сделать, чтобы сгенерированный файл .m3u8 не содержал последнюю строку для аудиопотока ??
Почему наш код и видеопоток отлично работали в последние несколько лет, и с начала 2020 года у наших пользователей возникла эта проблема? Мы обновляем aws -sdk ежемесячно, но я не смог найти никаких изменений и примечаний к выпуску aws -sdk для транскодера Elasti c в течение длительного времени