【问题标题】:Web Audio audiocontext createMediaStreamSource stutteringWeb Audio audiocontext createMediaStreamSource 口吃
【发布时间】:2020-09-10 10:03:41
【问题描述】:

我想将不同的音频媒体流混合到一个流中。我一直在使用 Web Audio audiocontext 和 createMediaStreamSource 进行此操作。

但最终的混合音频有点卡顿。

有人知道如何优化它以避免口吃吗?

// init audio context
var audioContext = new AudioContext({ latencyHint: 0 });
var audioDestination = audioContext.createMediaStreamDestination();

// add audio streams
audioContext.createMediaStreamSource(audioStream1).connect(audioDestination);
audioContext.createMediaStreamSource(audioStream2).connect(audioDestination);
audioContext.createMediaStreamSource(audioStream3).connect(audioDestination);
audioContext.createMediaStreamSource(audioStream4).connect(audioDestination);

// get mixed audio stream tracks
var audioTrack = audioDestination.stream.getTracks()[0];

// get video track
var videoTrack = videoStream.getTracks()[0];

// combine video and audio tracks into single stream.
var finalStream = new MediaStream([videoTrack, audioTrack]);

// assign to video element
el_video.srcObject = finalStream;

【问题讨论】:

    标签: javascript stream web-audio-api audiocontext


    【解决方案1】:

    您可以尝试将latencyHint 设置为'playback',如下所示:

    const audioContext = new AudioContext({ latencyHint: 'playback' });
    

    这允许浏览器为音频图增加一点延迟,这有助于功率不足的设备。另一方面,将latencyHint 设置为0 会告诉浏览器它应该尽可能快地执行操作,这会增加退出的风险。

    话虽如此,latencyHint 只是一个提示。浏览器很可能会忽略它。您可以通过检查 baseLatency 属性来检查浏览器实际在做什么。

    console.log(audioContext.baseLatency);
    

    【讨论】:

    • 在带有 IOS 14 的 iPhone 7 上,不幸的是,这不起作用,因为 audioContext.baseLatency 未定义且不支持。
    • 不幸的是,Safari 的网络音频实现现在远远落后于规范。但至少有一些进展。 trac.webkit.org/changeset/265393/webkit
    • 更新:据说 Safari 14.7 支持此功能 - 请参阅来自 chrisguttandin 的链接
    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多