gpt4 book ai didi

python - OpenCV 视频捕获 : Cannot reuse HTTP connection for different host

转载 作者:行者123 更新时间:2023-12-04 13:59:16 27 4
gpt4 key购买 nike

我正在尝试使用 openCV 捕获实时 youtube 广播。

使用 pafy 我从 youtube 获得 m3u8 播放列表(还没有研究播放列表更新),但是播放列表上的片段分散在多个主机上,这似乎导致与第一个主机不同的片段卡住,然后出现这样的错误:

Cannot reuse HTTP connection for different host: r5---sn-x2pm-f5fs.googlevideo.com:-1 != r4---sn-x2pm-f5fs.googlevideo.com:-1

这似乎是 ffmpeg 问题,但也许我错过了一些解决方法?

我的代码:
mPafy = pafy.new('VQOzkTEPCMw')
mStream = mPafy.getbest(preftype="mp4")

capture = cv2.VideoCapture(mStream.url)
while(True):
ret, frame = capture.read()
cv2.imshow('yt', frame)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows()

编辑:

我绕过了 VideoCapture 并直接调用了 ffmpeg,它好一点,只要段在不同的主机上,仍然会卡住,但只有约 1 秒。并且段没有丢失,ffmpeg打开新连接并抓取它,打开连接需要时间。

Tbf 我不知道我应该从哪里开始。一种方法是手动处理 m3u8 播放列表并提供 ffmpeg 数据流进行解码,但这感觉有点矫枉过正。无论如何,这是我当前的代码:
import pafy
from cv2 import cv2
import subprocess as sp
import numpy as np

mPafy = pafy.new('VQOzkTEPCMw')
mStream = mPafy.getbest(preftype='mp4')
frameSize = 3*mStream.dimensions[0]*mStream.dimensions[1]

pipe = sp.Popen(['./ffmpeg.exe', '-i', mStream.url, '-f', 'image2pipe', '-pix_fmt', 'bgr24',
'-vcodec', 'rawvideo', '-'],
stdin=sp.PIPE, stdout=sp.PIPE, bufsize=frameSize)
while(True):
raw = pipe.stdout.read(frameSize)
frame = np.fromstring(raw, dtype='uint8').reshape(
mStream.dimensions[1], mStream.dimensions[0], 3)
cv2.imshow('yt', frame)
if cv2.waitKey(16) & 0xFF == ord('q'):
break
pipe.terminate()
cv2.destroyAllWindows()

最佳答案

对于 ffmpeg您可以使用 -http_persistent 0以避免这个错误。

关于python - OpenCV 视频捕获 : Cannot reuse HTTP connection for different host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54745306/

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