C# 由另外两位获奖者创作的MP3';你不能在WMP11中玩吗?

C# 由另外两位获奖者创作的MP3';你不能在WMP11中玩吗?,c#,asp.net,mp3,merge,C#,Asp.net,Mp3,Merge,test1.mp3和test2.mp3具有相同的比特率和采样率,我正在尝试将它们合并到HTTP响应中。生成的文件是test.mp3 test.mp3在WMP12和VLC中播放良好。在WMP11中,我只听到来自test1.mp3的音频。在您希望听到test2.mp3音频开始的那一刻,播放器停止播放。WMP11未报告任何错误。。。它只是停止播放 需要进行哪些更改才能使test.mp3在WMP11中正确播放 protected void Page_Load(object sender, EventAr

test1.mp3和test2.mp3具有相同的比特率和采样率,我正在尝试将它们合并到HTTP响应中。生成的文件是test.mp3

test.mp3在WMP12和VLC中播放良好。在WMP11中,我只听到来自test1.mp3的音频。在您希望听到test2.mp3音频开始的那一刻,播放器停止播放。WMP11未报告任何错误。。。它只是停止播放

需要进行哪些更改才能使test.mp3在WMP11中正确播放

protected void Page_Load(object sender, EventArgs e) {
    Response.Clear();
    Response.ContentType = "audio/mpeg";
    Response.AddHeader("Content-Disposition", "attachment; filename=test.mp3");
    var bytes1 = System.IO.File.ReadAllBytes(@"C:\test1.mp3");
    WriteBytesToResponse(bytes1);
    var bytes2 = System.IO.File.ReadAllBytes(@"C:\test2.mp3");
    WriteBytesToResponse(bytes2);
    Response.End();
}

private void WriteBytesToResponse(byte[] sourceBytes) {
    using (var sourceStream = new MemoryStream(sourceBytes, false)) {
        sourceStream.WriteTo(Response.OutputStream);
    }
}

MP3文件包含完整的MPEG1头,以及其他信息,如流长度。您无法将它们连接起来。WMP读取头文件,确定播放长度,并在第一个文件完成时停止。其余的数据被忽略,因为它不应该在那里


您需要使用一些理解MPEG1或MP3文件的库或实用程序来进行连接

我需要在创建第二个文件的音频之前通过HTTP响应发送第一个文件的音频(它是在响应期间动态创建的)。我无法控制客户端(许多播客中的任何一个)的超时容差,第一个音频文件会立即发送,以防止在动态创建第二个音频(这需要几分钟)之前不发送一个字节时发生超时。听起来我是处于两难境地?@lance:如果你不能相对快速地通过HTTP套接字开始交付,你可能应该重新考虑你的文件生成请求策略——我真的同意,这也会引发一系列其他问题(DoS、et)。过去几天也暴露了该项目设计中的其他缺陷。这从来都不是为大众准备的,我从编写代码中学到了很多现在“无用”的东西。我很可能很快会把你的回答记为答案。你帮了大忙。非常感谢。