Как измерить производительность декодирования при использовании MSE или WebRTC? - PullRequest
1 голос
/ 28 апреля 2019

Для теста я думаю об использовании WebSocket для передачи потока на клиент, видео, закодированное как Fragmented MP4. Затем клиент декодирует поток как можно скорее, используя (MediaSource) MSE и (MediaStream) WebRTC вместе с тегом HTML5 <video>. Это всего лишь тест, для реального случая использования я нацеливаюсь на прямой эфир в реальном времени.

Можно ли измерить время покадрового декодирования? т.е. сколько времени занимает декодер, чтобы декодировать кадр, и рендер рендерит кадр? В качестве альтернативы, как я могу получить FPS в реальном времени для этого?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вы можете проверить некоторые полезные матрицы несколькими способами во время использования WebRTC.

webrtc-internals (только Chrome)

Если вы попробуете WebRTC, вы можете проверить внутренний WebRTC.

После создания объекта peerConnection в адресной строке Chrome введите следующее.

хром: // WebRTC-Внутренности

Тогда вы можете проверить некоторые полезные матрицы.

FPS

на Stats graphs for ssrc_****_recv (ssrc) (video)

Вы можете проверить частоту кадров с помощью значения googFrameRateDecoded googFrameRateOutput googFrameRateReceived.

Delay

на Stats graphs for ssrc_****_recv (ssrc) (video)

Вы можете проверить задержку с помощью googTargetDelayMs googRenderDelayMs googJitterBufferMs.

Подробнее об этой матрице для реальной практики, проверьте это.

https://flashphoner.com/oh-webcam-online-broadcasting-latency-thou-art-a-heartless-bitch/

Стандартные статистические данные WebRTC

Также вы можете получить статистику стандартным способом из объекта peerConnection.

1 голос
/ 28 апреля 2019

Вероятно, самое близкое, что вы можете получить, это просмотреть свойства webkitDroppedFrameCount и webkitDecodedFrameCount HTMLVideoElement с течением времени. (Обратите внимание, что это работает только в Chrome.) На самом деле это не даст вам времени для декодированных кадров, но поможет вам измерить соответствующую производительность.

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

Я также должен отметить, что нет причин использовать веб-сокеты, если вы отправляете данные только в одном направлении. Если вы просто транслируете видеоданные на клиент, используйте обычный HTTP! Вы можете транслировать ответ с помощью Fetch API и полностью пропустить издержки веб-сокетов.

...