下面是我使用多线程池并行播放多个视频的代码.但每个输入只播放一段视频.我希望每个视频单独打开.不组合

import concurrent.futures

RTSP_URL = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4"
RTSP_List = [RTSP_URL, RTSP_URL, RTSP_URL, RTSP_URL]


def url_to_video(url):
    video = cv2.VideoCapture(url)
    while True:
        _, frame = video.read()
        cv2.imshow("RTSP", frame)
        k = cv2.waitKey(1)
        if k == ord('q'):
            break
    video.release()
    cv2.destroyAllWindows()


while True:
    with concurrent.futures.ThreadPoolExecutor() as executor:
        executor.map(url_to_video, RTSP_List)```

how to play each video separately.


推荐答案

你只需要每个线程为cv2.imshow中的窗口使用不同的名称,这样每个线程就会生成一个不同的窗口,你应该把它们放在不同的地方,这样它们就不会一个一个地出现在另一个窗口上,我只是在它们上面添加了index,这样每个不同的index将在屏幕上有一个位置和不同的标题,而且当一个窗口完成时,你不应该销毁所有的窗口……

import concurrent.futures
import cv2
RTSP_URL = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4"
RTSP_List = [(RTSP_URL,0), (RTSP_URL,1), (RTSP_URL,2), (RTSP_URL,3)]


def url_to_video(tup):
    url,index = tup
    video = cv2.VideoCapture(url)
    while True:
        _, frame = video.read()
        cv2.imshow(f"RTSP {index}", frame)
        cv2.moveWindow(f"RTSP {index}", index*300, 0)
        k = cv2.waitKey(1)
        if k == ord('q'):
            break
    video.release()


while True:
    with concurrent.futures.ThreadPoolExecutor() as executor:
        executor.map(url_to_video, RTSP_List)
    cv2.destroyAllWindows()

Python相关问答推荐

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

如何修复使用turtle和tkinter制作的绘画应用程序的撤销功能

覆盖Django rest响应,仅返回PK

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

使用Keras的线性回归参数估计

使用SciPy进行曲线匹配未能给出正确的匹配

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

如何删除索引过go 的lexsort深度可能会影响性能?' &>

需要计算60,000个坐标之间的距离

用Python解密Java加密文件

Polars:用氨纶的其他部分替换氨纶的部分

优化器的运行顺序影响PyTorch中的预测

如何在Polars中从列表中的所有 struct 中 Select 字段?

matplotlib + python foor loop

重置PD帧中的值

巨 Python :逆向猜谜游戏

Polars map_使用多处理对UDF进行批处理

如何在Python中使用Iscolc迭代器实现观察者模式?

如何将泛型类类型与函数返回类型结合使用?

在Django中重命名我的表后,旧表中的项目不会被移动或删除