2016-08-18 7 views
-1

Краткая история: почему HLS не может просто воспроизводить нормальные файлы MP4 один за другим? Зачем нужно сегментировать медиафайлы в сегментах .ts?HLS MP4 Независимые сегменты

Деталь:

Мы сегментирование MP4 файла в мини-сегменты MP4 (не TS), каждый из которых около 30 секунд для тестирования. Он никогда не воспроизводится в любом проигрывателе HLS, просто загружая все файлы сегментов, тогда ничего не происходит.

Пример MP4 сегмент Информация:

Format      : MPEG-4 
Format profile    : Base Media 
Codec ID     : isom 
File size     : 1.44 MiB 
Duration     : 32s 950ms 
Overall bit rate   : 366 Kbps 
Writing application   : Lavf56.25.101 

Video 
ID       : 1 
Format      : AVC 
Format/Info     : Advanced Video Codec 
Format profile    : [email protected] 
Format settings, CABAC  : Yes 
Format settings, ReFrames : 6 frames 
Codec ID     : avc1 
Codec ID/Info    : Advanced Video Coding 
Duration     : 32s 950ms 
Bit rate     : 230 Kbps 
Width      : 426 pixels 
Height      : 240 pixels 
Display aspect ratio  : 16:9 
Original display aspect rat : 16:9 
Frame rate mode    : Constant 
Frame rate     : 23.976 fps 
Color space     : YUV 
Chroma subsampling   : 4:2:0 
Bit depth     : 8 bits 
Scan type     : Progressive 
Bits/(Pixel*Frame)   : 0.094 
Stream size     : 925 KiB (63%) 
Writing library    : x264 core 142 r2495 6a301b6 

Audio 
ID       : 2 
Format      : AAC 
Format/Info     : Advanced Audio Codec 
Format profile    : LC 
Codec ID     : 40 
Duration     : 32s 896ms 
Bit rate mode    : Constant 
Bit rate     : 129 Kbps 
Channel(s)     : 2 channels 
Channel(s)_Original   : 6 channels 
Channel positions   : Front: L C R, Side: L R, LFE 
Sampling rate    : 48.0 KHz 
Compression mode   : Lossy 
Stream size     : 517 KiB (35%) 

Мастер M3U8:

#EXTM3U 
#EXT-X-VERSION:7 
#EXT-X-INDEPENDENT-SEGMENTS 

#EXT-X-STREAM-INF:RESOLUTION=426x240,BANDWIDTH=370000,CODECS="avc1.640015,mp4a.40.2" 
240p.m3u8 

#EXT-X-STREAM-INF:RESOLUTION=640x360,BANDWIDTH=580000,CODECS="avc1.640015,mp4a.40.2" 
360p.m3u8 

#EXT-X-STREAM-INF:RESOLUTION=896x504,BANDWIDTH=900000,CODECS="avc1.640015,mp4a.40.2" 
480p.m3u8 

#EXT-X-STREAM-INF:RESOLUTION=1280x720,BANDWIDTH=1500000,CODECS="avc1.640015,mp4a.40.2" 
720p.m3u8 

240p.m3u8

#EXTM3U 
#EXT-X-VERSION:7 
#EXT-X-MEDIA-SEQUENCE:0 
#EXT-X-PLAYLIST-TYPE:VOD 
#EXT-X-TARGETDURATION:34 

#EXTINF:33.033033, 
240p000.mp4 
#EXTINF:33.533534, 
240p001.mp4 
#EXTINF:24.941608, 
240p002.mp4 
#EXTINF:28.611945, 
240p003.mp4 
#EXT-X-ENDLIST 

При испытании с HLS.js, дает эту ошибку:

Parsing Error:no demux matching with content found,cannot recover, last media error recovery failed ...

Bitmovin игрок: загружает все сегменты всех вариантов и никогда не играют какой-либо из них. просто остановись.

Протестировано на Chrome & Firefox В Windows, Safari на Mac, Android и iPad Браузеры. Никогда не работает ни на одном из них. Мы делаем что-то неправильно?

+0

Почему вопросы основаны на мнениях. Apple выбрала ts и (фрагментированный mp4 в ios10) для формата. Вам нужно будет спросить их, почему они это выбрали. Никто здесь не может ответить на этот вопрос. Поэтому, я думаю, ваш ответ: «Потому что он не поддерживается» – szatmary

+0

@szatmary это не мнение. Я просто спрашиваю, возможно ли это или нет. Есть ли какой-либо метод или решение, чтобы избежать двойного пространства каждого видеофайла (исходные MP4 + сегменты TS). – Mido

+0

Вопрос, который вы задали, «Почему HLS не может просто воспроизводить обычные файлы MP4 вместе один за другим?«Это мнение основано.Если вы спросили« Can HLS играть в обычные файлы MP4 »? Это не будет основано на мнениях. И ответ будет No. Но, начиная с iOS10, он будет воспроизводить фрагментированные файлы mp4. – szatmary

ответ

0

Why HLS can't just play normal MP4 files together one after one? Why need to segment media file into .ts segments?

Файлы MP4 имеют целый контейнер, который вам действительно не нужен или не нужен. Каждый сегмент может теоретически содержать свое количество аудио- и видеодорожек, каждый со своими форматами, частотой кадров, частотами выборки и т. Д. Вам не нужно все это, и вам также необходимо аккуратно вставлять сегменты видео. Поэтому вам нужно что-то, чтобы чистое кодирование сегментов в первую очередь.

+0

Поэтому нам нужно избегать двойных пространство каждого видео (Source MP4 + TS Segments) Есть ли какой-либо метод для разбора файла MP4 и ответа с запрошенным фрагментом в реальном времени без повторного кодирования? – Mido

+0

Мы пробовали # EXT-X-BYTERANGE, но он не работал Кроме того, есть ли ограничения в формате медиа? – Mido

+0

Я бы использовал FFmpeg для повторного мультиплексирования (не перекодировки) файла. Это очень мало накладных расходов и вообще не изменяет фактические данные мультимедиа. – Brad

0

В то время как сегменты транспортных потоков самоинициализируются, обычно это часто/часто не относится к сегментам fMP4. Поэтому вам нужно будет добавить сегмент инициализации в файл манифеста, который необходим для инициализации декодера. Это может быть сделано с помощью # EXT-X-MAP: URI тега, как показано на изображении this blog post и в примере ниже:

#EXTM3U 
#EXT-X-TARGETDURATION:4 
#EXT-X-VERSION:7 
#EXT-X-MEDIA-SEQUENCE:1 
#EXT-X-PLAYLIST-TYPE:VOD 
#EXT-X-INDEPENDENT-SEGMENTS 
#EXT-X-MAP:URI="init.mp4" 

#EXTINF:4.0 
segment_0.m4s 
#EXTINF:4.0 
segment_1.m4s 
... 
#EXT-X-ENDLIST 

Я не уверен HLS.js, но это должно работать для Битмовина. Если нет, я бы рекомендовал использовать поддержку Битмовина.

Apple также предоставляет test page with fMP4 HLS (для этого требуется встроенная поддержка HLS в браузере, например, в Safari), а у Bitmovin есть demo page with fMP4 HLS avialable.

+0

HLS с fmp4 на самом деле довольно полезен и работает уже на iOS10, macOS и tvOS. Здесь вы также можете найти учебное пособие для создания контента и воспроизведения hmp fmp4: https://bitmovin.com/halve-encoding-packaging-storage-costs-hls- фрагментирован-MP4 / –