我正在尝试使用 OpenCV 和 GStreamer 将视频流式传输到 AWS Kinesis Video Streams,但无法使其正常工作。我已经设置了一个名为 ExampleStream 的 Kinesis 视频流,并且我想使用 numpy 数组作为视频帧的源。
这是我正在使用的代码:
import cv2
import numpy as np
import time
from Utils.utils import get_aws_cred
access_key, secret_key, region = get_aws_cred()
pipeline = (
f"appsrc ! videoconvert ! video/x-raw,format=BGR,width={400},height={400},framerate=25/1 ! videoconvert ! video/x-raw ! x264enc key-int-max=45 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name=ExampleStream storage-size=512 aws-region={region} access-key={access_key} secret-key={secret_key} max-latency=1 buffer-duration=1"
)
out = cv2.VideoWriter(pipeline, cv2.CAP_GSTREAMER, 0, float(25), (400, 400), True)
while True:
frame = (np.random.rand(400, 400, 3) * 255).astype(np.uint8)
out.write(frame)
time.sleep(0.04)
没有错误,也没有我可以调试来解决的问题。另外,当我从终端运行管道时,它可以工作,所以我假设 aws 中的配置是正确的。我通过终端运行的管道是:
"gst-launch-1.0 videotestsrc is-live=true ! video/x-raw,framerate=25/1 ! videoconvert ! x264enc bframes=0 key-int-max=45 bitrate=500 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name=ExampleStream storage-size=512 access-key=$AWS_ACCESS_KEY_ID secret-key=$AWS_SECRET_ACCESS_KEY aws-region=$AWS_REGION max-latency=1 buffer-duration=1"
知道管道出了什么问题或如何调试它吗?
这是因为你的opencv不支持gstreamer。用这个来检查
print(cv2.getBuildInformation())
如果它说否,您需要从源代码构建opencv。 检查这个。
最后一件事,你不能使用 Python3.11 构建 opencv。会有一些依赖性问题。