Я использую ffmpeg-dash для создания файлов mpd.Я использую следующую команду, чтобы сгенерировать то же самое:
ffmpeg -i input/video.mov \
-map 0:v:0 -map 0:v:0 -map 0:v:0 -map 0:a\?:0 \
-b:v:0 350k -c:v:0 libx264 -filter:v:0 "scale=320:-1" \
-b:v:1 1000k -c:v:1 libx264 -filter:v:1 "scale=640:-1" \
-b:v:2 3000k -c:v:2 libx264 -filter:v:2 "scale=1280:-1" \
-use_timeline 1 -use_template 1 -window_size 6 -adaptation_sets "id=0,streams=v id=1,streams=a" \
-seg_duration 2 -threads 16 -hls_playlist true -f dash output/ffmpeg/output.mpd
Это работает с видео, которое имеет аудиопотоки, но для случая, когда в видеофайле нет аудиопотока, я получаю пустую запись для аудио в mpdфайлы, подобные следующим, что недопустимо и завершается ошибкой при воспроизведении в Exo Player на Android.
<AdaptationSet id="1" contentType="audio" segmentAlignment="true" bitstreamSwitching="true">
</AdaptationSet>
Я попытался добавить ?
в опцию adapting_sets, например: id=0,streams=v id=1,streams=a?
, однако это также добавляет строку выше.
Одно из решений состоит в том, чтобы запускать разные команды для разных видео, сначала проверяя, есть ли аудиопоток или нет, но было бы лучше, если бы была какая-либо опция, добавляющая аудиоадаптирование. Устанавливается, только если во входном файле присутствует аудиопоток.