2012-02-08 5 views
0

私はこのPHPファイルを通して別のサーバーからメディアファイルをストリーミングする必要があります。このヘッダーをストリーミングのために修正するにはどうすればよいですか?

<?php 
$out = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Content-type: audio/mpeg\r\n", 
) 
); 

$stream = stream_context_create($out); 

$end = fopen('http://example.com/audio.mp3', 'r', false, $stream); 
fpassthru($end); 
readfile($end); 
?> 

ただし、ヘッダーは機能しません。 これを修正するにはどうすればよいですか?

+0

を追加するには、コンテンツの長さも必要ですか? – djot

答えて

0

ヘッダーを間違った方向に送信しています。あなたが行ったことは、送信元サーバーに、GET要求でaudio/mpegを送信することを通知します。これは、とにかく無効で、GET要求にはコンテンツがありません。あなたが実際に行う必要があるのは、コンテンツを受け取るクライアントに送ることです。

あなたはこの作業のためにストリームコンテキストを必要はありません - このコードを試してみてください:fopenの後

<?php 

    // Try and open the remote stream 
    if (!$stream = fopen('http://example.com/audio.mp3', 'r')) { 
    // If opening failed, inform the client we have no content 
    header('HTTP/1.1 500 Internal Server Error'); 
    exit('Unable to open remote stream'); 
    } 

    // It's probably an idea to remove the execution time limit - on Windows hosts 
    // this could result in the audio stream cutting off mid-flow 
    set_time_limit(0); 

    // Inform the client we will be sending it some MPEG audio 
    header('Content-Type: audio/mpeg'); 

    // Send the data 
    fpassthru($stream); 
+0

ニースのソリューション!しかし、iOS(5.0.1)では、mp3 128kbpsでもストリーミングは少し遅いです。理由の任意のアイデア? PD:私はより速いVPSからストリーミングしています。 – ignaces

+0

これはどのようにテストしていますか?モバイルネットワークやWiFiで?クライアントとリモートサーバー間の通信チェーンの中で最も遅いリンクによって制限されることに注意してください。したがって、クライアントのインターネット接続が128kbps +パケットオーバーヘッドに対応していない場合、動作しません。同様に、サーバーが帯域幅の問題に陥った場合でも、元のソースサーバーと同じように動作します。ソースサーバーからデータを同時にダウンロードしてクライアントにアップロードするので、サーバーは各同時ストリームに対して128k +パケットオーバーヘッドを対称的に必要とします。 – DaveRandom

+0

これは、リアルタイムメディアストリーミングプロトコルが一般にUDPを使用する主な理由の1つです。これは、本質的に損失のある性質のため、無線接続よりも実行可能ではありませんが、オーバーヘッドを大幅に削減し、可能な限り実装する必要があります。 UDPストリームは、パケットが失われたために小さなエラーの影響を受けやすくなりますが、TCPストリームは再送信につながる可能性があり、これにより必要な帯域幅とデータストリームが継続するための待機時間が増加します。 – DaveRandom

0

header('content-type: audio/mpeg'); 
or 
header('content-type: application/octet-stream'); 
+0

2番目の例では、通常、代わりにブラウザを強制的にダウンロードします。 – Narf

関連する問題