«не содержит потока», если «EXT-X-MEDIA-SEQUENCE»> 0 - PullRequest
0 голосов
/ 04 марта 2019

У меня есть список файлов .ts и я хочу сохранить их как несколько видеофайлов.


Сначала у меня есть .m3u8, подобный этому, полученный из потоковой передачи:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_01944.ts
#EXT-X-ENDLIST

Шаг 1:

Итак, я попытался преобразовать его в несколько m3u8, как показано ниже:

сегмент1.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_00569.ts
#EXT-X-ENDLIST

сегмент2.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:567
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_01288.ts
#EXT-X-ENDLIST

и так далее ...

, затем выполните команду ffmpeg cmd один за другим ..

ffmpeg -i /fs/segment2.m3u8 -safe 0 -map 0: v -map 0: -cpu-used 4 -threads 0 -представить очень быстро -c copy -bsf: вывод aac_adtstoasc.mp4


Но эти EXT-X-MEDIA-SEQUENCE> 0 (то есть с сегментом2.m3u8 ...) приведут к

"Выходной файл # 0 не содержит никакихstream "


Затем я попытался сделать так, чтобы'gment2.m3u8 'выглядел следующим образом

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts <--the first video chunk
#EXTINF:3.01,
aaa001_00570.ts <--the start point of segment 2
#EXTINF:3.01,
aaa001_00571.ts

...

#EXTINF:3.01,
aaa001_01288.ts
#EXT-X-ENDLIST

ffmpeg работает нормально и выдает мне выходное видеоТаким образом, кажется, что информация о канале потока находится в первом фрагменте.

Тем не менее, есть еще несколько проблем

  1. первый фрагмент видео находится в сегменте2.mp4, которыйЯ явно не хочу этого здесь.

  2. segmВыходное видео ent2 воспроизводит сначала 3,01 с, затем замораживает изображение до тех пор, пока время не достигнет aaa001_00570.ts и воспроизведет снова


Итак, любое предложение, чтобы я мог ссылаться на информацию о потокес первого куска?или игнорировать его в списке воспроизведения и т. д.?


РЕШЕНИЕ ОБНОВЛЕНИЯ

Как это работает, когда # EXT-X-MEDIA-SEQUENCE: 0 и #EXT-X-KEY: IV = по умолчанию

Поэтому я добавляю IV = hex (# EXT-X-MEDIA-SEQUENCE) в каждый плейлист

сегмент1.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key",IV=0x00000000000000000000000000000000
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_00569.ts
#EXT-X-ENDLIST

сегмент2.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:567
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key",IV=0x00000000000000000000000000000237
#EXTINF:3.01,
aaa001_00570.ts

...

#EXTINF:3.01,
aaa001_01288.ts
#EXT-X-ENDLIST

1 Ответ

0 голосов
/ 04 марта 2019

Для шифрования / дешифрования AES-128 требуется 16-байтовый вектор инициализации (IV).Если атрибут IV не указан в теге EXT-X-KEY, то по умолчанию он равен EXT-X-MEDIA-SEQUENCE.

Скорее всего, ваша проблема вызвана неправильным IV.Необходимо найти правильный порядковый номер на основе количества записей в списке воспроизведения, имена файлов сегментов не имеют значения.

Вы можете использовать openssl в режиме CLI , чтобы проверить, является ли сегментправильно расшифрован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...