我正在try 捕获来自RTSP摄像头的视频流,并将其写入文件.将Jetson Xavier AGX与Jetpack 4.5配合使用[L4T 32.5.0]

我正在使用下面的python应用程序来执行任务:

cap = cv2.VideoCapture("rtspsrc location=rtsp://10.34.134.1/Streaming/channels/1/ user-id=myuser user-pw=mypass !  rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw, format=BGRx ! videoconvert ! video/x-raw,format=BGR ! appsink")

w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print('Src opened, %dx%d @ %d fps' % (w, h, fps))

gst_out = "appsrc ! video/x-raw, format=BGR ! queue ! videoconvert ! video/x-raw,format=BGRx ! nvvidconv ! nvv4l2h264enc ! h264parse ! matroskamux ! filesink location=test.mkv "
out = cv2.VideoWriter(gst_out, cv2.CAP_GSTREAMER, 0, float(fps), (int(w), int(h)))
if not out.isOpened():
   print("Failed to open output")
   exit()

if cap.isOpened():
   while True:
      ret_val, img = cap.read()
      if not ret_val:
         break;
      out.write(img);
      cv2.waitKey(1)
else:
   print ("pipeline open failed")

cap.release()
out.release()

打开溪流不起作用.我得到以下错误:

[ERROR:0@0.041]GLOBAL/io/Opencv/MODULES/VIDEOIO/src/cap.cpp(164) Open VIDEOIO(CV_IMAGE):引发OpenCV异常:

OpenCV(4.6.0)/io/opencv/modules/videoio/src/cap_images.cpp:253: 错误:(-5:错误参数)CAP_IMAGE:找不到起始编号(在 文件名):rtspsrc Location=rtsp://10.34.134.1/Streaming/channels/1/用户id=我的用户 用户密码=mypass!Rtph264描述!H264parse!Nvv4l2解码器!Nvvidconv 好了!视频/x-RAW,格式=BGRx!视频转换!视频/x-RAW,格式=bgr! 函数‘icvExtractPattern’中的AppSink

我能以某种方式修改提供给cv2.VideoCapture的字符串以正确读取RTSP流吗?

推荐答案

如果你的OpenCV支持GStreamer,那么你的VideoCapture()电话应该可以用了.CAP_GSTREAMER将会识别出该管道字符串.这甚至可以在without中显式地指定后端.

每当OpenCV谈到CAP_IMAGES时,这意味着没有其他后端感到对"目标"负有责任,并设法"打开"它.CAP_IMAGES是最低优先级的后端,最后try .

发生这种情况时,请判断输出中的Video I/O部分

import cv2 as cv
print(cv.getBuildInformation())

在带有官方软件包的Windows上,这可能看起来像这样:

...
  Video I/O:
    DC1394:                      NO
    FFMPEG:                      YES (prebuilt binaries)
      avcodec:                   YES (58.134.100)
      avformat:                  YES (58.76.100)
      avutil:                    YES (56.70.100)
      swscale:                   YES (5.9.100)
      avresample:                YES (4.0.0)
    GStreamer:                   NO
    DirectShow:                  YES
    Media Foundation:            YES
      DXVA:                      YES
...

100,你可以自己构建OpenCV,支持GStreamer,或者你可以四处寻找它附带的构建.您的操作系统可能有一个包管理器,该管理器提供带有GStreamer支持的OpenCV的第三方版本.据我所知,官方套餐不包括这一点.

要确保获得特定的后端,请为VideoCapture()VideoWriter()构造函数的apiPreference参数传递cv.CAP_GSTREAMER或另一个标识符.

cap = cv.VideoCapture(your_gst_pipeline, apiPreference=cv.CAP_GSTREAMER)

Python相关问答推荐

单击Cookie横幅错误并在Selenium中启用搜索栏

自动编码器和极坐标

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

Python:MultiIndex Dataframe到类似json的字典列表

Python如何让代码在一个程序中工作而不在其他程序中工作

如何在PIL、Python中对图像应用彩色面膜?

将HLS纳入媒体包

无法使用equals_html从网址获取全文

如何在BeautifulSoup中链接Find()方法并处理无?

如何计算两极打印机中 * 所有列 * 的出现次数?

仿制药的类型铸造

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

为什么默认情况下所有Python类都是可调用的?

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

Pandas—在数据透视表中占总数的百分比

如何在Python中找到线性依赖mod 2

实现神经网络代码时的TypeError

如何指定列数据类型

在matplotlib中删除子图之间的间隙_mosaic

在Python中使用yaml渲染(多行字符串)