You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetson Nano运行Gstreamer管道时v4l2src缓冲区分配失败问题

错误出现原因及平台差异说明

这个Failed to allocate a buffer错误的核心是Jetson平台特有的NVMM显存内存模型和v4l2loopback的兼容性问题:

  • 普通Ubuntu PC上的GStreamer管道全链路使用CPU侧普通内存存储视频帧,v4l2loopback内核模块原生支持对CPU内存帧的读写,因此管道可以正常运行。
  • Jetson Nano上的GStreamer默认优先使用NVIDIA专属的NVMM显存存储视频帧,这类内存无法直接被v4l2loopback识别读写。你当前的管道没有显式将NVMM显存帧转换为CPU内存帧,v4l2sink写入v4l2loopback的帧数据实际是无效的显存地址引用,消费端v4l2src读取时无法在CPU内存中分配到对应大小的有效帧数据,就会触发缓冲区分配失败错误。

修复方案

1. 重新加载v4l2loopback(可选但建议)

增加exclusive_caps参数避免caps协商异常:

sudo modprobe v4l2loopback video_nr=1,2 exclusive_caps=1,1

2. 修改生产端管道(核心修复)

在nvvidconv后显式指定输出为CPU侧普通内存格式,再经过tee分流到v4l2sink:

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=(fraction)30/1' ! nvvidconv ! 'video/x-raw, format=NV12' ! tee name=t ! queue max-size-buffers=10 ! v4l2sink device=/dev/video1 t. ! queue max-size-buffers=10 ! v4l2sink device=/dev/video2

3. 消费端管道适配Jetson(可选)

将xvimagesink替换为Jetson原生的nveglglessink,避免显示侧的内存兼容问题:

gst-launch-1.0 v4l2src device=/dev/video2 ! nveglglessink

内容的提问来源于stack exchange,提问作者A_toaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 10:45:02