从 Hls.js 创建 MediaStream

Create MediaStream from Hls.js

我有一个 HLS 流,我使用 Hls.js library. I want to then take that stream and feed it into Wave.js 附加到音频元素。我想使用 fromStream 方法而不是 fromElement 来构造音频波形可视化器,这样我就可以将可选的 connectDestination 参数设置为 false。

为了创建馈送到 Wave.fromStream() 构造函数的媒体流,我正在关注 this example,它展示了如何使用 captureStream() 来镜像音频或视频的播放元素。 我的抓流实现如下

  let audio = this.audioPlayer.nativeElement;
  let stream;
  if (audio.captureStream) {
    stream = audio.captureStream();
  } else if (audio.mozCaptureStream) {
    stream = audio.mozCaptureStream();
  } else {
    console.error('Stream capture is not supported');
    stream = null;
  }

然后将流传递到 Wave.fromStream()。

不幸的是,当执行 Wave.fromStream() 时,出现以下错误。

core.js:6498 ERROR DOMException: Failed to execute 'createMediaStreamSource' on 'AudioContext': MediaStream has no audio track

这意味着传递到 Wave.fromStream 的媒体流没有与之关联的音轨。当我查看我的音频元素时,即使附加了 Hls 流,记录 Audio.audioTracks returns 未定义,即使有一个音频流正在播放并由该音频元素控制。因此,从音频元素创建媒体流没有问题,这就是 Hls.js 将流附加到音频元素的方式。

是否有另一种方法可以从 Hls.js 创建的 Hls 流创建媒体流对象?

我找到了问题的解决方案,即创建我自己的自定义版本的@foobar404/wave npm 包并修改它以接受输入参数,该参数是预先存在的音频上下文和最终节点在上下文中。这意味着我可以将波形连接到音频上下文中的最终节点,而无需将波形连接到音频上下文目标或源,这是我的错误来源。

参见:https://www.npmjs.com/package/wave-external-audio-context