Как остановить изменение соотношения сторон видеопотока (WebRTC)

В настоящее время наш видеочат webRTC находится в стадии бета-тестирования, и мы заметили странную проблему с изменением соотношения сторон видео.

Когда мы запрашиваем видео, используя следующее.

navigator.mediaDevices.getUserMedia({video: { deviceId: { exact: deviceId }, height: 300, width: 400 }})

все начинается нормально, но мы получили отзывы о том, что пользователи видят видео «растягивающимся» на несколько секунд, прежде чем вернуться в нормальное состояние. Нам удалось воспроизвести это локально, приостановив видеопоток, при просмотре видео видно, что соотношение сторон меняется с 400x300 на 300x150 (что совпадает с внутренними значениями здесь https://www.w3.org/TR/2011/WD-html5-20110113/video.html#video< /а>).

Кто-нибудь может подумать, почему это происходит?


person Steve Frost    schedule 13.05.2020    source источник
comment
Какой браузер? Вы пробовали другие браузеры?   -  person jib    schedule 14.05.2020
comment
Нам удалось воспроизвести его в Chrome, Safari и Firefox.   -  person Steve Frost    schedule 14.05.2020


Ответы (1)


Ожидается, что ваше приложение будет обрабатывать видео с любым соотношением сторон и разрешением.

Во-первых, поток, который вы получаете с помощью getUserMedia, может не соответствовать тому размеру, который вы запрашиваете. 400x300 не является нормальным разрешением, и не все браузеры будут обрезать или масштабировать то, что они получают от веб-камеры, для размещения вашего приложения. Даже если вы использовали что-то более распространенное, например 640x480, все равно есть вероятность, что камера его не поддерживает и отправит видео с другим разрешением.

Затем, особенно с мобильными устройствами, может произойти вращение, поэтому ваше видео, которое изначально имело соотношение сторон 4:3, теперь могло быть 3:4. Эти изменения разрешения происходят в середине потока без какого-либо предупреждения.

Наконец, из-за изменения пропускной способности или состояния процессора браузеры могут масштабировать видео в любое время. Возможно, одно из устройств начинает перегреваться или у него садится батарея. Это может привести к спорадическому масштабированию видео. Я никогда не видел, чтобы при этом менялось соотношение сторон, но это звучит правдоподобно, особенно при использовании странных размеров видео.

Рассмотрите возможность установки следующего CSS-элемента видео, для которого вы воспроизводите видео:

object-fit: cover;

Если вам действительно нужно получить высоту/ширину, используйте свойства videoHeight и videoWidth элемента видео.

person Brad    schedule 14.05.2020
comment
Спасибо за ответ, Брэд, я только что попробовал не передавать размеры с ограничениями, и это все еще происходит. Чтобы воспроизвести это, я отправляю запрос на паузу в удаленную ленту, а затем, как только я навожу курсор на элемент видео, он переключается на 300 x 150, а возобновление видео возвращает его к предыдущему размеру. - person Steve Frost; 14.05.2020
comment
@SteveFrost Да, как я уже упоминал, браузер может изменить разрешение по своему усмотрению в середине потока. - person Brad; 14.05.2020