Фон:
В Windows 10 я использую getUserMedia (gUM) и MediaRecorder в Google Chrome (v71) для захвата и кодирования видеопотока.
- Я использую параметр ограничений для gUM, чтобы сообщить ему, что я хочу формат видео 352x288.
Я запрашиваю video/webm; codecs="avc1.42E01E"
в качестве MIME-типа закодированного потока (это H.264 в штучной упаковке Matroska ).
В качестве источника видео я выбираю непристойную веб-камеру, встроенную в ноутбук.Он называется «EasyCamera» производства DMAX-AVC.Соблазнительно назвать его CheezyCamera.
Видеопоток генерируется просто отлично.
Проблема:
Размеры закодированного видео в потоке 440x360 , а не мои запрошенные 352x288 .Эта информация встроена в записанный поток и видна только потребителю этих данных.Использование различных API-интерфейсов показывает, что метаданные потока gUM, MediaRecorder и <video>
элемента считают, что измерения - это те, о которых я просил.
Конечно, веб-камера, gUM и MediaRecorder рассматривают параметр ограничений как предложения.и можете ответить чем-то другим.В этом случае они отвечают с 440x360, когда я запрашиваю 352x288.Эта система функционирует как задумано;это не моя проблема.
Для пояснения, неожиданные размеры 440x360 видны только потребителю записанного потока.Я надеюсь найти способ узнать, что сигнальная цепочка веб-камеры, gUM и MediaEncoder на стороне производителя производит разрешение, отличное от того, которое я запрашивал.
Как потребитель потока узнает размеры потока?Они находятся в блоках Matroska «PixelWidth» и «PixelHeight» и встроены в поток H.264.(Как ни странно, учитывая, что это программное решение выбрано, оно не является целым числом макроблоков 16x16. Конечно, оно все еще работает.)
Я не могу проанализировать записанные данные в браузере, потому что этохранится в непрозрачных BLOB-объектах.
Когда я использую другую, более совершенную веб-камеру (Logitech C615), мой кодированный видеопоток соответствует требуемому размеру.
Мой вопрос:
Есть ли какой-нибудь способ в цепочке сигналов веб-камеры / gUM / MediaRecorder / <video>
найти фактические размеры закодированного потока в браузере, реально записывающем поток?То есть я могу найти ответ сигнальной цепочки на мои запрошенные измерения без декодирования сгенерированного потока?