0
我測試了流式傳輸mp3時使用Mp3WaveFormat.AverageBytesPerSecond
計算的持續時間。NAudio在計算AverageBytesPerSecond時錯誤的mp3持續時間
AverageBytesPerSecond: 64 kbps
Content Length: 2436943 bytes
Duration: 2436943/(64/8 * 1024) = 297 seconds
但這是不正確的,因爲mp3的實際持續時間是191秒。我不明白爲什麼會發生這種情況。我的計算有問題嗎?
的Mp3信息
代碼來獲取WAVEFORMAT源的mp3
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;
}
那麼我如何計算一個特定的第二個字節偏移來快進或快退? –
並不那麼簡單。你可以計算出每個「幀」的長度,並嘗試跳到下一幀。 –