Я пытаюсь обработать удаленный список воспроизведения 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
?