オンライン プレーヤーを使用した ASP.NET WebForms プロジェクトがあります。「再生」をクリックすると、プレーヤーは次のコードを使用して Web ハンドラーに mp3 を要求します。
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
context.Response.Cache.SetExpires(DateTime.MinValue);
context.Response.ContentType = "audio/mpeg";
string songID = context.Request.QueryString["song"];
if (string.IsNullOrEmpty(songID))
return;
Song song = new Song();
song.GetSong(long.Parse(songID));
// Show filename in format "artist - song.mp3"
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + (string.IsNullOrEmpty(song.ArtistName) ? song.Title : (song.ArtistName + " - " + song.Title))); // title for file download
context.Response.WriteFile(song.FileName);
context.Response.End();
}
そして、そのプレーヤー(私はJPlayerを使用)が曲の再生を開始した後。このことは、すべてのブラウザーで動作します。Android や Windows Phone でも動作しますが、Safari (OSX で! Windows Safari ではすべて正常に動作します) と iPhone では一部の曲を再生しません。私が発見したように、ハンドラーで再生されていないmp3ファイルへの直接パスを設定しようとすると、handler-iphoneでうまく再生されるため、ハンドラーに問題があることがわかりました。ここで何が問題なのかわかりません.. 一部のファイルを再生し、他のファイルを再生しないのはなぜですか (mp3 は同じソフトウェアを使用してエンコードされ、同じビットレートを持っています)。