質問

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自体でテストすることができます。

申し訳ありませんが、具体的な答えはありませんが、これで手を汚す必要があると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top