差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
digi:arm-embedded:ccmp2:mipiwifi [2025/07/07 06:51] robindigi:arm-embedded:ccmp2:mipiwifi [2025/07/08 09:02] (当前版本) robin
行 10: 行 10:
 => saveenv => saveenv
 </code> </code>
 +
 +一、使用原来的demo程序,增加对mipi摄像头的支持
  
 测试镜像支持多种web服务方式,比如httpd,thttpd等,支持web服务器功能的demo程序会自动关闭不用的Web服务,如果需手动测试并使用80端口,你可以手动关闭默认的thttpd程序。 测试镜像支持多种web服务方式,比如httpd,thttpd等,支持web服务器功能的demo程序会自动关闭不用的Web服务,如果需手动测试并使用80端口,你可以手动关闭默认的thttpd程序。
行 33: 行 35:
  
 v4l2-ctl -d /dev/video2 --get-fmt-video  #查看当前输出 ,也可简写为v4l2-ctl -d /dev/video2 -V v4l2-ctl -d /dev/video2 --get-fmt-video  #查看当前输出 ,也可简写为v4l2-ctl -d /dev/video2 -V
 +v4l2-ctl -d /dev/video2 --set-fmt-video=width=640,height=480,pixelformat=YUYV
  
-v4l2-ctl -d /dev/video2 --set-fmt-video=width=1024,height=768,pixelformat=JPEG +   #设置输出格式,请根据摄像头输出的支持格式来修改,不知道MJPG就用YUYV来转码
-   #设置输出格式,请根据摄像头输出的支持格式来修改,比如有的是JPEG而MJPG,那JPEG+
        
 +   测试
 +   <code>
 +
 +root@ccmp25-dvk:~# mjpg_streamer -i "input_v4l2.so -d /dev/video2 -r 640x480 -f 0" -o "output_http.so"
 +MJPG Streamer Version: git rev: 75715018f4e38930c368cae71cc1b2c93d5c13ba
 +Failed to initialize any supported format
 +input_init() return value signals to exit
 +</code>
 +结果显示,买的摄像头不支持MJPG输出,转码程序未调好,原来的demo程序还需进一步调整以适配新的mipi摄像头
 +
 +二、使用gstreamer来实现
 +
 +1、使用视频发送端和客户端的方式
 +
 +直接使用摄像头 JPEG 输出,利用摄像头内置的 JPEG 编码功能,可以完全避免转码延迟,大幅降低 CPU 占用。
 +
 +发送端管道 (ConnectCore 板)
 +<code>
 +gst-launch-1.0 v4l2src device=/dev/video2 io-mode=dmabuf !  image/jpeg,width=1280,height=720,framerate=30/1 !  jpegparse !  rtpjpegpay !  udpsink host=<客户端IP> port=5000 sync=false
 +</code>
 +其中如果发给本机:gst-launch-1.0 v4l2src device=/dev/video2 io-mode=dmabuf !  image/jpeg,width=1280,height=720,framerate=30/1 !  jpegparse !  rtpjpegpay !  udpsink host=127.0.0.1 port=5000 sync=false
 +
 +2.
 +备选方案:使用 WebRTC 实现超低延迟
 +
 +<code>
 +gst-launch-1.0 v4l2src device=/dev/video2 !  image/jpeg,width=1280,height=720 !  jpegparse ! rtpjpegpay !  webrtcbin name=webrtc  stun-server=stun://stun.l.google.com:19302  ! udpsink host=<客户端IP> port=5000
 +</code>
 +
 +3. 备选方案:YUYV 转 H.264(仅当需要高压缩率时
 +</code>
 +gst-launch-1.0 v4l2src device=/dev/video2 !  video/x-raw,format=YUYV !  nvvidconv ! 'video/x-raw(memory:NVMM)' !  nvv4l2h264enc bitrate=4000000 !  rtph264pay ! udpsink host=192.168.46.100 port=5000
 +</code>
 +
 +
 +*************调试相关
 +
 +<code>
 +gst-launch-1.0 v4l2src device=/dev/video2 io-mode=dmabuf ! image/jpeg,width=640,height=480 !  jpegparse ! jpegdec !  videoconvert !  autovideosink
 +
 +gst-launch-1.0 v4l2src device=/dev/video2 io-mode=mmap !  image/jpeg,width=640,height=480 !  jpegparse ! jpegdec !  videoconvert ! autovideosink
 +
 +gst-launch-1.0 v4l2src device=/dev/video2 !  image/jpeg,width=640,height=480 !  queue max-size-buffers=2 leaky=downstream !  jpegparse ! jpegdec !  videoconvert !    autovideosink
 +
 +上面不行,JPEG可能是为了静态抓图,而不是mjpg, 设置回YUYV
 +
 +gst-launch-1.0 v4l2src device=/dev/video2 !  "video/x-raw,format=YUYV,width=640,height=480" !  videoconvert !  video/x-raw,format=I420 !  autovideosink
 +
 +gst-launch-1.0 v4l2src device=/dev/video2 ! capsfilter caps="video/x-raw,format=YUYV,width=640,height=480" !  videoconvert !  autovideosink
 +
 +尝试mjpg,还是要设置回jpeg
 +gst-launch-1.0 v4l2src device=/dev/video2 !  image/jpeg,width=640,height=480 !  jpegdec !  videoconvert !  autovideosink
 +
 +</code>
 +  上面不行,就用专用转换方案
 + <code>
 +gst-launch-1.0 v4l2src device=/dev/video2 !  v4l2convert !  video/x-raw,format=YUYV,width=640,height=480 !  videoconvert !  autovideosink
 +</code>
  
 +********旧资料
 gst-launch-1.0 v4l2src device=/dev/video2 ! autovideoconvert ! autovideosink  #注意,如果想简单测试一下在显示屏上输出摄像头的视频,可用这个,但它会占用设备,不可再用web共享,因此为了web共享,用下面这个办法,先创建web的流,再用相同的流本地显示  gst-launch-1.0 v4l2src device=/dev/video2 ! autovideoconvert ! autovideosink  #注意,如果想简单测试一下在显示屏上输出摄像头的视频,可用这个,但它会占用设备,不可再用web共享,因此为了web共享,用下面这个办法,先创建web的流,再用相同的流本地显示