我目前面临着我遇到的最奇怪的问题,所以我希望有人能解释为什么会这样。出于缓冲和带宽等原因,我目前正在将我的电影和节目库转换为 HLS。
我的这些电影和节目的文件结构如下:
/电影/[TMDB ID]/[TMDB ID].mp4
/节目/[TMDB ID/[季号]/[集数]/[集数].mp4
我已经使用以下命令成功转换了我的整个电影收藏。
find /* -type f -name "*.mp4" -exec realpath {} \; -exec ffmpeg -i {} -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls -hls_segment_filename '{}-P%03d' {}.m3u8 \;
这是将我命名的 mp4 文件转换为 originalname.m3u8
块,遵循 originalname-PXXX
的命名方案,其中 P 表示部件号。我知道块没有附加文件扩展名,但不需要它。
您可以在此处查看此结果:Example
如果加载到 HLS Player,此结果也有效:HLS Player
所以显然我的视频转换没有问题,甚至视频的结果也没有问题。
现在,如果我使用完全相同的命令转换电视节目,它确实会转换它们,它确实使用与上面可以看到的季节和剧集等略有不同的文件结构,但现在会导致错误:"No Supported Source Was Found"
在控制台中反复尝试玩 Part 000
但没有成功。
可以在这里看到:Example
加载到 HLS Player 时的错误:HLS Player
我已经尝试改变很多东西来尝试解决这个错误以及检查东西,我检查的东西是媒体状况本身,也许它是一个损坏的文件?
原版的Mp4文件可以在这里播放没有任何问题,所以我们知道原版的Mp4文件是完全没问题的。我也尝试过向块添加文件扩展名,例如 .ts
和 .mp4
等,但也没有成功。
我什至认为可能是目录问题,所以我将一个节目移到了电影目录中但没有成功,我还将一部电影移到了节目目录中,这导致了一个有效的 HLS 流,所以它与目录无关。
我曾尝试通过使用占位符文本(例如 1.m3u8
以及块命名方案 03051.m3u8
可能不够长)来延长文件名长度,认为这可能是 03051-PXXX
的文件名长度不够长。
我注意到虽然使用这个命令:
ffmpeg -allowed_extensions ALL -i {} -c copy -bsf:a aac_adtstoasc {}.mkv \;
是否将我的 HLS 视频正确地重新组合为相同的文件大小等,但是我注意到视频本身已损坏并且无法播放。所以这让人相信问题在于将初始 Mp4 文件转换为 m3u8。