gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:37 27 4
gpt4 key购买 nike

我有以下代码创建 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%。取消 sleep 会使情况变得更糟。

关于处理 HLS 流为何如此占用 CPU 资源的任何解决方案或想法都非常棒。此外,关于如何减少使用的想法也很棒。

最佳答案

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

关于python - 使用 OpenCV GStreamer 读取 HLS 流时 CPU 使用率过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55346909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com