簡體   English   中英

Javascript 音頻 stream 通過 Websocket 到 C# 服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM