firefox - 控制 Firefox 中视频/音频流的音量增益

标签 firefox audio video-streaming web-mediarecorder

我正在尝试使用适用于 Firefox 的 MediaRecorder API 录制视频/音频文件。

当我使用网络音频 API 创建节点时(源 -> 增益 -> 目标)

录制文件的输出仅为音频,因为从目标节点返回的流仅是音频流,请参阅本文档 https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioDestinationNode

有关在目标输出中获取音频/视频流以记录音频/视频而不仅仅是音频的任何建议。

    var mediastream;

    var ctx = new AudioContext();

    var mediaStreamSource = ctx.createMediaStreamSource(mediaStream); 

    var destination = ctx.createMediaStreamDestination();

    ObjectStore.VolumeGainNode = ctx.createGain();
    ObjectStore.VolumeGainNode.gain.value = 0.5;

    mediaStreamSource.connect(ObjectStore.VolumeGainNode);

    ObjectStore.VolumeGainNode.connect(destination);

    mediaStream = destination.stream;

最佳答案

您需要一个由 gUM 视频轨道和增益修改音频轨道组成的流。

按照标准,Firefox 允许您使用 stream.addTrackstream.removeTrack 修改流中的轨道,以及使用 从轨道中组合新的流>new MediaStream([tracks]).

这可以让您通过用增益操纵的音轨替换 gUM 音轨来解决问题:

var constraints = { video: true, audio: true };

var start = () => navigator.mediaDevices.getUserMedia(constraints)
  .then(stream => modifyGain(video.srcObject = stream, 0.5))
  .catch(e => console.error(e));

var modifyGain = (stream, gainValue) => {
    var audioTrack = stream.getAudioTracks()[0];
    var ctx = new AudioContext();
    var src = ctx.createMediaStreamSource(new MediaStream([audioTrack]));
    var dst = ctx.createMediaStreamDestination();
    var gainNode = ctx.createGain();
    gainNode.gain.value = gainValue;
    [src, gainNode, dst].reduce((a, b) => a && a.connect(b));
    stream.removeTrack(audioTrack);
    stream.addTrack(dst.stream.getAudioTracks()[0]);
};

这是 fiddle (Firefox 44 或更高版本):https://jsfiddle.net/7wd2z8rz/

再次使用 MediaRecorder:https://jsfiddle.net/j33xmkcq/

关于firefox - 控制 Firefox 中视频/音频流的音量增益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990672/

相关文章:

ios - iOS中如何从AudioBuffer的mData字段读取数据?

html - 是否可以将HTML5音频播放器配置为在页面加载期间保持不变?

iphone - 关于 HTTP 直播

javascript - 如何使用 Firebug 调试 Firefox 扩展?

silverlight - 如何强制 Firefox 不缓存或重新下载 Silverlight XAP 文件?

java - 识别文件中的音频样本

ios - MPmovieplayer 播放问题获取 _itemFailedToPlayToEnd : in ios

android - 计算各大洲服务器的下载速度/丢包/抖动/延迟值 (Android)

CSS flexbox 宽度 100% Firefox

javascript - Div 可见性在 Firefox 中不起作用,内部图像不显示