对于测试,我正在考虑使用WebSocket将流推送到客户端,视频编码为Fragmented MP4。然后,客户端使用(MediaSource
)MSE和(MediaStream
)WebRTC以及HTML5 <video>
标签对流进行ASAP解码。这只是一个测试,对于实际用例,我的目标是实时实时流。
我是否可以通过逐帧解码时间来测量帧?即解码器解码帧和渲染器渲染帧需要多长时间?另外,我该如何获取实时FPS?
答案 0 :(得分:1)
您可能获得的最接近的结果是通过观察HTMLVideoElement随着时间的webkitDroppedFrameCount
和webkitDecodedFrameCount
属性。 (请注意,这仅在Chrome中有效。)这实际上并不会为您提供解码帧的时间,但会帮助您评估相关性能。
解码一帧的时间实际上对您没有多大用处。无论数据来自何处,情况都将相同。帧与帧之间也将有所不同。重要的是解码器可以跟上播放速率。
我还应该指出,如果只向一个方向发送数据,则没有理由使用网络套接字。如果您只是将视频数据流式传输到客户端,请使用常规HTTP!您可以使用Fetch API流式传输响应,而完全跳过Web套接字的开销。
答案 1 :(得分:1)
您可以在使用WebRTC期间通过几种方式检查一些有用的矩阵。
如果您尝试使用WebRTC,则可以检查WebRTC内部。
创建peerConnection对象后,在Chrome的地址栏中,尝试输入以下内容。
chrome:// webrtc-internals
然后您可以检查一些有用的矩阵。
在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/
您还可以通过peerConnection对象以标准方式访问统计信息。