HttpHandlerとIIS 5.1を使用してiPhoneでQuicktimeビデオを再生する
-
06-07-2019 - |
質問
HttpHandlerを使用して、ASP.NET WebアプリケーションからiPhoneにQuickTimeビデオをストリーミングしようとしています。 IIS 5.1(Windows XP)からWebアプリケーションをホストする場合、ビデオプレーヤーが開き、「サーバーが正しく構成されていません」というエラーが表示されます。ただし、IIS 7.5(Windows 7)を使用している場合、ビデオは正常に再生されます。
実稼働環境ではIIS 6.0が実行されており、同じ問題があります。MobileSafariを介してiPhoneでビデオを再生しようとすると、上記のエラーが表示されます。
Httpヘッダーを確認しましたが、2つのサーバー間で( Server ヘッダーのように明らかに異なるいくつかを除いて)実際には同じように見えますが、別の順序で表示されますが、これが問題の原因であるとは思いません。
Googleのこのスレッドによるとグループ、「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);
ファイルを送信する上記のコードは正しく機能しているように見え、ビデオファイルはすべてのデスクトップブラウザーおよびWindows 7上のIIS 7.5からホストする場合に正しく再生されます。問題は、モバイルを使用してiPhoneでビデオファイルを再生しようとした場合にのみ明らかですIIS 5.1またはIIS 6.0でホストされているASP.NET Webアプリケーションで上記のコードを使用するSafari。
このようなことを経験した人はいますか?
解決
Response.Bufferをtrueに設定する理由
「Accept-Ranges」を単純に追加することはできません。サーバーがHTTP範囲要求をサポートしていることを確認しない限り、ヘッダー。クライアントプレーヤーがRangeリクエストのサポートを要求し、サーバーがそれらを処理することを拒否する場合、リクエストが拒否されるのは論理的なようです。
Fiddlerをリバースプロキシとして使用して、IPhoneがRangeリクエストを行うかどうかを確認できます。 http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp
他のヒント
いくつかの検索の後、記事に出会いました。私が抱えていた正確な問題を説明するASP.NETの範囲固有のリクエスト。このサイトから RangeRequestHandlerBase クラスを実装すると(既存のプロジェクト構造内に収まるように若干の修正を加えた)問題が解決したようで、ビデオの再生はIIS5 / 6から正しく動作するようになりました。
@Eric-あなたのコメントは正しい方向へのナッジだったので、私はあなたの答えを支持しました。 (IIS7で動作しているにもかかわらず)「Accept-Ranges」ヘッダーを追加するだけでは不十分であり、範囲要求を処理して正しいデータが送信されるようにhttpハンドラーを変更する必要がありました。
Fiddlerなどを使用して、サーバーからの正確なHTTP応答を公開します。クライアントのUser-Agent文字列をiPhoneブラウザーと一致するように(または単にSafariを使用しますか?)、IIS 5.1と7.5の出力を比較します。明らかに、応答ストリームは同一ではないか、両方で機能します。
素晴らしいツールであるNetMonを使用することもできます...そして、iPhone自体でテストすることができます。
申し訳ありませんが、具体的な答えはありませんが、これで手を汚す必要があると思います。