为了账号安全,请及时绑定邮箱和手机立即绑定

使用 OpenCV GStreamer 读取 HLS 流时 CPU 使用率高

使用 OpenCV GStreamer 读取 HLS 流时 CPU 使用率高

aluckdog 2021-12-16 16:06:24
我有以下代码创建 gstreamer 管道来处理 HLS 流。cap = cv2.VideoCapture(    f"souphttpsrc is_live=true location={hls_stream_link} ! hlsdemux !     queue ! decodebin ! videorate ! video/x-raw,framerate=1/1 !     videoconvert ! appsink max-buffers=1 drop=true sync=false",cv2.CAP_GSTREAMER)我现在像这样阅读流:while True:    success, frame = cap.read()    time.sleep(1.0)请注意,我以 1 FPS 读取流并具有max-buffers=1 drop=true sync=false. 通过这样做,我总是从缓冲区必须提供的流中获取最新的帧。问题是 CPU 使用率非常高,在我的 i7 机器上有时会飙升至 120%。取消睡眠会使情况变得更糟。关于为什么处理 HLS 流如此 CPU 密集型的任何解决方案或想法都会很棒。此外,关于如何减少使用的想法也会很棒。
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您正在解码完整的流。在软件中完成时,这可能会非常昂贵。我在这里看到的一个潜在优化步骤是GstPadProbe在解码器之前添加一个,并将一些解析到位流中并删除所有不是 IDR 的样本。然后您将只向解码器发送 IDR 帧。什么会减少解码器的负载,但是您只会在每个 IDR 帧间隔后得到一个新帧,通常每 2 秒一次(但每个帧之间可能会有所不同)。


查看完整回答
反对 回复 2021-12-16
  • 1 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信