热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用于直播的WebAudioAPI?

如何解决《用于直播的WebAudioAPI?》经验,为你挑选了1个好方法。

我们需要将实时音频(从医疗设备)流式传输到网络浏览器,端到端延迟不超过3-5秒(假设网络延迟为200毫秒或更短).今天我们使用浏览器插件(NPAPI)来解码,过滤(高,低,带)和回放音频流(通过Web套接字传送).

我们想要替换插件.

我正在查看各种Web Audio API演示,我们所需的大部分功能(播放,增益控制,过滤)似乎都可以在Web Audio API中使用.但是,我不清楚Web Audio API是否可用于流式传输源,因为大多数Web Audio API都使用短音和/或音频剪辑.

可以使用Web Audio API播放实时流式音频吗?

更新(2015年2月11日):

经过一些研究和本地原型设计后,我不确定是否可以使用Web Audio API进行实时音频流传输.由于Web Audio API的decodeAudioData并非真正设计用于处理随机的音频数据块(在我们的例子中通过WebSockets提供).它似乎需要整个'文件'才能正确处理它.

请参阅stackoverflow:

如何使用node.js和socket.io通过WebSockets传输MP3数据?

为decodeAudioData定义'有效的mp3块'(WebAudio API)

现在可以使用createMediaElementSource元素连接到Web Audio API,但是根据我的经验,该元素会导致大量的端到端延迟(15-30秒)并且似乎没有任何方法将延迟减少到3-5秒以下.

认为唯一的解决方案是将WebRTC与Web Aduio API一起使用.我希望避免使用WebRTC,因为它需要对我们的服务器端实现进行重大更改.

更新(2015年2月12日)第一部分:

我还没有完全删除标签(需要完成我的原型).一旦我排除了它,我怀疑createScriptProcessor(已弃用但仍然支持)将是我们环境的一个不错的选择,因为我可以"流"(通过WebSockets)我们的ADPCM数据到浏览器,然后(在Javascript中)将其转换为PCM.类似于Scott的库(见下文)使用createScriptProcessor.此方法不要求数据处于适当大小的"块"和关键时序,如decodeAudioData方法.

更新(2015年2月12日)第二部分:

经过更多测试后,我删除了Web Audio API接口,因为根据源类型,压缩和浏览器,端到端延迟可能是3-30秒.这留下了createScriptProcessor方法(参见下面的Scott的帖子)或WebRTC.在与我们的决策者讨论后,我们决定采用WebRTC方法.我认为它会起作用.但它需要更改我们的服务器端代码.

我要标记第一个答案,就这样'问题'就此结束了.

谢谢收听.随意添加评论.



1> Kevin Ennis..:

是的,Web Audio API(以及AJAX或Websockets)可用于流式传输.

基本上,你拉下(或在Websockets的情况下发送一些n长度的块).然后使用Web Audio API解码它们并将它们排队等待一个接一个地播放.

由于Web Audio API具有高精度计时,如果正确进行计划,则不会在每个缓冲区的播放之间听到任何"接缝".


你有一些示例代码吗?
我假设如果缓冲区迟到(网络打嗝)会听到一些削波(间隙),对吗?为了解决这个问题,我可以在开始,播放,纠正之前"预先排队"X字节(或秒)的数据?
是的,确切地说.你无能为力.如果服务器无法以您需要的速度快速发送数据,那么就会出现沉默.除非你的应用程序可以时间旅行,这将是一个很棒的功能.是的,在开始播放之前建立一个半任意长度的缓冲区非常典型,这样你就有了一些网络延迟的余地.
推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • 技术周报·2021-05-07-小编推荐向现代Javascript转型原文标题:Publish,ship,andinstallmodernJavaScriptforfaste ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 之前一直都知道css中的部分元素具有包裹性,今天写博客的时候正好也遇到了一个,所以想总结一下,有错误的地方欢迎指出来。什么是包裹性?包裹性就是父元素的宽度会收缩到和内部元素宽度一样 ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来为已部署的服务建 ... [详细]
  • Django3 使用 WebSocket 实现 WebShell
    △点击上方“Python猫”关注,回复“1”领取电子书剧照:《眷思量》作者:从零开始的程序员生活来源:https:www.c ... [详细]
  • 为了让用户体验更好,页面前端往往是通过ajax来进行数据处理;由于浏览器的设计原因每个域名下的连接有 ... [详细]
author-avatar
林台育怡婷雅雯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有