Gstreamer v4l2src 在 Jetson Nano 上运行时无法分配缓冲区

时间:2021-06-18 04:23:44

标签: gstreamer nvidia-jetson-nano

我正在尝试运行复制视频流的 Gstreamer 管道,以便它可以在两个应用程序中使用。这是我的示例管道,在 Jetson Nano 上运行时失败,但在我的 Ubuntu PC 上运行。

我使用 from selenium import webdriver import urllib.request from PIL import Image import os keyword=input('keyword : ') n=150 url=input('url : ') # provide path to dircetory before running the code path='E://Old//cust_data' if keyword not in os.listdir(path): os.mkdir(path+'//'+keyword) img_dir=path+'//'+keyword driver=webdriver.Chrome('E://Old//card//chromedriver.exe') driver.get(url) i=1 j=1 while j<=n: try: driver.find_element_by_xpath('//*[@id="islrg"]/div[1]/div[{}]/a[1]/div[1]/img'.format(i)).click() img=driver.find_element_by_xpath('//*[@id="Sva75c"]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div/div[2]/a/img') link=img.get_attribute('src') print(link) urllib.request.urlretrieve(link,img_dir+'//'+keyword+' '+str(j)+'.jpg') size=os.stat(img_dir+'//'+keyword+' '+str(j)+'.jpg').st_size if size<15000: os.remove(img_dir+'//'+keyword+' '+str(j)+'.jpg') else: im=Image.open(img_dir+'//'+keyword+' '+str(j)+'.jpg') print(keyword+' '+str(j)+'.jpg',(im.size[0],im.size[1])) j+=1 i+=1 except: i+=1 print('error') pass driver.close() 创建了 2 个 v4l2 设备(/dev/video1 和 /dev/video2),如下所示:

v4l2loopback

制作人:

sudo modprobe v4l2loopback video_nr=1,2

消费者:

gst-launch-1.0 videotestsrc ! tee name=t ! queue ! v4l2sink device=/dev/video1 t. ! queue ! v4l2sink device=/dev/video2

如您所见,我正在尝试使用 gst-launch-1.0 v4l2src device=/dev/video2 ! xvimagesink 复制流并将其发送到我使用 v4l2loopback 创建的 2 个 tee 设备。

当我运行消费者时,它显示第一帧,然后崩溃:

v4l2

知道为什么无法分配缓冲区吗?为什么这不会发生在我的 Ubuntu PC 上?

这是我的完整 Jetson Nano 管道,它使用相机并将流拆分为 2 个 v4l2 接收器:

Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Setting pipeline to PLAYING ... New clock: GstSystemClock ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to allocate a buffer Additional debug info: gstv4l2src.c(998): gst_v4l2src_create (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0 Execution ended after 0:00:00.056466348 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...

1 个答案:

答案 0 :(得分:0)

使用 max_buffers=2 中的 v4l2loopback 参数可以消除错误。我无法解释为什么它在我的 Ubuntu PC 上不需要这个选项,一定与可用内存量有关吗?

奇怪的是,将 max_buffers 增加到更高的值(例如 max_buffers=8)会导致 same Failed to allocation buffer 错误。