WebRTC 和 Asp.Net Core

2024-04-16

我想将音频流从我的 Angular Web 应用程序录制到我的 Asp.net Core Api。

我认为,使用 SignalR 及其 websockets 是实现这一目标的好方法。

通过这个打字稿代码,我可以获得一个 MediaStream:

import { HubConnection } from '@aspnet/signalr';

[...]

private stream: MediaStream;
private connection: webkitRTCPeerConnection;
@ViewChild('video') video;

[...]

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    console.trace('Received local stream');
    this.video.srcObject = stream;
    this.stream = stream;

    var _hubConnection = new HubConnection('[MY_API_URL]/webrtc');
    this._hubConnection.send("SendStream", stream);
  })
  .catch(function (e) {
    console.error('getUserMedia() error: ' + e.message);
  });

我使用 .Net Core API 处理流

  public class MyHub: Hub{
    public void SendStream(object o)
    {
    }
}

但是当我将 o 转换为 System.IO.Stream 时,我得到了一个 null。

当我阅读WebRTC的文档时,我看到了有关RTCPeerConnection的信息。 IceConnection ...我需要那个吗?

如何使用 SignalR 将音频从 WebClient 流式传输到 Asp.net Core API?文档? GitHub?

感谢您的帮助


我找到了访问麦克风流并将其传输到服务器的方法,代码如下:

  private audioCtx: AudioContext;
  private stream: MediaStream;

  convertFloat32ToInt16(buffer:Float32Array) {
    let l = buffer.length;
    let buf = new Int16Array(l);
    while (l--) {
      buf[l] = Math.min(1, buffer[l]) * 0x7FFF;
    }
    return buf.buffer;
  }

  startRecording() {
    navigator.mediaDevices.getUserMedia({ audio: true })
      .then(stream => {
        this.audioCtx = new AudioContext();
        this.audioCtx.createMediaStreamSource(stream);
        this.audioCtx.onstatechange = (state) => { console.log(state); }

        var scriptNode = this.audioCtx.createScriptProcessor(4096, 1, 1);
        scriptNode.onaudioprocess = (audioProcessingEvent) => {
          var buffer = [];
          // The input buffer is the song we loaded earlier
          var inputBuffer = audioProcessingEvent.inputBuffer;
          // Loop through the output channels (in this case there is only one)
          for (var channel = 0; channel < inputBuffer.numberOfChannels; channel++) {

            console.log("inputBuffer:" + audioProcessingEvent.inputBuffer.getChannelData(channel));
            var chunk = audioProcessingEvent.inputBuffer.getChannelData(channel);
            //because  endianness does matter
            this.MySignalRService.send("SendStream", this.convertFloat32ToInt16(chunk));
          }
        }
        var source = this.audioCtx.createMediaStreamSource(stream);
        source.connect(scriptNode);
        scriptNode.connect(this.audioCtx.destination);


        this.stream = stream;
      })
      .catch(function (e) {
        console.error('getUserMedia() error: ' + e.message);
      });
  }

  stopRecording() {
    try {
      let stream = this.stream;
      stream.getAudioTracks().forEach(track => track.stop());
      stream.getVideoTracks().forEach(track => track.stop());
      this.audioCtx.close();
    }
    catch (error) {
      console.error('stopRecording() error: ' + error);
    }
  }

下一步是将我的 int32Array 转换为 wav 文件。

对我有帮助的来源:

  • https://subvisual.co/blog/posts/39-tutorial-html-audio-capture-streaming-to-node-js-no-browser-extensions/ https://subvisual.co/blog/posts/39-tutorial-html-audio-capture-streaming-to-node-js-no-browser-extensions/
  • https://medium.com/@yushulx/learning-how-to-capture-and-record-audio-in-html5-6fe68a769bf9 https://medium.com/@yushulx/learning-how-to-capture-and-record-audio-in-html5-6fe68a769bf9

笔记: 我没有添加如何配置 SignalR 的代码,这不是这里的目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebRTC 和 Asp.Net Core 的相关文章

