USB Wifi 测试

deyaio-manifest的rtsp分支,用rtsp.xml,使用meta-custom的rtsp分支

DEY 5.0 r1 测试

刷好固件后,udhcpd和hostapd@wlan1都没运行,需要ifup wlan1后即可,不过最好是改成auto,这样更稳定些

设置显示输出,如果要用lvds, 在uboot下

=> setenv overlays ccmp25-dvk_g101evn010-lvds.dtbo
=> saveenv

虽然可以直接用ifup wlan1来开启WiFi AP功能,但命令行开启的方式,在AP的SSID出现后,刚开始会碰到网络拒绝加入,还需要等一会儿才能加入,所以最好是修改/etc/network/interfaces, wlan1的auto注释去掉,然后修改SSID和密码为容易识别的热点名称和密码,比如热点名称为ap-ccmp25,密码为digi

nano /etc/network/interfaces #去掉wlan1的auto注释
nano /etc/NetworkManager/NetworkManager.conf #把wlan0也加入到unmanaged-devices,即:unmanaged-devices=interface-name:p2p*;interface-name:wlan1;interface-name:wlan0
#修改热点名称和优化配置,均在hostapd_wlan1.conf上操作
nano /etc/hostapd_wlan1.conf

注意,包括信道等的优化也可在这里配置,但第一次修改,请先只配置ssid和密码,修改如下:

ssid=ap-ccmp25
wpa_passphrase=digidigi

设置摄像头:

v4l2-ctl --list-devices  #查看设备,最后一项第一个才是摄像头,以 /dev/video7为例,其它设备是硬件codec之类的,也可能未来有用。
v4l2-ctl -d /dev/video7 --list-formats-ext  #查看摄像头支持的输出格式,视新只支持MJPG或YUYV,都是800X800,帧率为5~30fps,低端窄带的小模块,可以用5~15fps来节约带宽,最高设置为30fps。

v4l2-ctl -d /dev/video7 --get-fmt-video  #查看当前输出 ,也可简写为v4l2-ctl -d /dev/video7 -V
v4l2-ctl -d /dev/video7 --get-parm  #查看当前帧率,默认30fps

v4l2-ctl -d /dev/video7 --set-fmt-video=width=800,height=800,pixelformat=MJPG   #设置输出格式,请根据摄像头支持来修改,客户的工装摄像头默认是800X800@30fps,所以也可不用修改使用默认值,其它摄像头需要根据支持格式来修改

gst-launch-1.0 v4l2src device=/dev/video2 ! autovideoconvert ! autovideosink  #注意,如果想简单测试一下在显示屏上输出摄像头的视频,可用这个,但它会占用设备,不可再用web共享,因此为了web共享,用下面这个办法,先创建web的流,再用相同的流本地显示 

通过web或本地显示usb摄像头的视频

1、创建ip直接访问所需页面
mkdir -p /srv/mjpg_streamer/www
echo "<html><body><h1>MJPG Streamer</h1><img src=\"/?action=stream\" /></body></html>" > /srv/mjpg_streamer/www/index.html
2、mjpg_streamer -i "input_uvc.so -d /dev/video7 -r 800x800 -f 30" -o "output_http.so -p 8080 -w /srv/mjpg_streamer/www"
或简版:mjpg_streamer -i "input_uvc.so -d /dev/video7" -o "output_http.so -p 8080 -w /srv/mjpg_streamer/www"
3、本地打开:gst-launch-1.0 -v souphttpsrc location=http://localhost:8080/?action=stream ! jpegdec ! autovideosink

整成脚本:

#!/bin/bash

mjpg_streamer -i "input_uvc.so -d /dev/video2 -f 10" -o "output_http.so -p 8080 -w /srv/mjpg_streamer/www" &

sleep 1

gst-launch-1.0 souphttpsrc location=http://localhost:8080/?action=stream ! jpegdec ! autovideosink

4、窄带小模块的优化方式 在mjpg_streamer -i “input_uvc.so -d /dev/video7 -r 800×800 -f 10” -o “output_http.so -p 8080 -w /srv/mjpg_streamer/www”

5、gstreamer的方式测试及比较 注意,我们创建/tmp/camera_fifo,这个每次启动都会清掉,所以要用这个重启需再创建,或放在服务中

mkfifo /tmp/camera_fifo
gst-launch-1.0 -q v4l2src device=/dev/video7 ! \
  image/jpeg,width=800,height=800,framerate=30/1 ! \
  multipartmux boundary=frame ! \
  filesink location=/tmp/camera_fifo &
