• 【技术分享】RK356X Ubuntu 推流USB摄像头


    本文适用与触觉智能所有RK356X ubuntu系统的主板。

    IDO-SBC3566基于瑞芯微RK3566研发的一款高性能低功耗的智能主板,采用四核A55,主频高达1.8GHz,专为个人移动互联网设备和AIOT设备而设计,内置了多种功能强大的嵌入式硬件引擎,为高端应用提供了优异的性能,支持几乎全格式的4K编解码,内置3DGPU,能够完全兼容OpenGL ES1.1/2.0/3.2、OpenCL2.0和Vulkan1.0.特殊的MMU2D硬件引擎,此外,凭借其强大的兼容性,可以轻松地转换基于TensorFlow/MXNet/PyTorch/Caffe等一系列框架的网络模型。

    支持Android,Linux,OpenHarmony,麒麟OS等多种操作系统,可广泛应用于平板、教育平板、带屏音箱、词典笔、云终端、视频会议系统等安卓/Linux类应用方案,以及其他带屏消费类、或轻量级AI应用场景。

    产品规格书查看深圳触觉智能官网-产品中心

    01 确认USB摄像头设备节点

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

    1. root@ido:~# v4l2-ctl --list-devices
    2. rkisp-statistics (platform: rkisp):
    3.         /dev/video7
    4.         /dev/video8
    5. rkisp_mainpath (platform:rkisp-vir0):
    6.         /dev/video0
    7.         /dev/video1
    8.         /dev/video2
    9.         /dev/video3
    10.         /dev/video4
    11.         /dev/video5
    12.         /dev/video6
    13.         /dev/media0
    14. AC_2019053011080005: ZH-0305 (usb-xhci-hcd.4.auto-1):
    15.         /dev/video9
    16.         /dev/video10
    17.         /dev/media1

    video9即为USB摄像头的设备节点。

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

    1. root@ido:~# v4l2-ctl -d /dev/video9 --list-formats-ext --all
    2. ...
    3. ...
    4. ...
    5. ioctl: VIDIOC_ENUM_FMT
    6.         Type: Video Capture
    7.         [0]: 'MJPG' (Motion-JPEG, compressed)
    8.                 Size: Discrete 1024x576
    9.                         Interval: Discrete 0.033s (30.000 fps)
    10.                 Size: Discrete 1280x720
    11.                         Interval: Discrete 0.033s (30.000 fps)
    12.                 Size: Discrete 896x504
    13.                         Interval: Discrete 0.033s (30.000 fps)
    14.                 Size: Discrete 800x600
    15.                         Interval: Discrete 0.033s (30.000 fps)
    16.                 Size: Discrete 640x480
    17.                         Interval: Discrete 0.033s (30.000 fps)
    18.         [1]: 'YUYV' (YUYV 4:2:2)
    19.                 Size: Discrete 1280x720
    20.                         Interval: Discrete 0.100s (10.000 fps)
    21.                 Size: Discrete 1024x576
    22.                         Interval: Discrete 0.067s (15.000 fps)
    23.                 Size: Discrete 896x504
    24.                         Interval: Discrete 0.100s (10.000 fps)
    25.                 Size: Discrete 800x600
    26.                         Interval: Discrete 0.067s (15.000 fps)
    27.                 Size: Discrete 640x480
    28.                         Interval: Discrete 0.033s (30.000 fps)

    可以看到,该USB摄像头支持MPEG格式最高1280x720@30FPS输出。

    03推流到电脑上

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

    3.1 主板安装gst-rtsp插件
     

    apt install gstreamer1.0-rtsp
    apt install gstreamer1.0-rtsp

    3.2 主板安装mediamtx

    mediamtx是一个rtsp server程序

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

    mediamtx安装包可到以下链接下载:
    链接:https://pan.baidu.com/s/1CXrk7eJIkUJKD4tK1SkFAA?pwd=1234

    提取码:1234

    3.3 主板开始RTSP推流

    查看主板的IP地址:

    1. root@ido:/home/ido# ifconfig
    2. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    3.         inet 192.168.1.196  netmask 255.255.255.0  broadcast 192.168.1.255
    4.         inet6 fe80::d079:b6fc:c367:fea6 prefixlen 64  scopeid 0x20<link>
    5.         ether 86:41:8a:06:1d:7c txqueuelen 1000  (Ethernet)
    6.         RX packets 52836  bytes 38891607 (38.8 MB)
    7.         RX errors 0  dropped 1  overruns 0  frame 0
    8.         TX packets 885065  bytes 1255645741 (1.2 GB)
    9.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    10.         device interrupt 40
    11. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    12.         inet 127.0.0.1  netmask 255.0.0.0
    13.         inet6 ::1  prefixlen 128  scopeid 0x10<host>
    14.         loop txqueuelen 1000  (Local Loopback)
    15.         RX packets 284667  bytes 313713612 (313.7 MB)
    16.         RX errors 0  dropped 0  overruns 0  frame 0
    17.         TX packets 284667  bytes 313713612 (313.7 MB)
    18.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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

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

    3.4 电脑播放

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


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

    04推流到RK356X主板

    RK356X主板A将USB摄像头推流到RK356X主板B上播放。

    4.1 主板A安装gst-rtsp插件

    sudo apt install gstreamer1.0-rtsp

    4.2 主板A安装mediamtx

    sudo apt install gstreamer1.0-rtsp

    4.2 主板A安装mediamtx

    mediamtx是一个rtsp server程序

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

    mediamtx安装包可到以下链接下载:
    链接:https://pan.baidu.com/s/1CXrk7eJIkUJKD4tK1SkFAA?pwd=1234

    提取码:1234

    4.3 主板A开始RTSP推流

    查看主板A的IP地址:

    1. root@ido:/home/ido# ifconfig
    2. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    3.         inet 192.168.1.196  netmask 255.255.255.0  broadcast 192.168.1.255
    4.         inet6 fe80::d079:b6fc:c367:fea6 prefixlen 64  scopeid 0x20<link>
    5.         ether 86:41:8a:06:1d:7c txqueuelen 1000  (Ethernet)
    6.         RX packets 52836  bytes 38891607 (38.8 MB)
    7.         RX errors 0  dropped 1  overruns 0  frame 0
    8.         TX packets 885065  bytes 1255645741 (1.2 GB)
    9.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    10.         device interrupt 40
    11. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    12.         inet 127.0.0.1  netmask 255.0.0.0
    13.         inet6 ::1  prefixlen 128  scopeid 0x10<host>
    14.         loop txqueuelen 1000  (Local Loopback)
    15.         RX packets 284667  bytes 313713612 (313.7 MB)
    16.         RX errors 0  dropped 0  overruns 0  frame 0
    17.         TX packets 284667  bytes 313713612 (313.7 MB)
    18.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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

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

    4.4 主板B拉流并播放

    1. root@ido:~# gst-launch-1.0 playbin uri=rtsp://192.168.1.196:8554/stream
    2. Setting pipeline to PAUSED ...
    3. Pipeline is live and does not need PREROLL ...
    4. Progress: (open) Opening Stream
    5. Progress: (connect) Connecting to rtsp://192.168.1.196:8554/stream
    6. Progress: (open) Retrieving server options
    7. Progress: (open) Retrieving media info
    8. Progress: (request) SETUP stream 0
    9. Progress: (open) Opened Stream
    10. Setting pipeline to PLAYING ...
    11. New clock: GstSystemClock
    12. Progress: (request) Sending PLAY request
    13. Progress: (request) Sending PLAY request
    14. Progress: (request) Sent PLAY request
    15. mpp[1359]: mpp_rt: NOT found ion allocator
    16. mpp[1359]: mpp_rt: found drm allocator
    17. mpp[1359]: mpp_info: mpp version: 49f29006 author: Jeffy Chen 2021-08-04 [drm]: Add mmap flag detection
    18. mpp[1359]: hal_h264d_vdpu34x: control info: fmt 7, w 1280, h 720
    19. mpp[1359]: mpp_buf_slot: set frame info: w 1280 h 720 hor 1280 ver 720
    20. mpp[1359]: mpp_dec: setting default w 1280 h 720 h_str 1280 v_str 720
    21. mpp[1359]: h264d_api: is_avcC=1

  • 相关阅读:
    Linux下通过bonding技术实现网络负载均衡
    226. 翻转二叉树
    Springboot支付宝沙箱支付---完整详细步骤
    Spring Boot自动配置
    搬砖日记:关于html的编写规范方式
    算法leetcode|11. 盛最多水的容器(rust重拳出击)
    Debian12换镜像源
    2022全国政治会议
    JSON的MIME媒体类型是application/json
    JavaSE&Java8 时间日期API + 使用心得
  • 原文地址:https://blog.csdn.net/Industio_CSDN/article/details/133949760