我正在 iPhone 上开发音乐 VOD 应用程序,并且由于 Apple 的指导方针,我必须运行 HTTP Live Streaming 才能在 AppStore 上被接受。但是,由于 Apple 并不关心地球上 98% 的服务器,因此他们没有为基于 Linux 的系统提供如此神奇的 HTTP Live Streaming Tools。从这一点开始,噩梦开始了。
我的目标很简单:获取一个 MP3,对其进行分段并生成一个简单的 .m3u8 索引文件。我搜索了“HTTP Live Streaming Linux”和“哦,太好了!很多人已经这样做了”!
首先,我访问了 Carson McDonald 的(非常有名的)帖子。结果:svn segmentate.c 是旧的、错误的和编译的噩梦(世界上没有人能准确地知道他们使用的是什么版本的 ffmpeg!)。然后我遇到了 Carson 的 git repo,但太糟糕了,有很多烦人的 ruby 东西,并且 live_segmenter.c 无法获取 mp3 文件。
然后我更深入地寻找。我找到了这个 stackoverflow topic,这正是我想要做的。所以我遵循了 juuni 的建议来使用这个脚本(httpsegmenter)。结果:无法编译任何东西,2 天的工作,最后我设法编译它(ffmpeg 8.1 w/ httpsegmenter rev17)。不,这不是一个好的脚本,它确实需要 mp3 文件,但是生成的 ts 文件和索引文件不能被播放器读取。
然后帖子 krisbulman 的作者提出了一个解决方案,甚至自己提供了一个补丁版本的 m3u8-segmenter ( git repo )。我测试它:不编译,什么也不做。所以我从 johnf https://github.com/johnf/m3u8-segmenter获取了原始版本。我设法编译并奇迹般地工作(不是真的)。我使用了这个命令行(ffmpeg 0.8.1):
ffmpeg -er 4 -i music.mp3 -f mpegts -acodec libmp3lame -ar 44100 -ab 128k -vn - | m3u8-segmenter -i - -d 10 -p outputdir/prefix -m outputdir/output.m3u8 -u http://test.com/
该脚本对我的 mp3 文件进行编码(需要 4 秒,太长了),并将其传递给 m3u8-segmenter 以将其分段为 10 秒的 .TS 文件。
我在我的 Mac 上使用 Apple 的 mediastreamvalidator 测试了这个流,它说没问题。所以我把它播放到 quicktime,但每个 .TS 文件之间有大约 0.2 秒的空白!
所以这是我的情况,这是一场噩梦,我无法通过 HLS 协议获得简单的 mp3 流。是否有一个简单的工作解决方案来分割 mp3 ?为什么我不能像苹果的 mediafilesegmenter 那样直接将 mp3 文件分割成多个 mp3 文件?