nano /srv/www/cgi-bin/stream
内容为:
#!/bin/sh
echo "Content-Type: multipart/x-mixed-replace; boundary=spionisto"
echo
cat /tmp/camera_fifo
在thttpd.conf中启用
nano /etc/thttpd.conf 
内容如下:
dir=/srv/www
cgipat=/cgi-bin/*
user=root

本地

本地显示 
gst-launch-1.0 filesrc location=/tmp/camera_fifo ! \
  multipartdemux boundary=frame ! \
  image/jpeg ! jpegdec ! videoconvert ! waylandsink
如果直接用摄像头而不是fifo流的命令是这个,但如果用web后估计会是占用状态,所以用上面的方式
gst-launch-1.0 v4l2src device=/dev/video7 ! \
  image/jpeg,width=800,height=800 ! \
  jpegdec ! videoconvert ! \
  waylandsink

rtsp的方法待测

使用固件20250303

这个版本已经集成了udhcpd的相关服务,包括mjpg-streamer和rtsp服务器等软件,并且用sthttpd替代busybox的,以实现更多web功能的支持。默认已经改好/etc/network/interfaces中相关的支持。

启动后,有可能需要systemctl restart udhcpd,后续固件更新相关的服务配置,就不需要。 要开启AP,直接ifup wlan1。 另外注意,当前的cypress固件回载出错,不过其应该使用默认的固件,也是可以用来简单测试的,如果要提升性能,可能需要更新无线的固件。

卡刷这个版本固件, 上电后按任意键停在uboot下

setenv dey-image-qt
run install_linux_fw_sd

测试步骤: 1、修改本地显示输出,默认是HDMI接口,如果要改为本地的lvds,开机后按任意键停在uboot下,执行

setenv overlays _ov_board_g101evn010-lvds_ccmp25-dvk.dtbo
saveenv
reset

1、自定义wifi密码:

nano /etc/hostapd_wlan1.conf 

按需更改热点名称密码,然后重启,名称改为ap-ccmp25,密码改为digidigi 重启,或是得新启动hostapd@wlan1

2、开启AP, 我们在wlan1中实施,如果有在使用wlan0,请先关闭它。

#DEY 4.0 r7有bug,为支持ap功能,需修改一下固件名称
cd /lib/firmware/cypress/
cp cyfmac55500-sdio.trxse cyfmac55500-sdio.digi,ccmp25-dvk.trxse

#关闭wlan0 ,无所谓要不要这一步
nmcli dev set wlan0 managed no
nmcli dev status
#启用
systemctl enable hostapd@wlan1.service

ifup wlan1
systemctl status udhcpd
systemctl restart udhcpd #根据固件版本看是否要重启这个服务
systemctl restart hostapd@wlan1.service

Connectcore的AP默认IP地址为:192.168.46.30,客户端接入后会分配到相同网段的IP,并且可以访问http://192.168.42.3

3、配置usb摄像头的默认输出:

查看摄像头支持的格式,用

v4l2-ctl --list-formats-ext -d /dev/video2

查看摄像头的默认输出格式,用

v4l2-ctl -d /dev/video2 --get-fmt-video

设置摄像头的格式,可以用下面命令,注意你要设置硬件所支持的范围

v4l2-ctl -d /dev/video2 --set-fmt-video=width=640,height=480,pixelformat=YUYV

export LD_LIBRARY_PATH=/usr/lib/mjpg-streamer

mjpg_streamer -i “input_uvc.so -d /dev/video0 -r 1024×768 -f 30” -o “output_http.so -p 8080 -w ./www”

sthttpd 配合gstreamer

nano /etc/thttpd.conf

dir=/srv/www
cgipat=/cgi-bin/*
user=root

nano /srv/www/cgi-bin/stream

#!/bin/sh
# 手动设置 HTTP 头(关键:指定 M-JPEG 格式)
echo -e "HTTP/1.1 200 OK\r\nContent-Type: multipart/x-mixed-replace; boundary=frame\r\n\r\n"

# 直接输出摄像头 MJPG 流(无需编码)
gst-launch-1.0 -q v4l2src device=/dev/video0 ! \
  image/jpeg,width=1280,height=720,framerate=30/1 ! \
  multipartmux boundary=frame ! \
  fdsink fd=1

chmod +x /srv/www/cgi-bin/stream

注意,如果要同时本地输出,用这个版本:

#!/bin/sh
# 设置 HTTP 头
echo -e "HTTP/1.1 200 OK\r\nContent-Type: multipart/x-mixed-replace; boundary=frame\r\n\r\n"

# 启动 GStreamer 管道(同时输出到 HTTP 和本地屏幕)
gst-launch-1.0 -q \
  v4l2src device=/dev/video0 ! \
  image/jpeg,width=1024,height=768,framerate=30/1 ! \
  tee name=t \
    # 分支 1:HTTP 流输出(保持现有逻辑)
    t. ! queue ! multipartmux boundary=frame ! fdsink fd=1 \
    # 分支 2:本地显示(解码 MJPG 后渲染)
    t. ! queue ! jpegdec ! videoconvert ! autovideosink sync=false

编辑 /lib/systemd/system/thttpd.service,确保启动命令正确, ExecStart=/usr/sbin/thttpd -C /etc/thttpd.conf -c cgi-bin/* -i /var/run/thttpd.pid 临时调试时可用下面 ExecStart=/usr/sbin/thttpd -C /etc/thttpd.conf -D -i /var/run/thttpd.pid

systemctl daemon-reload

systemctl restart thttpd

旧的资料,在下面

检查wifi的功能:

iw reg get
没设置时,创建nano /etc/systemd/system/set-regdomain.service
另外,wlan1是用来设置ap的,创建
nano /etc/udhcpd.conf

interface       wlan1
start           192.168.46.100
end             192.168.46.200
max_leases      10
opt router      192.168.46.30
opt lease       86400

nano /etc/systemd/system/udhcpd.service

[Unit]
Description=DHCP Server
After=network-online.target hostapd@wlan1.service
Wants=network-online.target

[Service]
ExecStart=/usr/sbin/udhcpd -f /etc/udhcpd.conf
Restart=on-failure
RestartSec=5s
StartLimitInterval=0

[Install]
WantedBy=multi-user.target


修改/etc/network/interfaces

auto wlan1
iface wlan1 inet static
        address 192.168.46.30
        netmask 255.255.255.0
        pre-up [ -d /proc/device-tree/wireless ]
        post-up systemctl start hostapd@wlan1.service
        post-up udhcpd /etc/udhcpd.conf
        pre-down systemctl stop hostapd@wlan1.service
        pre-down pkill udhcpd

固件加载错误时,查日志,改名

cp cyfmac55500-sdio.trxse cypress/cyfmac55500-sdio.digi,ccmp25-dvk.trxse

* 1、使用deyaio编译带有rtsp服务器支持的镜像,或是直接下载预编译的镜像,刷到开发板或设备中

要自己编译,可以在conf/local.conf中加入这些:

# 启用 gst-plugins-ugly 的 x264 支持
PACKAGECONFIG:append:pn-gstreamer1.0-plugins-ugly = " x264"

# 接受 GPL 许可证(如果需要)
LICENSE_FLAGS_ACCEPTED = "commercial_gpl"

# 在 local.conf 中添加
GLIBC_GENERATE_LOCALES = "zh_CN.UTF-8 en_GB.UTF-8 en_US.UTF-8"
IMAGE_LINGUAS = "zh-cn"
LOCALE_UTF8_ONLY="1"

IMAGE_INSTALL:append = " gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-rtsp-server ffmpeggstreamer1.0-libav gstreamer1.0-omx gstreamer1.0-plugins-base-apps x264 libjpeg-turbo libpng zlib nano tmux localedef glibc-utils v4l-utils"
IMAGE_INSTALL:remove = " cccs connectcore-demo-example"

nxp用了一个IMAGE_INSTALL:append = “ gst-variable-rtsp-server” ,原来的gstreamer1.0-rtsp-server不会被编译

2、连上并上电 若要支持10寸lvds屏,一并连接好,设置一下overlays,也可用默认hdmi显示屏或不接屏

连接摄像头,console线,上电进入linux

3、测试摄像头

先用v4l2-ctl –list-devices 列出所有,其中前两个是vpu和相关通道,最后一个是摄像头节点。

在显示屏上查看摄像头的视频,可以用

gst-launch-1.0 v4l2src device=/dev/video2 ! autovideoconvert ! autovideosink

查看摄像头支持的格式,用

v4l2-ctl --list-formats-ext -d /dev/video2

查看摄像头的默认输出格式,用

v4l2-ctl -d /dev/video2 --get-fmt-video

设置摄像头的格式,可以用下面命令,注意你要设置硬件所支持的范围

v4l2-ctl -d /dev/video2 --set-fmt-video=width=640,height=480,pixelformat=YUYV

手动测试:

pkill hostapd
pkill udhcpd
ip link set wlan1 down
ip link set wlan1 up

hostapd -B /etc/hostapd_wlan1.conf
udhcpd -f -v /etc/udhcpd.conf