Фон:
В Windows 10 я использую getUserMedia (gUM) и MediaRecorder в Google Chrome (v71) для захвата и кодирования видеопоток.
- Я использую параметр constraints для 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), мой кодированный видеопоток имеет размер, который я запрашивал.
Мой вопрос:
Есть ли способ в цепочке сигналов webcam / gUM / MediaRecorder / <video>
найти фактические размеры закодированного потока в браузере, фактически записывающем поток? То есть могу ли я найти ответ цепочки сигналов на мои запрошенные измерения без декодирования сгенерированного потока?
getUserMedia()
пример не гарантирует, что размер видео будет именно тем, который вы запрашиваете, и также зависит от вашего оборудования. - person Jimi Pajala   schedule 27.01.2019<canvas>
источником ... - person O. Jones   schedule 27.01.2019