两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 |
digi:arm-embedded:ccmp2:mipiwifi [2025/07/07 22:51] – robin | digi:arm-embedded:ccmp2:mipiwifi [2025/07/08 09:02] (当前版本) – robin |
---|
=> saveenv | => saveenv |
</code> | </code> |
| |
| 一、使用原来的demo程序,增加对mipi摄像头的支持 |
| |
测试镜像支持多种web服务方式,比如httpd,thttpd等,支持web服务器功能的demo程序会自动关闭不用的Web服务,如果需手动测试并使用80端口,你可以手动关闭默认的thttpd程序。 | 测试镜像支持多种web服务方式,比如httpd,thttpd等,支持web服务器功能的demo程序会自动关闭不用的Web服务,如果需手动测试并使用80端口,你可以手动关闭默认的thttpd程序。 |
#设置输出格式,请根据摄像头输出的支持格式来修改,不知道MJPG就用YUYV来转码 | #设置输出格式,请根据摄像头输出的支持格式来修改,不知道MJPG就用YUYV来转码 |
| |
| 测试 |
| <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的流,再用相同的流本地显示 |
| |