【问题标题】:WebRTC remote stream size too bigWebRTC 远程流大小太大
【发布时间】:2019-12-03 00:50:29
【问题描述】:

我正在尝试在 WebRTC 调用中录制远程视频流。我认为主要问题是我无法使用编解码器来压缩录制的视频。

我试过这段代码

  let options = {mimeType: 'video/mp4;codecs=vp9'};
  if (!MediaRecorder.isTypeSupported(options.mimeType)) {
    console.error(`${options.mimeType} is not Supported`);
  options = {mimeType: 'video/mp4;codecs=vp8'};
  if (!MediaRecorder.isTypeSupported(options.mimeType)) {
  console.error(`${options.mimeType} is not Supported`);
  options = {mimeType: 'video/mp4'};
  if (!MediaRecorder.isTypeSupported(options.mimeType)) {
    console.error(`${options.mimeType} is not Supported`);
    options = {mimeType: ''};
  }
}
}

在上面的 sn-p 中,我正在尝试 .mp4 类型,但编解码器被拒绝。如果我尝试使用其他编解码器(例如 h.264 而不是 vp9)也会发生同样的情况。

唯一被接受的文件类型是带有 vp9 编码的 .webm,但它的大小太大。

代码基于this

【问题讨论】:

    标签: javascript video-streaming webrtc video-codecs


    【解决方案1】:

    并非所有浏览器都支持您尝试使用的所有格式。无论如何,您都在抱怨 VP9 的输出太大,但它是可用的最高效的编解码器之一。

    您的实际问题是默认比特率太高,而您没有设置它们。试试这个:

    const mediaRecorder = new MediaRecorder(stream, {
      audioBitsPerSecond: 128 * 1000, // 128 kbit/s
      videoBitsPerSecond: 2 * 1000 * 1000, // 2 Mbit/s
    });
    

    根据您的质量/文件大小权衡调整这些值。

    【讨论】:

    • 这很有帮助,但我想进一步减小大小。还有什么我可以做的吗?
    • @Lauren 进一步降低比特率。
    • @Lauren 我不知道你的期望是什么,但视频需要大量带宽。
    • @Lauren 所以,你需要大约 600 kbit/s 的视频流。这真的很紧。你会想要缩小分辨率。避免使用宽屏,只需使用 4:3 的纵横比。也许在 640x480 时,它看起来还不错。
    • @Brad,我使用了你的代码,录制了 12 分钟,视频大小显示为 217 MB。我应该怎么做才能减小它的大小?
    【解决方案2】:

    根据我在同一场景中的经验,我们有两种选择

    1. 将文件类型写入 .mp4,但内部文件仍为 .webm。
    2. 在浏览器或 Node Backend 中使用第三方库来压缩或转换文件类型。 例如:https://github.com/bgrins/videoconverter.js(未积极维护)

    实际上,在浏览器中加载繁重的文件并不是一个好主意。 FFMPEGJS gzipped 占用 6.7MB,相当重。

    虽然https://s.ajx.io 尝试过,但我确实写了一个屏幕录像机。我遵循选项1:P

    【讨论】:

    • 那么您应该加载 videoconverter.js 并在客户端浏览器的工作线程上执行非常繁重的转换任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多