2009-10-28 6 views
5

HttpHandlerを使用してASP.NET WebアプリケーションからiPhoneにQuickTimeビデオをストリーミングしようとしています。 IIS 5.1(Windows XP)からWebアプリケーションをホストすると、ビデオプレーヤーが開き、「サーバーが正しく構成されていません」というエラーが表示されます。ただし、IIS 7.5(Windows 7)を使用すると、ビデオが正常に再生されます。HttpHandlerとIIS 5.1を使用してiPhoneでQuicktimeビデオを再生する

実稼働環境ではIIS 6.0が動作しており、同じ問題があります.Mobile Safari経由でiPhoneでビデオを再生しようとすると、上記のエラーが表示されます。彼らは異なる順序で表示される以外

、私は、HTTPヘッダーをチェックしましたし、彼らは、(明らかに異なるものになりますサーバーヘッダ、として、少数から離れて)2つのサーバー間で実質的に同じであるように見えます私はこれが問題を引き起こしているとは考えていませんが。

Googleグループのthis threadによれば、「Accept-Ranges:bytes」ヘッダーを追加すると役立ちますが、これは違いはありません。私はまた、ETagヘッダーを追加しました。

ファイルを送信するため、実際に担当するコードは次のようになります。

Context.Response.Buffer = true; 
Context.Response.ContentType = "video/x-m4v"; 

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\""); 
Context.Response.AppendHeader("Content-Length", "23456789"); 

Context.Response.AppendHeader("Accept-Ranges", "bytes"); 
Context.Response.AppendHeader("ETag", GetETag(path)); 

Context.Response.TransmitFile(path); 

ファイルを送信する上記のコードは正常に機能しているように見えるとIISからホスティングときのビデオファイルは、すべてのデスクトップブラウザで正しく再生し、この問題は、IIS 5.1またはIIS 6.0でホストされているASP.NET Webアプリケーションで上記のコードを使用してMobile Safariを使用してiPhone上でビデオファイルを再生しようとするときにのみ明らかです。

他に誰もこのようなことを経験していますが、これを実現するために何ができるのですか?

+0

Accept-Rangesのヒントは、ASP.NET MVCの同様の問題を解決しました。 – kim3er

答えて

2

なぜResponse.Bufferをtrueに設定しますか?

サーバーがHTTP範囲要求をサポートしていることを確認しない限り、「Accept-Ranges」ヘッダーを追加するだけではなりません。クライアントプレーヤーが範囲要求のサポートを要求し、サーバーがそれらを処理することを拒否した場合、要求が拒否されることは論理的なようです。

Fiddlerをリバースプロキシとして使用して、IPhoneがRange要求を行うかどうかを確認できます。 http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

0

Fiddlerのようなものを使用して、サーバーからの正確なHTTP応答を公開します。クライアントのUser-Agent文字列をiPhoneのブラウザと一致させるか、またはSafariを使用して、IIS 5.1と7.5の出力を比較します。明らかに、応答ストリームは同一ではないか、両方で動作しています。

また、NetMonを使用することもできます。これはすばらしいツールです... iPhone自体でテストできるようになります。

ご迷惑をおかけして申し訳ありませんが、私はあなたのために具体的な回答はしていませんが、この手で手を汚さなければならないと思います。

+0

ヒントをありがとう。このビデオは実際にはWindowsのSafariやiPhoneのユーザーエージェントの文字列を使用しているFirefoxでもうまく再生されるので、これで何かとは思えません。この問題は、IIS7がiPhone7を再生できないIIS7とは対照的に、IIS5/6がファイルをどのように送信しているのかともっと関係しているようです。以前はネットワーク監視ツールを使用していませんでしたが、NetMon/Wiresharkをチェックし、役立つかどうかを確認します。 – Mun

3

検索した後、正確な問題を記述した記事Range-Specific Requests in ASP.NETが出てきました。 RangeRequestHandlerBaseクラスをこのサイトから実装すると(既存のプロジェクト構造に適合するように少し修正が加えられている)、問題が解決されたように見え、ビデオ再生はIIS5/6から正しく動作するようになりました。

@エリック - あなたのコメントがあなたのコメントが正しい方向に向かっているので、答えをアップアップしました。「Accept-Ranges」ヘッダーを追加するだけでは十分ではなく(IIS7で作業していても)、HTTPハンドラーを変更して範囲要求を処理し、正しいデータが送信されていることを確認する必要がありました。

関連する問題