Воспроизведение видео не достигает 60 FPS при использовании MediaSource

Я использую video.srcObject = mediaStream; // MediaStream object для загрузки тега <video>. (То же, что и в этой демонстрации: https://webrtc.github.io/samples/src/content/capture/video-video/)

Видео составляет 60 кадров в секунду, однако из графика chrome://webrtc-internals он показывает, что отправленные / полученные видео постоянно находятся на уровне 30 кадров в секунду. Можно ли здесь что-нибудь изменить?

К вашему сведению - я не использую getUserMedia(), я делаю то же самое, что и демо - потоковая передача с <video> на другой <video> с использованием однорангового соединения с WebRTC.


person Zip    schedule 30.04.2019    source источник
comment
Вы можете показать свой код? Пример, на который вы ссылаетесь, не имеет ничего общего с WebRTC напрямую (кроме того, что эти медиа-компоненты заключены в библиотеки WebRTC), а также не использует MediaSource. В примере используется captureStream(), который я никогда не видел, чтобы он работал выше 30 FPS.   -  person Brad    schedule 30.04.2019
comment
Код точно такой же, как и в примере WebRTC, который я взял из него. Вы правы, я не использую напрямую WebRTC. Таким образом, левое видео просто использует тег ‹video› для воспроизведения локального видео со скоростью 60 кадров в секунду, но, согласно внутренней статистике webrtc, левое видео отправляет только 30 кадров в секунду вправо. Этого я не понимаю.   -  person Zip    schedule 30.04.2019
comment
В дополнение к своему ответу я мог бы предложить присоединиться к видео-разработчику на Slack. video-dev.herokuapp.com Есть несколько человек, которые работают над реализацией этого API. Возможно, они смогут понять, почему это заблокировано на максимальной скорости 30 кадров в секунду.   -  person Brad    schedule 30.04.2019


Ответы (1)


К сожалению, невозможно указать частоту кадров с помощью HTML5MediaElement.captureStream().

Если вы осуществляли потоковую передачу с холста, вы можете указать частоту кадров с помощью первого параметра:

canvas.captureStream(30);

Однако я никогда не видел, чтобы поток захвата работал выше 30 кадров в секунду. Это относительно новый API с множеством особенностей реализации и жестко запрограммированных элементов.

person Brad    schedule 30.04.2019
comment
Спасибо за объяснение, я все еще новичок в видео, только начал читать о WebRTC 2 недели назад. Я хочу измерить производительность декодирования WebRTC (например, с помощью chrome: // webrtc-internal), мне совершенно наплевать на P2P-соединение, мне просто передать видеопоток как MediaStream на ‹video›? Единственный известный мне способ - использовать getUserMedia (), но ограничен ли этот fps веб-камерой? Извините за то, что задаю случайные вопросы. - person Zip; 30.04.2019
comment
Я нашел этот stackoverflow.com/questions/21225187 /, но предлагается использовать captureStream (), который по-прежнему не превышает 30 кадров в секунду. - person Zip; 30.04.2019
comment
Я прочитал несколько ваших вопросов ... Я действительно не понимаю, к чему вы клоните. getUserMedia() предназначен для веб-камер, интерфейсов захвата, микрофонов, аудиоинтерфейсов и т. Д. Это не имеет ничего общего с обычным декодированием видео. Возможно, вам стоит опубликовать новый вопрос, который полностью объясняет то, что вы пытаетесь сделать, на более высоком уровне, чтобы мы могли предложить лучший ответ. Кроме того, если вы заинтересованы в консультациях, напишите мне по адресу [email protected]. - person Brad; 30.04.2019