0

我有带有在线播放器的 ASP.NET WebForms 项目。当我点击“播放”时,播放器使用这样的代码询问 mp3 的 web 处理程序:

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 手机上,但它不会在 safari(在 OSX 上!在 windows Safari 上一切正常)和 iPhone 上播放一些歌曲。当我发现处理程序对他们来说有问题时,因为当我尝试设置未通过处理程序播放的 mp3 文件的直接路径时,iphone 播放得很好。只是不知道这里有什么问题..为什么他们播放一些文件而不播放其他文件(mp3 是使用相同的软件编码并且它们具有相同的比特率)?

4

1 回答 1

0

万一有人遇到这样
的问题。答案是:safari/iphone 太尊重 REST。他们需要 context.Response.AddHeader("Accept-Ranges", "bytes");
正确播放 mp3。

于 2012-10-19T09:54:37.793 回答