随机推荐

  • 如何编写自定义操作 DLL 以在 MSI 中使用?

    这是我打算自己回答的问题 但请随意添加其他方法来完成此任务 我正在打包一个应用程序以用于各种配置 并且我确定在 MSI 中执行自定义逻辑的最可靠方法是编写我自己的自定义操作 DLL 该 DLL 能够从 PROPERTY 表中读取 写入 终止
  • 在 Monogame 中使用 BMP 图像作为字体

    有没有办法使用 BMP 图像加载自定义字体 我在网上看到了 Microsoft 提供的解决方案 但在尝试运行此解决方案时 我不断收到内容加载异常 看起来这曾经适用于 XNA 但对于 Monogame 可能不再是这样了 我想要自己的自定义字体
  • Git:推送到多个远程

    Short 如果您将多个远程存储库链接到本地 文件 是否有一种方法可以同时推送到它们 Long 由于工作原因 我的代码必须使用gitlab和github遥控器 因此 一旦我进行了一些本地更改 我就想更新这两个存储库 我的 git confi
  • 重新渲染子视图后,主干事件会多次触发

    我们有一个由侧边栏和几个子视图组成的主干视图 为简单起见 我们决定让侧边栏和子视图由单个视图管理render功能 但是 那click edit单击侧边栏项目之一后 事件似乎会多次触发 例如 如果我从 常规 开始并单击 edit then h
  • Vim: set langmap=e;h 破坏 supertab 插件

    我是 Vim 新手 正在尝试设置一些插件 到目前为止我已经安装了 Pathogen pyflakes 和 supertab 后者似乎不起作用 紧迫tab而在插入模式下只需写入字符串
  • 如何从 UWP(又名 .NET Core)中的 Type 对象获取 Assembly

    Type 类在 NET Framework 中有一个Assembly 属性 然而 当您编写使用 NET Core 的 UWP 时 此属性就消失了 仅 AssemblyQualifiedName 属性可用 我怎样才能从这个名字进入Assemb
  • R:如何用文本框注释 ggplot?

    我希望添加一个小的白色文本框 并在 ggplot 绘图的正文中添加自定义文本 我要添加的文本是为了标识我要添加到绘图中的水平线 ggplot cb emp geom point aes x grossunits y rate color a
  • 在 StringTokenizer 中使用多个分隔符

    我想知道如何在 java 中使用 StringTokenizer 的多个分隔符 例如其中之一 将作为分隔符出现 而且一次只会有一个 Use the 有两个参数的构造函数 http docs oracle com javase 6 docs
  • r - 如何清除 rJava 使用的内存?

    我正在使用 xlsx 包创建工作簿 工作表 将数据写入工作表 然后保存工作簿 然而 当我多次重复这组操作时 我开始出现错误消息 gt Error in jcheck silent FALSE java lang OutOfMemoryErr
  • DbSet、模型构建器和 EF 导航属性

    我正在尝试实现一个多租户应用程序 在其中通过租户对象查询数据库 而不是直接从上下文中查询 在我拥有这个之前 public User GetUserByEmail string email using var db CreateContext
  • 为子域设置了 Cookie,但 IE 开发工具在根域显示 Cookie。我缺少什么?

    我们有许多网站挂在根域上 例如 dev mydomain co nz test mydomain co nz www mydomain co nz 我使用 Fiddler 监控与 dev mydomain co nz 的连接 并收到一个带有
  • Eclipse:无法加载 JNI 共享库“C:\Program Files(x86)\Java\jdk1.7.0_15\bin\..\jre\bin\client\jvm.dll

    我正在尝试安装 Eclipse 为了安装我已经完成了以下操作 安装JDK 7u15 64位 实际下载名称 jdk 7u15 windows i586 exe 在C Program Files x86 Java JDK 1 7 0 15 我在
  • 使用 Python 可视化 LDA 模型

    我有一个 LDA 模型 包含 10K 文档中 10 个最常见的主题 现在它只是对每个主题的单词及其相应概率分布的概述 我想知道 python 是否有可用的东西来可视化这些主题 pyLDAvis https pypi python org p
  • cudaMallocManaged() 返回“不支持的操作”

    在 CUDA 6 0 中尝试托管内存给了我operation not supported打电话时cudaMallocManaged include cuda runtime h include
  • 合理的密码强度正则表达式

    我们使用标准的 ASP NET 身份验证提供程序 恰好是 AspNetSqlMembershipProvider 默认密码强度要求对于我们的需求来说有点过高 我们要求用户输入至少由字母数字组成的密码 即 必须包含字母和至少一个数字 如果用户
  • 拒绝 git 推送

    To email protected cdn cgi l email protection xxx xxxxx git rejected master gt master non fast forward error failed to p
  • F# 类型函数和 [] 属性

    这两个 F 类型函数有什么区别 let defaultInstance1 lt a when a new unit gt a gt new a
  • 使用 Firebase 的 GoogleApiClient 中出现罕见的 NullPointerException

    我正在使用 GoogleApiClient 使用 Google 帐户登录用户 基本上 我使用 Firebase Auth 和 Google 登录 但我每天都会在某些设备上遇到这种崩溃 当我在自己的一些设备 OnePlus 3 Nexus 5
  • Spring应用程序不会在包之外启动

    我正在关注this https spring io guides gs scheduling tasks 使用 Spring 构建基本应用程序的教程 只要我遵循这个子目录结构 它就可以完美地工作 src main java hello 如果
  • WebRTC 和 Asp.Net Core

    我想将音频流从我的 Angular Web 应用程序录制到我的 Asp net Core Api 我认为 使用 SignalR 及其 websockets 是实现这一目标的好方法 通过这个打字稿代码 我可以获得一个 MediaStream