使用自定义音频上下文时,VideoJS 无法设置播放速率
VideoJS unable to set playback rate when using custom audio context
据我所知,使用 Video JS 库将音频提升到 100% 以上的唯一方法是使用增益节点设置一个略显简陋的自定义音频上下文。
这使得更改播放速率不起作用。我知道 player.tech()
并不是真的打算使用,但似乎这是提高音量的唯一方法。
我这里有什么地方做错了吗?如果是这样,既能将音量提高到 100 以上又能控制播放速率的最佳方法是什么?
const normal = videojs('normal', { "playbackRates": [1, 4] });
const boosted = videojs('boosted', { "playbackRates": [1, 4], enableSourceset: true });
boosted.on("sourceset", () => {
const context = new window.AudioContext();
const gain = context.createGain();
context.createMediaElementSource(boosted.tech().el()).connect(gain);
gain.connect(context.destination);
gain.gain.value = 10;
});
使用 VideoJS:
https://codepen.io/qhyun2/pen/gOgPKqP
没有:
https://codepen.io/qhyun2/pen/abpZmMB
已解决!
这是一个bug in Firefox
您需要从点击处理程序中 resume()
AudioContext
。以下应该有效。
const context = new window.AudioContext();
const boosted = videojs(
'boosted',
{
enableSourceset: true,
playbackRates: [1, 4]
}
);
boosted.on("play", () => context.resume());
boosted.on("sourceset", () => {
const gain = context.createGain();
context.createMediaElementSource(boosted.tech().el())
.connect(gain)
.connect(context.destination);
gain.gain.value = 10;
});
但是它不适用于 codepen.io。视频文件未提供必要的 CORS headers。
据我所知,使用 Video JS 库将音频提升到 100% 以上的唯一方法是使用增益节点设置一个略显简陋的自定义音频上下文。
这使得更改播放速率不起作用。我知道 player.tech()
并不是真的打算使用,但似乎这是提高音量的唯一方法。
我这里有什么地方做错了吗?如果是这样,既能将音量提高到 100 以上又能控制播放速率的最佳方法是什么?
const normal = videojs('normal', { "playbackRates": [1, 4] });
const boosted = videojs('boosted', { "playbackRates": [1, 4], enableSourceset: true });
boosted.on("sourceset", () => {
const context = new window.AudioContext();
const gain = context.createGain();
context.createMediaElementSource(boosted.tech().el()).connect(gain);
gain.connect(context.destination);
gain.gain.value = 10;
});
使用 VideoJS:
https://codepen.io/qhyun2/pen/gOgPKqP
没有:
https://codepen.io/qhyun2/pen/abpZmMB
已解决!
这是一个bug in Firefox
您需要从点击处理程序中 resume()
AudioContext
。以下应该有效。
const context = new window.AudioContext();
const boosted = videojs(
'boosted',
{
enableSourceset: true,
playbackRates: [1, 4]
}
);
boosted.on("play", () => context.resume());
boosted.on("sourceset", () => {
const gain = context.createGain();
context.createMediaElementSource(boosted.tech().el())
.connect(gain)
.connect(context.destination);
gain.gain.value = 10;
});
但是它不适用于 codepen.io。视频文件未提供必要的 CORS headers。