背景:
在 Windows 10 上,我在 Google Chrome (v71) 中使用getUserMedia (gUM) 和MediaRecorder 来捕获和编码视频流。
- 我正在使用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 宏块的整数。当然它仍然有效。)
我无法解析浏览器中记录的数据,因为它存储在不透明的 blob 中。
当我使用不同的、更好的网络摄像头(Logitech C615)时,我的编码视频流就是我要求的大小。
我的问题:
<video>
网络摄像头 / gUM / MediaRecorder /信号链中是否有任何方法可以在实际记录流的浏览器中找到编码流的实际尺寸?也就是说,我可以在不解码生成的流的情况下找到信号链对我请求的维度的响应吗?