Streamlink OpenCV 中的流数据处理 Python
Streamlink Streamdata processing in OpenCV Python
我正在尝试通过流链接读取 twitch 流 (https://streamlink.github.io/api_guide.html)
进入 OpenCV 以在 Python.
中进一步处理
什么有效,通过 popen 将流读入 stream.ts 文件,然后读入 opencv:
import subprocess
import os
import time
def create_new_streaming_file(stream_filename="stream0", stream_link="https://www.twitch.tv/tsm_viss"):
try:
os.remove('./Engine/streaming_util/'+stream_filename+'.ts')
except OSError:
pass
cmd = "streamlink --force --output ./Engine/streaming_util/"+stream_filename+".ts "+stream_link+" best"
subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
create_new_streaming_file()
video_capture = cv2.VideoCapture('./Engine/streaming_util/stream0.ts')
速度非常慢,大约 30 秒后流停止。
我想从流链接 python api 中直接将字节流读入 openCV。
有效的是将流的最新 n 个字节打印到控制台中:
import streamlink
streams = streamlink.streams("https://www.twitch.tv/grimmmz")
stream = streams["best"]
fd = stream.open()
while True:
data = fd.read(1024)
print(data)
我正在寻找这样的东西(不起作用,但你会明白这个概念):
streams = streamlink.streams("https://www.twitch.tv/grimmmz")
stream = streams["best"]
fd = stream.open()
bytes=''
while True:
# to read mjpeg frame -
bytes+= fd.read(1024)
a = bytes.find('\xff\xd8')
b = bytes.find('\xff\xd9')
if a!=-1 and b!=-1:
jpg = bytes[a:b+2]
bytes= bytes[b+2:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR)
cv2.imwrite('messigray.png', img)
cv2.imshow('cam2', img)
else:
continue
提前致谢!
尽管如此,要以合理的性能完成还是相当棘手的。
查看项目:https://github.com/DanielTea/rage-analytics/blob/master/README.md
主要文件在引擎文件夹中 realtime_Videostreamer.py。如果你初始化这个对象,它会创建一个 ffmpeg 子进程,并在一个额外的线程中用视频帧填充一个队列。此架构可防止主线程阻塞,因此根据您的网络速度和 cpu 功率,可以并行分析几个流。
此解决方案非常适用于 twitch 流。没有尝试其他流媒体网站。
More info关于这个项目。
我正在尝试通过流链接读取 twitch 流 (https://streamlink.github.io/api_guide.html) 进入 OpenCV 以在 Python.
中进一步处理什么有效,通过 popen 将流读入 stream.ts 文件,然后读入 opencv:
import subprocess
import os
import time
def create_new_streaming_file(stream_filename="stream0", stream_link="https://www.twitch.tv/tsm_viss"):
try:
os.remove('./Engine/streaming_util/'+stream_filename+'.ts')
except OSError:
pass
cmd = "streamlink --force --output ./Engine/streaming_util/"+stream_filename+".ts "+stream_link+" best"
subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
create_new_streaming_file()
video_capture = cv2.VideoCapture('./Engine/streaming_util/stream0.ts')
速度非常慢,大约 30 秒后流停止。
我想从流链接 python api 中直接将字节流读入 openCV。 有效的是将流的最新 n 个字节打印到控制台中:
import streamlink
streams = streamlink.streams("https://www.twitch.tv/grimmmz")
stream = streams["best"]
fd = stream.open()
while True:
data = fd.read(1024)
print(data)
我正在寻找这样的东西(不起作用,但你会明白这个概念):
streams = streamlink.streams("https://www.twitch.tv/grimmmz")
stream = streams["best"]
fd = stream.open()
bytes=''
while True:
# to read mjpeg frame -
bytes+= fd.read(1024)
a = bytes.find('\xff\xd8')
b = bytes.find('\xff\xd9')
if a!=-1 and b!=-1:
jpg = bytes[a:b+2]
bytes= bytes[b+2:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR)
cv2.imwrite('messigray.png', img)
cv2.imshow('cam2', img)
else:
continue
提前致谢!
尽管如此,要以合理的性能完成还是相当棘手的。
查看项目:https://github.com/DanielTea/rage-analytics/blob/master/README.md
主要文件在引擎文件夹中 realtime_Videostreamer.py。如果你初始化这个对象,它会创建一个 ffmpeg 子进程,并在一个额外的线程中用视频帧填充一个队列。此架构可防止主线程阻塞,因此根据您的网络速度和 cpu 功率,可以并行分析几个流。
此解决方案非常适用于 twitch 流。没有尝试其他流媒体网站。
More info关于这个项目。