最近、解決できないと思われる問題に遭遇しました。オーディオ ファイル (主に .mp3 および .wav ) を再生するアプリケーション用の単純なコンポーネントを作成しています。いくつかのテストを行った後、アプリケーションは Chrome で正常に動作するように見えます。
しかし、私が懸念している唯一の主要なブラウザーである IE9 では、オーディオ ファイルを提供する際にレンガの壁にぶつかったようです。
ファイルは現在、次のようにコントローラー アクションを介して要求されています。
public ActionResult PlayAudioFile(string id)
{
AudioFile af = FileAgent.GetAudioFile(id);
try
{
//Grabs the file via a Provider
Stream resultStream = StorageProvider[af.Provider].ReadFile(af.Location);
resultStream.Position = 0;
//Added several headers in attempts to resolve the issues
Response.AppendHeader("Content-Disposition", "attachment; filename=audio.mp3");
Response.AppendHeader("Content-Length", resultStream.Length.ToString());
Response.AddHeader("Accept-Ranges", "bytes");
Response.Headers.Remove("Cache-Control");
Response.AddHeader("Content-Range","bytes 0-" + (resultStream.Length-1).ToString() + "/" + resultStream.Length.ToString());
//Returns the file and associated file type (from the Provider)
return new FileStreamResult(resultStream, resultStream.ContentType);
}
catch
{
//Uh oh. Error
}
}
上記は Chrome でうまく機能し、 jPlayer 、 audio.js 、 MediaElement などのさまざまな HTML5 プレーヤーで機能しています。ただし、ファイルが次のようなものによって要求された場合(jPlayer 構文を使用) :
$(this).jPlayer("setMedia", {
mp3: '@Url.Action("PlayAudioFile","Home")?id=D00023',
});
または audio.js 構文:
player.load('@Url.Action("PlayAudioFile","Home")?id=D00023');
および関連する audio.js オーディオ タグ:
<audio preload="auto" crossorigin="use-credentials"></audio>
これは適切なアクションを起動し、FileStreamResult を返しますが、すべてのプレイヤーがファイルを解読して適切に読み取るのに苦労しているようです。いくつかのプレーヤーを試しましたが、すべてのプレーヤーで同じ問題が発生しました。
どんな提案でも大歓迎です。ありがとう。
ノート:
コメントの 1 つに記載されているように、この問題を解決するために複数のさまざまなコメント タイプを使用しようとしました。どれも機能していません。
この問題の考えられる根本的な原因をいくつか調べたところ、[Authorize] 属性を削除すると、ファイルに直接アクセスする際の問題の一部が解消されましたが、すべてのプレーヤーが IE9 内でファイルをロードできませんでした。
これは資格情報の問題である可能性があり、jPlayer または audio.js (またはあなたが持っているもの) を介してファイルを要求する必要がある場合は、必要な資格情報を含めて、コントローラーを介してファイルにアクセスできるようにする必要があると確信しています。
と を使用しよう
$.ajax({ withCredentials: true})
とし<audio crossorigin='use-credentials>
ました。どちらも成功せず。
ヘッダー情報:
両方のリクエスト (Chrome で機能するものと IE9 で機能しないもの) の両方に、次の同じヘッダーがあります。
Cache-Control: public, max-age=3600, s-maxage=0
Date: [Current Date Time]
Expires: [Current Date Time + max-age]
Vary: *
Content-Length: 77870
Content-Type: audio/mpeg
Last-Modified: [Date]
Accept-Ranges: bytes
Content-Range: bytes 0-77869/77870
Server: Microsoft-IIS/7.5