我試圖只發送音頻文件的一部分與nodejs,從60秒到100秒。我不想使用時間範圍src='path/to/audio.mp3#t=60,100'
,因爲我不想將整個文件從服務器發送到只播放幾秒鐘。Javascript:從特定時間範圍發送部分音頻塊
所以我必須發送部分塊。問題是我不知道我需要的時間範圍的字節範圍。我認爲時間和字節是線性的,所以我嘗試使用總時間的等價時間範圍來計算字節範圍。它只發送40秒的剪輯,但它在錯誤的時間開始。
請如何獲得正確的時間。
var start = 60;
var end = 100;
var track = "/path/to/audio.mp3";
var total = Math.ceil(probeData.format.duration); //total length of audio in seconds
var start_ratio = (start/total); //ratio of the starting position
var end_ratio = (end/total); //ratio of the ending position
var start_chunk = Math.ceil(start_ratio * file_size); //using it on the file_size
var end_chunk = Math.ceil(end_ratio * file_size);
var chunksize = (end_chunk - start_chunk) + 1;
var file = fs.createReadStream(track, {start: start_chunk, end: end_chunk});
res.writeHead(206, {
"Content-Range": "bytes " + start_chunk + "-" + end_chunk + "/" + file_size,
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": "audio/mp3"
});
file.pipe(res);
我想你需要解析它的幀,看看這個https://github.com/audiocogs/mp3.js/blob/master/src/decoder.js –