要求された 1 つの mp3 ファイルを最初から最後までストリーミングする Python サーバーを作成しようとしています。(ライブストリーミングなし)
そのストリームを任意のメディアプレーヤー(VLCなど)で再生し、再生位置を変更できる機能が欲しいです。
HTTP ストリーミングについてはよく耳にしますが、ウィキペディアの記事をいくつか読んだ後、「HTTP ストリーミング」はRTSP / RTCP / RTPなどのさまざまなストリーミング プロトコルを総称するものにすぎないように思えます。
その後、独自のプロトコルを使用してメディアをストリーミングするための独自のソフトウェア (サーバー!) であるSHOUTcastに出会いました。同様の機能を提供すると思われる別の既存のサーバー プログラムはIcecastです。
SHOUTcast と Icecast の関係についてはよくわかりませんが、あるようです。
1 つの特定のメディア ファイルをストリーミングすることは、Web ラジオのような継続的なストリームをストリーミングすることとそれほど変わらないと考えたので、最初の Webradio をググって .pls または .m3u ファイルをダウンロードしました。
どちらも基本的に、URL を含むテキストファイルでした。だから私はwiresharkを開始し、VLCをそのURLに向けました。
私が見たのは、本質的に HTTP トラフィックでした:
VLC:
GET /schizoid HTTP/1.1
VLC:
Host: <ip>:8000
User-Agent: VLC/2.0.5 LibVLC/2.0.5
Range: bytes=0-
Connection: close
Icy-MetaData: 1
サーバーが応答しました:
HTTP/1.0 200 OK
Content-Type: audio/mpeg
icy-br:128
ice-audio-info: bitrate=128
icy-br:128
icy-description:PsyTrance 24x7
icy-genre:psytrance
icy-name:Radio Schizoid
icy-pub:1
icy-url:http://schizoid.in:8000/schizoid
Server: Icecast 2.3.2
Cache-Control: no-cache
icy-metaint:16000
次に、サーバーは mp3 ストリームと思われる生データの送信を開始します。
ウィキペディアによると、これは SHOUTcast プロトコルです。
(これが Icecast が使用するプロトコルと同じかどうかはわかりません)
しかし、閉じられた (文書化されていない) プロトコルは、ストリーミング メディアの標準にはなり得ないと考えました。
だから私の質問は、ストリーミング(特定のmp3ファイル)をPythonサーバーに統合するための最良の(最も簡単でサポートされている)方法は何ですか?
SHOUTcast プロトコルを手動で実装する必要がありますか、それとも RTP のようなものでしょうか?
(サードパーティのライブラリを使用してもかまいません)