1. 确认USB摄像头设备节点

主板接上USB摄像头后,使用以下命令查看USB摄像头节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
linaro@linaro-alip:/home$ grep '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video0/name:stream_cif_mipi_id0
/sys/class/video4linux/video10/name:rkcif_tools_id2
/sys/class/video4linux/video11/name:stream_cif_mipi_id0
/sys/class/video4linux/video12/name:stream_cif_mipi_id1
/sys/class/video4linux/video13/name:stream_cif_mipi_id2
……
/sys/class/video4linux/video35/name:rkisp-input-params
/sys/class/video4linux/video36/name:AC_2019053011080005: ZH-0309
/sys/class/video4linux/video37/name:AC_2019053011080005: ZH-0309
/sys/class/video4linux/video3/name:stream_cif_mipi_id3
/sys/class/video4linux/video4/name:rkcif_scale_ch0
/sys/class/video4linux/video5/name:rkcif_scale_ch1
/sys/class/video4linux/video6/name:rkcif_scale_ch2
/sys/class/video4linux/video7/name:rkcif_scale_ch3
/sys/class/video4linux/video8/name:rkcif_tools_id0
/sys/class/video4linux/video9/name:rkcif_tools_id1

可以看到USB摄像头对应的设备节点是/dev/video36。

2. 查看USB摄像头支持的图像格式

1
2
3
4
5
6
7
8
9
10
11
12
13
linaro@linaro-alip:/home$ v4l2-ctl -d /dev/video36 --get-fmt-video
Format Video Capture:
Width/Height : 1024/576
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 1180237
Colorspace : Default
Transfer Function : Default (maps to Rec. 709)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
linaro@linaro-alip:/home$

可以看到该USB摄像头支持MJPG格式,1024*576分辨率。

3. 查看gstreamer支持的mpp编/解码器

1
2
3
4
5
6
7
linaro@linaro-alip:/home$ gst-inspect-1.0 | grep mpp
typefindfunctions: audio/x-musepack: mpc, mpp, mp+
rockchipmpp: mppjpegdec: Rockchip's MPP JPEG image decoder
rockchipmpp: mppvideodec: Rockchip's MPP video decoder
rockchipmpp: mppjpegenc: Rockchip Mpp JPEG Encoder
rockchipmpp: mpph264enc: Rockchip Mpp H264 Encoder
linaro@linaro-alip:/home$

4. 推流到电脑上(USB摄像头)

RK3562主板将USB摄像头图像推流到电脑上显示。

4.1. 主板安装gst-rtsp插件

1
2
sudo apt-get update
sudo apt install -y gstreamer1.0-rtsp gstreamer1.0-libav

4.2. 主板安装mediamtx

mediamtx是一个rtsp server程序。

1
2
3
4
5
6
7
8
9
10
11
12
root@ido:/home/ido# tar -xvf mediamtx_v1.1.1_linux_arm64v8.tar.gz
mediamtx
mediamtx.yml
LICENSE
root@ido:/home/ido# ./mediamtx &
[1] 1315
root@ido:/home/ido# 2023/10/20 02:56:04 INF MediaMTX v1.1.1
2023/10/20 02:56:04 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2023/10/20 02:56:04 INF [RTMP] listener opened on :1935
2023/10/20 02:56:04 INF [HLS] listener opened on :8888
2023/10/20 02:56:04 INF [WebRTC] listener opened on :8889 (HTTP)
2023/10/20 02:56:04 INF [SRT] listener opened on :8890 (UDP)

mediamtx GitHub链接:https://github.com/bluenviron/mediamtx

4.3. 主板开始RTSP推流

查看主机的IP地址:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@linaro-alip:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.115 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::63fb:c213:5a00:4d94 prefixlen 64 scopeid 0x20<link>
ether 2a:8e:6d:fa:ec:ff txqueuelen 1000 (Ethernet)
RX packets 46105 bytes 29583475 (28.2 MiB)
RX errors 0 dropped 448 overruns 0 frame 0
TX packets 303547 bytes 399907829 (381.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 71


lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 284457 bytes 396474883 (378.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 284457 bytes 396474883 (378.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

使用gst-launch-1.0工具进行RTSP推流:

1
2
3
4
gst-launch-1.0 v4l2src device=/dev/video36 \
! image/jpeg ! avdec_mjpeg ! videoconvert \
! video/x-raw,height=576,width=1024,frame=30/1,format=NV12 ! mpph264enc \
! rtspclientsink location=rtsp://127.0.0.1:8554/stream

img

4.4. 电脑播放

电脑打开VLC软件,点击【媒体】-> 【打开网络串流】-> 【网络】,并输入主板RTSP推流地址的端口,然后点击播放:

(VLC软件下载地址:Downloads - VideoLAN

img

img

img

点击播放按钮后,即可看到USB摄像头的图像了:

img

5. 推流到电脑上(mipi摄像头)

主板配置了2路摄像头,一路为GC8034(J18,3264x2448),另一路为OV13855(J20,4224x3136),两路摄像头对应的设备节点如下:

GC8034 /dev/video22
OV13855 /dev/video29

5.1.1. 检测摄像头

1
2
3
4
5
6
root@linaro-alip:/# media-ctl -p -d /dev/media0 | grep gc8034
<- "m01_f_gc8034 2-0037":0 [ENABLED]
- entity 63: m01_f_gc8034 2-0037 (1 pad, 1 link)
root@linaro-alip:/# media-ctl -p -d /dev/media1 | grep ov13855
<- "m00_b_ov13855 1-0010":0 [ENABLED]
- entity 63: m00_b_ov13855 1-0010 (1 pad, 1 link)

5.1.2. 主板开始RTSP推流(OV13855)

使用gst-launch-1.0工具进行RTSP推流:

1
2
3
gst-launch-1.0 v4l2src device=/dev/video29 ! videoconvert\
! video/x-raw,height=1080,width=1920,frame=30/1,format=NV12\
! mpph264enc ! rtspclientsink location=rtsp://127.0.0.1:8554/stream

img

参考USB摄像头的步骤,推流至电脑播放:

img

5.1.3. 主板开始RTSP推流(GC8034)

使用gst-launch-1.0工具进行RTSP推流:

1
2
3
gst-launch-1.0 v4l2src device=/dev/video22 ! videoconvert \
! video/x-raw,height=1080,width=1920,frame=30/1,format=NV12\
! mpph264enc ! rtspclientsink location=rtsp://127.0.0.1:8554/stream

img

参考USB摄像头的步骤,推流至电脑播放:

img