Javascript AudioContext createMediaElementSource来自视频从blob获取数据

Javascript AudioContext createMediaElementSource来自视频从blob获取数据,javascript,html,audiocontext,Javascript,Html,Audiocontext,在javascript中,如何将音频上下文连接到从blob获取其数据的视频(视频使用MediaStream功能)。无论我做什么,音频上下文都会返回一个空缓冲区。有没有办法把两者联系起来 对于这个用例,createMediaElementSource可能不是正确的节点处理方式。 相反,您最好使用WebAudioAPI中的节点,以防您试图处理音频实时流,而不是固定媒体源 AudioContext接口的createMediaStreamSource()方法用于创建一个新的MediaStreamAudi

在javascript中,如何将音频上下文连接到从blob获取其数据的视频(视频使用MediaStream功能)。无论我做什么,音频上下文都会返回一个空缓冲区。有没有办法把两者联系起来

对于这个用例,
createMediaElementSource
可能不是正确的
节点处理方式。
相反,您最好使用WebAudioAPI中的节点,以防您试图处理音频实时流,而不是固定媒体源

AudioContext
接口的
createMediaStreamSource()
方法用于创建一个新的
MediaStreamAudioSourceNode
对象,给定一个媒体流(例如,从
navigator.getUserMedia
实例),然后可以播放和操作其中的音频


该链接有一个更详细的示例。但是,此
MediaStreamAudioSourceNode
的主要区别在于它只能使用从媒体服务器或本地(通过
getUserMedia
)获得的文件创建。根据我的经验,我无法通过使用
标签中的
blob
url找到任何方法。

虽然这是一个老问题,但我已经搜索了类似的内容,并找到了一个我想分享的解决方案

要连接Blob,可以使用新的响应实例。下面是一个创建波形可视化工具的示例

var audioContext = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioContext.createAnalyser();
var dataArray = new Uint8Array(analyser.frequencyBinCount);
    
var arrayBuffer = await new Response(yourBlob).arrayBuffer();
var audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
var source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(analyser);
source.start(0);
注意:
yourBlob
需要是一个Blob实例


您可能会发现,将视频和音频录制5秒钟,然后将录制的内容变成一团,然后将其播放(包括音频波形可视化)是非常有用的。

长期以来都面临着同样的问题。你找到解决办法了吗?这对我会有很大帮助。不,我最终是通过服务器完成的