私は iPhone で音楽 VOD アプリを作成しています。Apple のガイドラインにより、AppStore で承認されるには HTTP ライブ ストリーミングを実行する必要があります。しかし、Apple は地球上のサーバーの 98% に関心がないため、Linux ベースのシステム用の魔法のような HTTP ライブ ストリーミング ツールを提供していません。そしてここから悪夢が始まる。
私の目標は単純です: MP3 を取得し、セグメント化し、単純な .m3u8 インデックス ファイルを生成します。私は「HTTP Live Streaming Linux」と「すごい!たくさんの人がすでにそれをやっている」とグーグルで検索しました!
まず、 Carson McDonald の (とても有名な) 投稿を訪れました。結果: svn segmentate.c は古く、バグが多く、コンパイルするのは悪夢でした (この世界の誰も、使用している ffmpeg のバージョンを正確に知ることはできません!)。その後、Carson の git repoに出くわしましたが、残念なことに、迷惑な ruby がたくさんあり、live_segmenter.c は mp3 ファイルを取得できません。
その後、さらに深く調べました。私はこのスタックオーバーフローのトピックを見つけました。それはまさに私がやりたいことです。したがって、このスクリプト (httpsegmenter)を使用するように、juuni からのアドバイスに従いました。結果: 何もコンパイルできず、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 を使用してこのストリームをテストしたところ、問題ないことがわかりました。だから私はそれをクイックタイムに再生しましたが、各.TSファイルの間に約0.2秒の空白があります!!
これが私の状況です。これは悪夢です。HLS プロトコルを介して単純な mp3 ストリームを取得できません。mp3 をセグメント化するための簡単な作業ソリューションはありますか? Apple の mediafilesegmenter のように、mp3 ファイルを複数の mp3 ファイルに直接セグメント化できないのはなぜですか?