【问题标题】:Javascript audio stream over Websocket to C# server通过 Websocket 将 Javascript 音频流传输到 C# 服务器
【发布时间】:2022-11-22 18:36:35
【问题描述】:

我想通过 Websocket 将音频从 Web 客户端流式传输到 C# 服务器,但我每次都收到相同的字节。

客户端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:“波形标头已损坏。”

【问题讨论】:

    标签: javascript c#


    【解决方案1】:

    尝试重置位置然后播放它,

    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();
    

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2013-05-11
      • 2013-02-27
      • 2018-06-27
      相关资源
      最近更新 更多