我测试了流式播放时使用Mp3WaveFormat.AverageBytesPerSecond
计算的持续时间。
AverageBytesPerSecond: 64 kbps
Content Length: 2436943 bytes
Duration: 2436943 / (64 / 8 * 1024) = 297 seconds
但这不正确,因为mp3的实际持续时间是191秒。我不明白为什么会这样。我的计算有问题吗?
Mp3信息
获取源mp3的WaveFormat的代码
HttpWebRequest req = SendRequest(url, 0, 0);
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
size = resp.ContentLength;
Stream str = resp.GetResponseStream();
byte[] buffer = new byte[1024];
byte[] storer = new byte[1024 * 100];
int bytesRead = 0;
int total = 0;
while ((bytesRead = str.Read(buffer, 0, buffer.Length)) > 0)
{
Buffer.BlockCopy(buffer, 0, storer, total, bytesRead);
total += bytesRead;
Mp3Frame frame = Mp3Frame.LoadFromStream(new MemoryStream(storer));
if (frame == null) continue;
format = new Mp3WaveFormat(frame.SampleRate, frame.ChannelMode == ChannelMode.Mono ? 1 : 2,
frame.FrameLength, frame.BitRate);
decompressor = new AcmMp3FrameDecompressor(format);
req.Abort();
resp.Close();
str.Close();
break;
}
答案 0 :(得分:0)
MP3文件并不总是CBR(恒定比特率)。因此,某些帧可能具有不同的比特率。 MP3文件也可以包含非音频部分,例如它可能包括专辑封面和关于该文件的各种其他元数据。所以持续时间的计算只是估计值。