2012-07-11 11 views
13

現在、ビデオアクセスを制御するためのPHPスクリプトを使用してHTML5ビデオ(video-jを使用)で使用するためのMP4ビデオを配信しようとしています。いくつかの研究の後、私はstackoverflow article found hereの助けを借りて、これを得ることができました。私がPHPスクリプトに移動すると、Firefox、Safari、IEの絶対パス(localhost/myscript.phpではなくlocalhost/myvideo.mp4など)を介してビデオを表示しているかのようにビデオを見ることができます。私の問題はGoogle Chromeで、小さな画面の中央に小さなメディアプレーヤーが表示されていて画面に何も表示されないだけです。Google ChromeでMP4ビデオ配信が失敗する

私はlocalhost/avideo.mp4のようなPHPスクリプトにルーティングするクイックリライトを試しましたが、残念ながらこれは何も変わりませんでした。前述のstackoverflowの記事で示唆したよう

if (is_file($uri)) { 
    header('Content-Type: video/mp4'); 
    if (isset($_SERVER['HTTP_RANGE'])) { 
     $this->rangeDownload($uri); 
     exit; 
    } else { 
     header("Content-Length: ".filesize($uri)); 
     $this->readfile_chunked($uri); 
     exit; 
    } 
} else { 
    //error 
} 

rangeDownload方法はthis linkの付録Aから直接取得されています:

は、ここに私のスクリプトです。

+0

を使用を生成するには? – ethrbunny

+0

コンテンツタイプ、受け入れ範囲、コンテンツ範囲、コンテンツ長、HTTP/1.1 206部分コンテンツ。これらのヘッダーは、最初のケースでは、Chromeで使用されるrangeDownloadを使用していますが、readfile_chunkedではヘッダーが少なくなります(クロールでは機能しません)。 – AaronDS

+0

私が提案できる唯一のもう一つはContent-Transfer-Encoding:binaryです。 Imは、このコンボを使用して、PHPを介してすべてのブラウザにオーディオを転送することができます。 – ethrbunny

答えて

2

おそらく問題はURL(具体的には拡張子)です。通常、Content-Dispositionヘッダーを使用しますが、これはモバイルにコンテンツを配信する場合には望ましくないことを理解しています。

は、一部の携帯電話がそれを使用するときにコンテンツを受け入れることを拒否するので、「コンテンツ・処分」HTTPヘッダーを使用しないことが重要であるlocalhost/myscript.php/myvideo.mp4

を使用してみてください。 URLにファイル名を含めることで、電話機を実際のファイルだと思うように騙して受け入れます。

ダウンロードURLを顧客に送信すると、通常、お客様がどのデバイスを使用しているかがわからないため、デバイスがサポートするファイル形式がわからなくなります。したがって、そのURLにファイル名を含めることはできません。もう一度、中間ダウンロードページが必要になります。お客様がコンテンツをダウンロードするために接続したときに、get.phpスクリプトがファイルをストリーム別のスクリプトに一時ファイルが、ポイントを作成しません、

http://wap.mydomain.tld/get.php/123456abcdef 

この時間:もう一度、我々は次のようにURLを使用します。内容「image.jpg」となりますダウンロードして結果の内容を想定 は、中間のダウンロードページのようなURLに顧客を指すこともできますから、

http://wap.mydomain.tld/download.php/123456abcdef/image.jpg 

http://mobiforge.com/developing/story/content-delivery-mobile-devices

+0

あなたの回答に感謝しますが、私が質問したところでは、 "私はlocalhost/avideo.mp4のようにPHPスクリプトにルーティングするような書き直しを試みましたが、残念ながらこれは何も変わりませんでした。私は別のことをあなたが示唆しているものが何であるか分かりません。 – AaronDS

+0

ブラウザの実際のURLに違いがある可能性があります。リダイレクト(30x)を使用している場合、ブラウザは最終的に.mp4拡張子ではなく.php拡張子を持つ最終URLを取得します。これは非常に重要です。すべてのリクエスト/レスポンスヘッダーを比較しようとしましたか(たとえば、Fiddlerを使用していますか?) –

+0

Chromeのヘッダー情報を見ていますが、どうすればよいか分かりません。私が言うことは、明確な違いがあるということです。私はこの投稿に続き、数時間でスクリーンショットをつけていくつもりです。 – AaronDS

2

は、私はあなたがしている理解してvideo-jsを使用していますが、html5mediaを使用することをお勧めします(詳しくはgithub pageをご覧ください)。私は仕事のためにウェブサイト上でビデオを利用できるようにしなければならず、video-jsを含むいくつかのことを試みましたが、html5mediaだけがすべてのブラウザで働くことができました。

他人を助けるかもしれない副作用:JavaScriptファイルやFlash Playerを提供するサードパーティのサーバーに依存しないように、すべてのファイルをホストするという要件の1つは、 video-jsこれは簡単でしたが、私はhtml5mediaを使って、flowplayerをダウンロードし、私たちのサーバ上にすべてを持っていたことが分かりました。

そして3つのお勧めのビデオフォーマット(MP4、WebMのとTheoraの)私はあなたが送信されたヘッダ情報のすべてを投稿することができますMiro Video Converter

+0

このポストのおかげで、問題はVideo-JSにはありません。 video-jのクロムでビデオが再生されない通常のビデオファイルを使用している場合、video-jsはうまく動作します)。ビデオjsの私の経験は良いです。私はファイル変換のためにハンドブレーキを使用していましたが、今まで私は何の問題にも取り組んでいません。しかし、将来的に新しいものを見つける必要がある場合に備えて、html5mediaに注目しました。乾杯。 – AaronDS

+0

問題はありません@Noobatron。私は人々がビデオjを使用することを妨げたくはありません。私はちょうど誰かが同じ種類の問題に遭遇した場合に行ったことを聞いて恩恵を受けると思っていました(たぶん私はvideo-jで何をやっているのか分かりませんでした)。私は自宅でHandbrakeを持っています.DVDをAndroidの携帯電話に変換するのに使っています。私はまだインターフェイスが本当に簡単なので、Webのためのこれらの3つのフォーマットのために働いてMiroに行くだろう。あなたのビデオがChromeで使えることを願っています! – Dean

関連する問題