gpt4 book ai didi

javascript - 传输的 getUserMedia/MediaRecorder 视频格式大于请求的格式。怎么说?

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:36 27 4
gpt4 key购买 nike

背景:

在 Windows 10 上,我使用的是 getUserMedia (gUM) 和 MediaRecorder在 Google Chrome (v71) 中捕获和编码视频流。

  • 我正在使用 gUM 的约束参数来告诉它我想要 352x288 的视频格式。
  • 我请求 video/webm; codecs="avc1.42E01E"作为编码流的 MIME 类型(在 Matroska 中装箱的 H.264)。

  • 我选择笔记本电脑内置的廉价网络摄像头作为视频源。它被称为DMAX-AVC制作的“EasyCamera”。将它称为 CheezyCamera 很诱人。

视频流生成得很好。

问题:

流中编码视频的尺寸为 440x360 而不是我请求的 352x288。此信息嵌入在记录的流中,并且仅对该数据的消费者可见。使用各种 API 可以揭示 gUM 流、MediaRecorder 和 <video>元素元数据都认为维度是我要求的。

当然,网络摄像头、gUM 和 MediaRecorder 将约束参数视为建议,并且可以自由地使用不同的内容进行响应。在这种情况下,当我请求 352x288 时,他们会以 440x360 响应。该系统按设计运行;那不是我的问题。

澄清一下,意外的 440x360 尺寸仅对录制流的消费者可见。我希望找到一种方法来了解制作方网络摄像头、gUM 和 MediaEncoder 信号链正在生成与我要求的不同的分辨率。

流消费者如何知道流维度?它们位于“PixelWidth”和“PixelHeight”Matroska 盒子中,并且被烘焙到 H.264 流中。 (奇怪的是,考虑到这是一个软件选择的分辨率,它不是整数个 16x16 宏 block 。它当然仍然有效。)

我无法在浏览器中解析记录的数据,因为它存储在不透明的 blob 中。

当我使用不同的、更好的网络摄像头(罗技 C615)时,我的编码视频流是我请求的大小。

我的问题:

网络摄像头/gUM/MediaRecorder/<video>有什么办法吗?信号链在实际记录流的浏览器中找到编码流的实际尺寸?也就是说,我可以在不解码生成的流的情况下找到信号链对我的请求维度的响应吗?

最佳答案

使用MediaStream.getVideoTracks()方法获取视频轨道(MediaStreamTrack),然后使用MediaStreamTrack.getSettings()得到MediaTrackSettings对象,其中包含流的视频的高度和宽度。

因此,如果我请求指定为约束的高度为 0 的视频,我将获得高度为 1 像素的视频。在流式传输时,我们可以检索我请求的高度和我作为输出获得的高度。

function handleMediaStream(mystream){
let videoStreamTrack = mystream.getVideoTracks()[0];
let constraints = videoStreamTrack.getConstraints();
console.log(constraints.width, constraints.height);
// outputs: 640 0
let settings = videoStreamTrack.getSettings();
console.log(settings.width, settings.height);
// outputs: 640 1
}

let videoConstraints = { width: 640, height: 0 }
navigator.mediaDevices.getUserMedia({ video: videoConstraints })
.then(function create_media_recorder(mystream) {
handleMediaStream(mystream);
});

关于javascript - 传输的 getUserMedia/MediaRecorder 视频格式大于请求的格式。怎么说?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com