首页 > 解决方案 > 如何在 HQ 音频旁边录制最低比特率的屏幕共享视频?

问题描述

我一直在探索一些system通过 Chrome 在 PC 上录制音频的方法,并且我已经成功地使用了 MediaRecorder API。我最终得到了共享屏幕的 webm 文件。只要用户也点击按钮分享音频,效果就很好。

问题:我不想录制视频部分。我还没有找到一种方法来“只”录制音频——看来它必须录制视频+音频才能工作。现在我必须录制视频,如何应用媒体约束使屏幕共享视频的占用空间尽可能小,从而保持较低的内存和 CPU 需求?

这些录音的长度从 2 秒到 15 分钟不等。

const screenSharingConstraints = {
        video: {
            width: 160
            },
        audio: true
}

navigator.mediaDevices.getDisplayMedia(screenSharingConstraints()).then(onSuccess, onMediaStreamError);

这是我对流所做的事情:

let onSuccess = function (stream) {
  var options = {audioBitsPerSecond : 32000, mimeType : encoding_mimetype, videoBitsPerSecond : 250}
  const mediaRecorder = new MediaRecorder(stream, options);

在运行它时,我仍然得到一个巨大的屏幕共享尺寸。如何在 JavaScript 的定义中使其尽可能小?

MediaRecorder 文档 https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder 媒体约束 https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints

标签: javascriptweb-mediarecorder

解决方案


为什么不只使用音频?

const screenSharingConstraints = {
        audio: true
}

应该只提供音频输出。如果您担心默认设置的带宽:

var constraints = { audio: {sampleRate: 11025},
};

将为您提供 11 KBPS 的音频(显然可以根据需要更改参数)。

如果你希望文件是视频,你可以让宽高尽可能小,但也可以让帧率达到 1 KBPS(下面使用 JS 变量的例子):

var constraints = { audio: {sampleRate: audioBitrate},
    video:{
        width: { min: 100, ideal: width, max: 1920 },
        height: { min: 100, ideal: height, max: 1080 },
        frameRate: {ideal: framerate}
    }
};

我在https://livestream.streamclarity.com有一个用于视频(带有可调节参数)的工作示例,在此处输入链接描述,代码在GitHub 上。直播的后端是api.video


推荐阅读