【问题标题】:Streamlink Streamdata processing in OpenCV PythonOpenCV Python中的Streamlink流数据处理
【发布时间】:2017-12-21 13:07:12
【问题描述】:

我正在尝试通过 streamlink (https://streamlink.github.io/api_guide.html) 读取 twitch 流 进入 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 秒后流停止。

我想从streamlink的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

提前非常感谢!

【问题讨论】:

    标签: python opencv stream twitch


    【解决方案1】:

    不过,要以合理的性能完成是相当棘手的。

    查看项目:https://github.com/DanielTea/rage-analytics/blob/master/README.md

    主文件是引擎文件夹中的realtime_Videostreamer.py。如果你初始化这个对象,它会创建一个 ffmpeg 子进程并在一个额外的线程中用视频帧填充一个队列。这种架构可以防止主线程阻塞,因此可以根据您的网络速度和 CPU 功率并行分析几个流。

    此解决方案非常适用于抽搐流。没有尝试其他流媒体网站。

    More info关于这个项目。

    【讨论】:

    • 嗨,我在 create_pipe 遇到了一个错误,可能是因为这个目录 ''/home/sd092/ffmpeg-git-20180111-32bit-static/ffmpeg'' 不在我的电脑中,是吗?知道怎么解决吗?
    • 是的,对不起,这个项目是一个 hacky 大学挑战。该路径应该是您自己的 ffmpeg 文件路径。
    • 我对那个错误很好,但是当我尝试在高清流 (1920x1080) 上逐帧捕捉时,我的 PC 获得了完整的 RAM 和 CPU。你有同样的问题吗?
    • 是的,这个实现是资源密集型的,我建议使用较低的分辨率。如果我没记错的话,twitch & streamlink 支持一个关键字,您可以在其中更改视频分辨率。我们可以使用具有 128Gb RAM、64 核和 1080 GTX Titan 显卡的服务器。
    • 随时打开拉取请求并推送您的版本!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2022-08-10
    • 2011-12-13
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多