Я попробовал ваш код с MP4-Video (http://techslides.com/demos/sample-videos/small.mp4), и он работает. Я преобразовал указанное видео в mov с https://video.online-convert.com/convert-to-mov, и он все еще работает ...
Хотя у меня может быть обоснованное предположение: вы должны пытаться делать каждый звонок с помощью fre sh экземпляр cv2.
Я предполагаю, что проблема может заключаться в том, что второй вызов потока наследует состояние первого вызова (особенно внутреннее состояние cv2), так как для него это только функция в состоянии "уже воспроизведено" или что-то еще, и больше ничего не показывает.
, поэтому, если вы помещаете все в класс и каждый раз вызываете новый экземпляр cv2, когда вызывается Load (), это может сработать.
import cv2
import threading
class Video:
def play(self):
video = cv2.VideoCapture('small.mov')
if video.isOpened() == True:
cv2.namedWindow("The Video")
cv2.moveWindow("The Video", 500,200)
elif video.isOpened() == False:
print('No Data For Loading Video')
return 0
while video.isOpened():
_, frame = video.read()
if _ == True:
cv2.imshow("The Video",frame)
if cv2.waitKey(10) & 0xff == 27:
break
if _ == False :
break
cv2.destroyAllWindows()
video.release()
def Load():
v=Video()
v.play()
del v
t = threading.Thread(target = Load)
t.start()