0

オンライン プレーヤーを使用した 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 は同じソフトウェアを使用してエンコードされ、同じビットレートを持っています)。

4

1 に答える 1

0

誰かがそのような問題に直面した場合..
答えは: safari/iphone は REST を尊重しすぎます。context.Response.AddHeader("Accept-Ranges", "bytes");
mp3 を適切に再生する必要があり ます。

于 2012-10-19T09:54:37.793 に答える