使用FFmpeg转换MKV至M3U8音频时HLS.js/Video.js无法读取的问题求助
大家好,我最近在处理一个需求:把MKV文件里的音频提取出来转成AAC格式的M3U8播放列表,这样就能和其他音频流一起用在HLS播放场景里。但不管是用hls.js还是Video.js来加载生成的M3U8,都一直报错读不了内容。之前我用同样的逻辑转换MP4里的音频是完全正常的,所以我怀疑是不是MKV源文件的编码有什么特殊的地方?
我已经试过好几种FFmpeg命令了,列出来给大家参考:
- 第一种直接生成HLS的命令:
ffmpeg -i myfile.mkv -threads 0 -muxdelay 0 -y -map 0:a:0 -hls_time 10 -hls_list_size 0 -codec copy -f hls audio/audio.m3u8
- 第二种用segment分段生成的命令:
ffmpeg -i myfile.mkv -threads 0 -muxdelay 0 -y -map 0:a:0 -codec copy -ac 6 -b:a 384k -f segment -segment_time 10 -segment_list_size 0 -segment_list audio/audio.m3u8 -segment_format mpegts audio/audio_%d.aac
- 第三种去掉音频参数的segment命令:
ffmpeg -i myfile.mkv -threads 0 -muxdelay 0 -y -map 0:a:0 -codec copy -f segment -segment_time 10 -segment_list_size 0 -segment_list audio/audio.m3u8 -segment_format mpegts audio/audio_%d.aac
下面是遇到的报错信息:
hls.js抛出的解析错误:
208.382 | Parsing error:Found no media in msn 0 of level "audio/audio.m3u8"
208.628 | Parsing error:Found no media in msn 1 of level "audio/audio.m3u8"
208.966 | Parsing error:Found no media in msn 2 of level "audio/audio.m3u8"
209.286 | Parsing error:Found no media in msn 3 of level "audio/audio.m3u8"
209.601 | Parsing error:Found no media in msn 4 of level "https://atraxia.tk/stockage/disk_2/m3u8/test/audio-fr/audio-fr.m3u8"
209.92 | Parsing error:Found no media in msn 5 of level "audio/audio.m3u8"
210.176 | Parsing error:Found no media in msn 6 of level "audio/audio.m3u8"
210.178 | A media error occurred: fragParsingError
直接加载.aac片段时的错误:
0.508 | Error while loading fragment audio/audio_0.aac
0.596 | Error while loading fragment audio/audio_0.aac
0.666 | Error while loading fragment audio/audio_0.aac
0.757 | Error while loading fragment audio/audio_0.aac
0.814 | Error while loading fragment audio/audio_0.aac
0.875 | Error while loading fragment audio/audio_0.aac
0.951 | Error while loading fragment audio/audio_0.aac
0.955 | A network error occurred: fragLoadError
因为处理MP4源文件完全没问题,所以我倾向于是MKV里的音频编码和HLS兼容有问题?有没有大佬能帮我分析下问题出在哪,或者有没有调整FFmpeg参数的建议?
备注:内容来源于stack exchange,提问作者PommeGolden _

