音频流转mp3格式
function convertToMp3(wavDataView) { // 获取wav头信息 const wav = lamejs.WavHeader.readHeader(wavDataView); const { channels, sampleRate } = wav; const mp3enc = new lamejs.Mp3Encoder(channels, sampleRate, 128); // 获取左右通道数据 const result = recorder.getChannelData(); const buffer = []; const leftData = result.left && new Int16Array(result.left.buffer, 0, result.left.byteLength / 2); const rightData = result.right && new Int16Array(result.right.buffer, 0, result.right.byteLength / 2); const remaining = leftData.length + (rightData ? rightData.length : 0); const maxSamples = 1152; for (let i = 0; i < remaining; i += maxSamples) { const left = leftData.subarray(i, i + maxSamples); let right = null; let mp3buf = null; if (channels === 2) { right = rightData.subarray(i, i + maxSamples); mp3buf = mp3enc.encodeBuffer(left, right); } else { mp3buf = mp3enc.encodeBuffer(left); } if (mp3buf.length > 0) { buffer.push(mp3buf); } } const enc = mp3enc.flush(); if (enc.length > 0) { buffer.push(enc); } let blob = new Blob(buffer, { type: "audio/mp3", }); return blob;}
获取 Gop 大小(关键帧间隔)
<script src="https://j.weizan.cn/zhibo/js/jquery-2.1.4.min.js"></script>$.ajax({ url: video_src, // 视频播放地址 dataType: "TEXT", success: (res) => { // 解析 m3u8 var m3u8list = res.replace(/\n/g, '<br>').split('<br>'); // 获取 Gop 大小 var gopSize = parseInt(m3u8list[3].split(':').pop()); console.log('gop size:' + gopSize); }})