使用MSE或WebRTC时如何衡量解码性能?

时间:2019-04-28 07:16:04

标签: html5 html5-video webrtc h.264 media-source

对于测试,我正在考虑使用WebSocket将流推送到客户端,视频编码为Fragmented MP4。然后,客户端使用(MediaSource)MSE和(MediaStream)WebRTC以及HTML5 <video>标签对流进行ASAP解码。这只是一个测试,对于实际用例,我的目标是实时实时流。

我是否可以通过逐帧解码时间来测量帧?即解码器解码帧和渲染器渲染帧需要多长时间?另外,我该如何获取实时FPS?

2 个答案:

答案 0 :(得分:1)

您可能获得的最接近的结果是通过观察HTMLVideoElement随着时间的webkitDroppedFrameCountwebkitDecodedFrameCount属性。 (请注意,这仅在Chrome中有效。)这实际上并不会为您提供解码帧的时间,但会帮助您评估相关性能。

解码一帧的时间实际上对您没有多大用处。无论数据来自何处,情况都将相同。帧与帧之间也将有所不同。重要的是解码器可以跟上播放速率。

我还应该指出,如果只向一个方向发送数据,则没有理由使用网络套接字。如果您只是将视频数据流式传输到客户端,请使用常规HTTP!您可以使用Fetch API流式传输响应,而完全跳过Web套接字的开销。

答案 1 :(得分:1)

您可以在使用WebRTC期间通过几种方式检查一些有用的矩阵。

webrtc-internals(仅Chrome)

如果您尝试使用WebRTC,则可以检查WebRTC内部。

创建peerConnection对象后,在Chrome的地址栏中,尝试输入以下内容。

  

chrome:// webrtc-internals

然后您可以检查一些有用的矩阵。

FPS

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

您可以使用类似googFrameRateDecoded googFrameRateOutput googFrameRateReceived的值来检查帧速率。

延迟

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对象以标准方式访问统计信息。