当前位置: 首页 > article >正文

某些iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题

一些型号的iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题

  1. 延迟问题
navigator.mediaDevices.getUserMedia({ audio: true })  .then((stream) => {
	 console.log(stream)
}

从开始到获取stream会有将近2s的延迟 导致按下按钮开始录音 会有前面部分语音没录上 Safari 默认启用了音频回声消除和噪声抑制,这些处理可能会增加延迟。
默认的音频轨道配置可能不适配部分 iOS 设备
修改建议:禁用回声消除和噪声抑制 :通过 getUserMedia 的 audio 约束显式关闭这些
功能。
指定简单的音频轨道配置 。

navigator.mediaDevices.getUserMedia({
        audio: {
          echoCancellation: false,
          noiseSuppression: false,
          autoGainControl: false,
        },
      })  .then((stream) => {
	 console.log(stream)
}
  1. 第二次不录音问题
    获取stream之后
  // 检查 stream 是否有轨道
          if (stream.getTracks().length === 0) {
            console.error("流中没有轨道");
            return;
          }
          // 获取音频轨道
          const audioTrack = stream.getAudioTracks()[0];
          if (audioTrack) {
            console.log("音频轨道获取成功,轨道状态为:", audioTrack.readyState);

            // 保存对音频轨道的引用
            this.globalAudioTrack = audioTrack;

            // 监听轨道结束事件
            audioTrack.onended = () => {
              console.log("音频轨道结束");
              // 重新获取音频流
              // this.requestAudioPermission();
              // 这里可以根据需要重新获取流或者处理轨道结束的情况
            };

            // 如果需要,您可以在这里将流连接到HTML元素
            // const audioElement = document.querySelector('audio');
            // audioElement.srcObject = stream;

            // 确保轨道是启用状态
            audioTrack.enabled = true;
          } else {
            console.error("流中没有音频轨道");
          }

停止录音后(// 清除对已停止轨道的引用)

    stopAudioTrack() {
      if (this.globalAudioTrack) {
        this.globalAudioTrack.stop();
        this.globalAudioTrack = null; // 清除对已停止轨道的引用
      } else {
        console.log("没有可关闭的音频轨道");
      }
    },

http://www.kler.cn/a/453241.html

相关文章:

  • 新建一个springboot项目
  • 计算机网络习题(第1章 概论 第2章 数据通信基础)
  • 音视频入门知识(二)、图像篇
  • Vue.use()和Vue.component()
  • 【Golang 面试题】每日 3 题(六)
  • flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决
  • Python调用Elasticsearch更新数据库
  • Linux | 零基础Ubuntu搭建JDK
  • ref 和 reactive 的用法和区别
  • 【再学javascript算法之美】前端面试频率比较高的基础算法题
  • 新浪微博C++面试题及参考答案
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>括号生成
  • 复习打卡大数据篇——Hadoop HDFS 03
  • 【杂谈】-现代汽车有哪些传感器
  • (同一个正则表达式设置了全局标志(如 g),并循环使用test方法),导致匹配相同值却返回结果不一样
  • 关于埃斯顿机器人文件导出或者系统日志导出
  • OpenResty、Lua介绍认识
  • 算法的学习笔记— 圆圈中最后剩下的数(牛客JZ62)
  • `we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别
  • 如何在 Scrum 管理中化解团队冲突?
  • WEB安全漏洞之路径遍历、跳转等漏洞解析
  • 深度学习blog-Transformer-注意力机制和编码器解码器
  • 处理被拒绝的promise
  • HTTP 协议规定的协议头和请求头
  • near-synonym反义词生成(2):Prompt +Bert-MLM(FT)
  • Kafka、RocketMQ、RabbitMQ 对比