python - 使用 OpenCV VideoWriter 和 Python BytesIO 在内存中流式传输视频

标签 python opencv video-streaming cv2 in-memory

我想知道是否可以使用 OpenCV 来“流式传输”数据 VideoWriter Python中的类?

通常为了处理内存中的数据,否则我会使用 BytesIO(或 StringIO)。

我尝试使用 BytesIO 失败了:

import cv2
from io import BytesIO

stream = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc('x264')

data = BytesIO()

# added these to try to make data appear more like a string
data.name = 'stream.{}'.format('av1')
data.__str__ = lambda x: x.name

try:
    video = cv2.VideoWriter(data, fourcc=fourcc, fps=30., frameSize=(640, 480))
    start = data.tell()

        # Check if camera opened successfully
        if (stream.isOpened() == False): 
            print("Unable to read camera feed", file=sys.stderr)
            exit(1)

        # record loop
        while True:
            _, frame = stream.read()
            video.write(frame)
            data.seek(start)
            # do stuff with frame bytes
            # ...

            data.seek(start)

    finally:
        try:
            video.release()
        except:
            pass
finally:
    stream.release()

然而,而不是写 BytesIO对象我最终得到以下消息:
Traceback (most recent call last):
  File "video_server.py", line 54, in talk_to_client
    video = cv2.VideoWriter(data, fourcc=fourcc, fps=fps, frameSize=(width, height))
TypeError: Required argument 'apiPreference' (pos 2) not found

...所以当我将 VideoWriter 调用修改为 cv2.VideoWriter(data, apiPreference=0, fourcc=fourcc, fps=30., frameSize=(640, 480)) 时(我读到 0 表示自动,但我也尝试过 cv2.CAP_FFMPEG ),但我收到以下错误:
Traceback (most recent call last):
  File "video_server.py", line 54, in talk_to_client
    video = cv2.VideoWriter(data, apiPreference=0, fourcc=fourcc, fps=fps, frameSize=(width, height))
TypeError: bad argument type for built-in operation

所以我的问题是,是否可以使用 cv2.VideoWriter 编写编码视频?内存中的类,如果是,它是如何完成的?

在这一点上,我没有任何想法,因此非常欢迎任何帮助:-)

最佳答案

不幸的是,OpenCV 不支持对内存进行编码(或解码)。您必须写入(或读取)磁盘才能让 VideoWriter(或 VideoCapture)工作。

关于python - 使用 OpenCV VideoWriter 和 Python BytesIO 在内存中流式传输视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052268/

相关文章:

python - Opencv:BoW计算SURF描述符

OpenCV - 提取图表上的线

Python脚本将乱码写入文件

python - 使用 Mac OSX 在 ipython 中导入 cx_oracle 错误

Python:沿垂直轴镜像图像的最有效方法

c# - 使用 ffmpeg、node.js 和 socket.io 将 Flv 流式传输到套接字

javascript - 使用 WebRTC 从网络摄像头捕获媒体流,将流发布到媒体服务器并从那里分发

java - 无法理解这种方法(它如何尝试匹配帧速率?)

python - 在 Python 中为套接字 IO 编写字符串缓冲区的最佳方法是什么?

python - 如何将 map 列表转换为 python 中的集合 map ?