m3u8 格式的视频即使在本地播放也需要经过网络,这是由视频格式本身决定的,与系统无关。
先前开发一个 m3u8 视频下载程序,视频文件是很多短片段,播放需要合并,因为是 termux 环境,担心算力不足,考虑再开发一个本地服务器,模拟在线方式播放本地 m3u8 视频,运行良好。
问题暴露于月末流量限速,因为之前流畅的视频出现卡顿现象,似乎被限速了,可是这是本地视频,本地服务器啊!疑问发生,探索开始。
首先搜索网络,但是没找到本地播放 m3u8 视频的例子,似乎这还是首例?然后询问 AI,给出的答案是 termux 是安卓应用,安卓系统所有 App 通信都是走网络栈,浏览器访问本地服务器,仍然视为外部网络服务,也就受运营商限速影响。
这个说法看着有理,于是开始钻研绕过安卓网络栈的方法,例如使用本地播放器,尝试了 vlc 和 mpv 播放器,仍然限速。新的疑问产生了,本地播放器播放本地视频,完全不使用网络,为何还会限速?是不是 AI 编造谎言?
为了检验安卓网络栈通信的说法,开启飞行模式启动本地服务器,发现浏览器正常打开网页,这说明 AI 确实胡说;飞行模式使用本地播放器无法播放本地 m3u8 视频,这说明很可能是 m3u8 视频格式问题。
虽然没有找到确切文档,但实际情况如此,可以作为结论:即使是本地 m3u8 视频也需要联网播放。
后续用 ffmpeg 合并成单一 ts 文件,本地播放器播放,解决问题。 另外这个操作并不怎么吃算力,近两千 ts 文件,平均 1~2 MB,只花费两分钟就完成合并。
EOF