FFmpeg concat demuxer и обработка зашифрованных кусков - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь обработать удаленный список воспроизведения m3u8, содержащий (возможно, зашифрованный) поток HLS. Вывод, который я ищу, это контейнер mp4 с MPEG-4 внутри.

Список воспроизведения является результатом завершенного живого потока, и может содержать теги EXT-X-DISCONTINUITY . Как я понимаю, не существует «встроенного» способа его обработки, и, действительно, существует множество предупреждений, таких как «Немонотонный DTS в выходном потоке», и в конечном файле всегда возникают проблемы с воспроизведением.

Есть Есть пара вариантов, чтобы «склеить» его. В незашифрованном потоке я нашел concat demuxer , который выдает результат с наименьшими проблемами воспроизведения. Команда:

LIST=chunks.list; ffmpeg -loglevel 'debug' -f concat -safe 0 -protocol_whitelist "file,http,https,tcp,tls,crypto" -i $LIST -c copy -movflags frag_keyframe -y output_concat.mp4

, где chunks.list выглядит примерно так:

file 'https://www.example.org/chunk1.ts'
file 'https://www.example.org/chunk2.ts'
file 'https://www.example.org/chunk3.ts'

Теперь я пытаюсь использовать concat demuxer для обработки зашифрованных фрагментов. Я пытался передать опции -key и -iv в разных местах и ​​изменить chunks.list на file 'crypto+https...', но он не получит ключ шифрования:

Opening an input file: chunks.list.
[concat @ 0x7f9fb6800c00] Opening 'chunks.list' for reading
[NULL @ 0x7f9fb6007e00] Opening 'crypto+https://www.example.org/chunk1.ts' for reading
[crypto @ 0x7f9fb5700a00] decryption key not set
[concat @ 0x7f9fb6800c00] Impossible to open 'crypto+https://www.example.org/chunk1.ts'
[AVIOContext @ 0x7f9fb5700780] Statistics: 5094 bytes read, 0 seeks
chunks.list: Invalid argument

Документы упомяните опции шифрования для крипто-протокола , так что, похоже, это просто вопрос правильной передачи.

Когда вместо использования concat demuxer я пытаюсь обработать и расшифровать только один фрагмент, например: ffmpeg -i crypto+https://www.example.org/chunk1.ts -key <my_hex_key> -iv <my_iv> chunk1.ts, он работает нормально. В самом ключе нет ничего плохого, я могу расшифровать его с помощью других инструментов (openssl et c).

Возможно ли для concat demuxer обрабатывать дешифрование? Если да, где я должен передать опции key и iv?

...