[英]Javascript audio stream over Websocket to C# server
我想 stream 音頻形式 web 客戶端到 c# 服務器超過 Websocket 但我每次都收到相同的字節。
客戶 javascript 代碼
function audioplayer(){
var stream;
var bufferSize = 1024 * 16;
var audioContext = new AudioContext();
var processor = audioContext.createScriptProcessor(bufferSize, 1, 1);
processor.connect(audioContext.destination);
navigator.mediaDevices.getUserMedia({
video: false,
audio: true
}).then( streamObj => {
stream = streamObj;
input = audioContext.createMediaStreamSource(stream);
input.connect(processor);
processor.onaudioprocess = e => {
microphoneProcess(e);
};
});
//var obj = { command:"mic" , audio : btoa(new Blob(recording)) };
//ws.send(JSON.stringify(obj));
}
function microphoneProcess(e) {
const left = e.inputBuffer.getChannelData(0); // get only one audio channel
const left16 = convertFloat32ToInt16(left); // skip if you don't need this
var obj = { command:"mic" , audio : btoa(left16) }
ws.send(JSON.stringify(obj)) // send to server via web socket
}
function convertFloat32ToInt16(buffer) {
let l = buffer.length;
const buf = new Int16Array(l / 3);
while (l--) {
if (l % 3 === 0) {
buf[l / 3] = buffer[l] * 0xFFFF;
}
}
return buf.buffer;
}
c# 服務器
if (data == null) return;
using(MemoryStream ms = new MemoryStream(data)) {
try {
SoundPlayer player = new SoundPlayer(ms);
player.Stream = ms;
player.Play();
} catch {
}
}
DataRecv.Text = data.Length.ToString();
服務器給我錯誤 System.InvalidOperationException: 'The wave header is corrupt.'
嘗試重置 position 然后播放它,
if (data == null) return;
using(MemoryStream ms = new MemoryStream(data)) {
try {
ms.Position = 0;
SoundPlayer player = new SoundPlayer(ms);
player.Stream = ms;
player.Play();
} catch {}
}
DataRecv.Text = data.Length.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.