5

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

運用環境は IIS 6.0 を実行しており、モバイル Safari を介して iPhone でビデオを再生しようとすると上記のエラーが表示されるという同じ問題があります。

HTTPヘッダーを確認しましたが、2つのサーバー間で実質的に同じであるように見えます(明らかに異なるサーバーヘッダーなどのいくつかを除いて)。ただし、異なる順序で表示されることを除いて、問題を引き起こしています。

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 からホストしている場合に、正しく機能しているように見え、ビデオ ファイルが正しく再生されます。 IIS 5.1 または IIS 6.0 でホストされている ASP.NET Web アプリケーションを使用した上記のコード。

他の誰かがこのようなことを経験し、これを機能させるために私ができることについて何か考えを持っていますか?

4

3 に答える 3

3

いくつか検索した後、ASP.NET の Range-Specific Requestsという記事に出くわしました。この記事では、私が抱えていた問題を正確に説明しています。このサイトのRangeRequestHandlerBaseクラスを実装すると (既存のプロジェクト構造に収まるようにいくつかの小さな変更を加えて)、問題が解決したようで、IIS5/6 からビデオ再生が正しく動作するようになりました。

@Eric - あなたのコメントは正しい方向への微調整だったので、私はあなたの答えに賛成しました。'Accept-Ranges' ヘッダーを追加するだけでは十分ではなく (IIS7 で動作していても)、範囲要求を処理して正しいデータが送信されるように、http ハンドラーを変更する必要がありました。

于 2009-10-29T01:10:10.597 に答える
2

なぜ Response.Buffer を true に設定するのですか?

サーバーが HTTP Range リクエストをサポートしていることも確認しない限り、単純に「Accept-Ranges」ヘッダーを追加することはできません。クライアント プレイヤーが Range リクエストのサポートを要求し、サーバーがそれらの処理を拒否した場合、リクエストが拒否されるのは当然のことと思われます。

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

于 2009-10-28T14:33:07.870 に答える
0

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

また、優れたツールである NetMon を使用することもできます。これにより、iPhone 自体でテストすることができます。

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

于 2009-10-28T06:29:41.913 に答える