如何使用 React 在音频元素上设置 srcObject

2023-12-30

我一直在尝试设置srcReact 中音频标签的属性,但曲目从未播放。

playTrack(track) {
    const stream = new MediaStream()
    stream.addTrack(track)
    this.setState(() => ({ stream }))
}

render() {
    return (
        <audio src={this.state.stream || null} controls volume="true" autoPlay />
    )
}

当我检查 chrome 调试器时,它显示音频标签已[MediaStream]设置为源,但没有播放任何内容,所有控件仍然呈灰色。

这样做而不是设置状态是可行的,但我认为这在 React 中是非常不受欢迎的。

const audio = document.querySelector('audio')
audio.srcObject = stream

如果不需要将流存储在状态中,那么您可以更新srcObject财产使用ref:

playTrack(track) {
    const stream = new MediaStream()
    stream.addTrack(track)
    this.audio.srcObject = stream;
}

render() {
    return (
        <audio ref={audio => {this.audio = audio}} controls volume="true" autoPlay />
    )
}

如果您确实需要从状态访问流,您可以尝试这个

<audio ref={audio => { audio.srcObject = this.state.stream }} />

原因src={this.state.stream}不起作用是因为src需要一个表示音频资源 url 的字符串,而this.state.stream is a MediaStream object.

audio.src and audio.srcObject是期望不同值类型的不同属性。

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

如何使用 React 在音频元素上设置 srcObject 的相关文章

随机推荐

  • 该程序无法找到正确版本的 glibc/libstdc++,尽管它是静态链接的

    我正在尝试将我的程序与 glibc 静态链接 因为目标计算机上的 glibc 版本几乎不可预测 我使用了链接器标志 static libgcc 和 static libstdc 并且工作正常 可执行文件很大 但我可以忍受 不幸的是 当我在目
  • java.awt.Component.getName() 和 setName() 的用途是什么?

    What is java awt Component getName http docs oracle com javase 6 docs api java awt Component html getName 28 29用于 似乎总是nu
  • java 原始数组到 JSONArray

    我正在尝试将 java 原始数组转换为 JSONArray 但我有奇怪的行为 我的代码如下 long array new long 1 2 3 JSONArray jsonArray new JSONArray Arrays asList
  • 是否可以参数化资源中 DataGrid CellTemplate 上的绑定?

    我正在为 WPF 网格 WPFToolKit DataGrid 组合一些通用的 CellTemplate 样式 但我不确定用于使绑定通用的语法 例如 我有这个模板 如果该值为负数 它将将该值变为红色
  • 如何对 NSArray 中的数字进行排序?

    我无法拼凑出如何做到这一点 我从 plist 中获取数组 该数组充满了数字 如 plist 中设置的那样 现在我需要做的就是对它们进行排序 使它们下降 但我无法解决 试试这个代码 NSArray array loaded from file
  • 在 shell 脚本中缩进多行输出

    我正在尝试更改 Ubuntu Amazon EC2 盒子上的每日消息 MOTD 以便在我通过 SSH 登录时它会显示我的某个目录的 git 状态 所有默认 MOTD 文件的输出在每行开头都有两个空格 因此看起来缩进很好 但因为我的git s
  • 多个 XSD 架构文件到 C# 类

    从多个 XSD 架构文件生成 C 类的最佳方法是什么 某些 XSD 架构文件可能相互依赖 我试图避免生成重复的 C 类 使用XSD EXE程序 但通过all在同一命令行上将模式添加到程序中 例如 gt xsd c qbxmltypes130
  • 运行 Spring Batch 作业的多个实例时出现死锁[重复]

    这个问题在这里已经有答案了 我有一个 spring 批处理作业 它在基于块的步骤中从数据库读取并在进行一些处理后写入文件 我的要求是同时并行运行该作业的近 16 个实例 只需具有不同的作业参数 但我在这样做的时候一直面临着几个问题 1 无法
  • dvcs 部分合并(git、hg 合并跟踪)

    我有一个关于一般 DVCS 的问题 包括 Git 和 Hg 在 Git 和 Hg 中 合并跟踪都是在 提交 级别而不是 文件 目录 级别完成的 副作用 之一是你不能轻易地进行 部分合并 您已修改分支 feature branch x 中的
  • Patsy 中的 One-hot 编码

    对于回归 我通常使用 sklearn 对分类变量进行编码OneHotEncoder http scikit learn org stable modules generated sklearn preprocessing OneHotEnc
  • java.awt.FontFormatException: bad table, tag=1196445523 表示什么?

    我已关注这个链接 http www dynamicreports org documentation fonts向我的 jasper 报告项目添加字体 但在尝试构建报告时出现此异常 此异常意味着什么 我找不到任何关于如何解决它的解决方案 请
  • alt 和标题未显示为 svg 路径的工具提示

    我有一些 svg 路径
  • 启动tomcat时jre_home环境变量未正确定义

    当我尝试使用运行 tomcat 时startup bat我收到以下错误 The JRE HOME environment variable is not defined correctly This environment variable
  • K 运行时的明显“配置文件”之间有什么区别?

    设置完后KRuntime https github com aspnet Home wiki runtime 版本管理器 https github com aspnet Home wiki Version Manager并闲逛kvm命令 很
  • 撤销 JWT Oauth2 刷新令牌

    我正在尝试找到一种使用普通 Spring 实现和 JwtTokenStore 撤销 Oauth2 JWT 刷新令牌的方法 第一 有人可以确认没有类似于 oauth token 的 API 允许我撤销刷新令牌吗 我想添加一个自定义 API 该
  • JMeter - 响应时间与延迟具有相同的值

    我正在使用 JMeter 和 Blazemeter 报告执行性能测试 但响应时间值与延迟时间值相同 有人可以解释一下吗 我附上图表结果 延迟时间图 响应时间图 这只是意味着响应很小 空 值为 TTLB 和 TTFB 请参见关于差异的解释 h
  • DDD 和 CQRS:从单个命令处理程序使用多个存储库?

    简单电子商店的典型示例 假设用户将一些商品添加到购物篮并单击 结账 发出 创建订单 命令 现在 在实际创建状态为 预计付款 的订单记录以及数据库中相应的订单行之前 我们必须检查用户选择的商品是否仍然可用 也许某些商品在用户将其添加到购物篮时
  • 使用自定义渲染器在网格中进行过滤

    我的管理网格模块中的过滤器出现问题 我的问题是 过滤自定义渲染器不起作用的列 public function prepareColumns this gt addColumn entity id array header gt ID ind
  • 检查多个 PHP 数组键是否全部存在

    我目前正在使用以下内容 a array foo gt bar bar gt foo if isset a foo isset a bar echo all exist 但是 我将拥有比foo and bar我必须检查一下 有没有比添加一个更
  • 如何使用 React 在音频元素上设置 srcObject

    我一直在尝试设置srcReact 中音频标签的属性 但曲目从未播放 playTrack track const stream new MediaStream stream addTrack track this setState gt st