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

O. *_*nes 8 javascript google-chrome h.264 getusermedia web-mediarecorder

背景:

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

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

  • 我选择内置于笔记本电脑中的cheezy网络摄像头作为视频源.它被DMAX-AVC称为"EasyCamera".把它称为CheezyCamera很诱人.

视频流生成得很好.

问题:

流中编码视频的尺寸为440x360,而不是我要求的352x288.此信息嵌入在记录的流中,并且只能从该数据的使用者处看到.使用各种AP​​I可以发现gUM流,MediaRecorder和<video>元素元数据都认为维度是我要求的维度.

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

为了澄清,意外的440x360尺寸仅对记录流的消费者可见.我希望找到一种方法来了解生产者端网络摄像头,gUM和MediaEncoder信号链产生的分辨率与我要求的不同.

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

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

当我使用不同的,更好的网络摄像头(Logitech C615)时,我的编码视频流是我要求的大小.

我的问题:

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

O. *_*nes 1

在尝试了这个问题的其他回答者提供的各种方法之后,我没有成功解决这个问题。

我的结论是,这是从网络摄像头到 Google Chrome 到 gUM 的信号链中某个地方的错误。