全志开发板
登录信息
- 本地 IP:
192.168.0.104 - SSH 用户名:
root - SSH 密码:
root - 登录命令:
ssh root@192.168.0.104
注意:此文件包含明文密码,不要上传到公开仓库或发送给无关人员。
外设
- USB 摄像头:
VGA Webcam: HGX Camera - 驱动:Linux UVC (
uvcvideo) - 设备节点:
/dev/video0 - 支持格式:
- YUYV:640×480 / 480×480,标称 25 fps
- MJPEG:640×480 / 480×480,标称 25 fps
- 摄像头没有枚举出 USB 麦克风
学习目标
- 全志平台音视频开发
- 摄像头采集、编码、传输与播放
- 网络摄像头 / 视频监控应用
2026-08-16 现场探测
SSH 已成功登录,当前环境如下:
- 开发板:野火鲁班猫 A1(设备树
sun50iw9-lubancat-a1.dtb) - SoC:全志 H616(
allwinner,h616/sun50iw9) - CPU:4 核 Cortex-A53,最高 1.512 GHz,AArch64
- 内存:约 4 GB
- 系统:Ubuntu 22.04.4 LTS
- 内核:Linux 5.4.125,全志 BSP 内核
- 视频硬件设备:存在
/dev/cedar_dev - 已安装:
v4l-utils、GStreamer 核心库 - 尚未安装:FFmpeg、GStreamer 命令行工具和常用插件
- ALSA 当前只有板载音频设备,没有可直接使用的真实录音输入;学习音频采集时可加一个 USB 麦克风或 USB 声卡
摄像头已通过 v4l2-ctl 连续抓取 50 帧,数据流可以正常启动。虽然设备标称 25 fps,本次实测约 13~14 fps;后续需要从光照/自动曝光、USB 链路和驱动参数三个方向确认瓶颈。
常用检查命令:
v4l2-ctl --all -d /dev/video0
v4l2-ctl --list-formats-ext -d /dev/video0
v4l2-ctl -d /dev/video0 \
--set-fmt-video=width=640,height=480,pixelformat=MJPG \
--set-parm=25 --stream-mmap=3 --stream-count=100 --stream-to=/dev/null
推荐学习路线
第一阶段:先弄懂 Linux 通用音视频接口
先不要碰全志私有库,掌握这些概念:
- V4L2 的设备、格式、分辨率、帧率和 controls。
- YUYV、NV12、MJPEG、H.264 的区别;原始帧与压缩码流的区别。
REQBUFS、mmap、QBUF/DQBUF、poll,以及每帧的时间戳。- ALSA 的声卡、PCM、采样率、采样格式、period/buffer。
第一个小项目:用 v4l2-ctl 抓一张 MJPEG 图片;然后用 C 写一个 V4L2 mmap 程序,连续取帧并统计真实 fps。
第二阶段:跑通第一条网络视频链路
建议安装:
apt update
apt install ffmpeg gstreamer1.0-tools \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
优先使用摄像头原生 MJPEG,不做二次编码。开发板发送 RTP/JPEG(把接收端 IP 换成电脑 IP):
gst-launch-1.0 -v v4l2src device=/dev/video0 ! \
'image/jpeg,width=640,height=480,framerate=25/1' ! \
rtpjpegpay ! udpsink host=192.168.0.103 port=5000
电脑接收:
gst-launch-1.0 -v udpsrc port=5000 \
caps='application/x-rtp,media=video,encoding-name=JPEG,payload=26' ! \
rtpjpegdepay ! jpegdec ! autovideosink
这个阶段重点理解 RTP 包、UDP 丢包、延迟和接收端抖动缓冲,不要急着做网页播放器。
第三阶段:H.264、RTSP 与浏览器观看
先用软件 x264 在 640×480 下学习编码参数:码率、GOP、关键帧、低延迟和码率控制。然后引入 MediaMTX 一类现成服务器:
/dev/video0 -> V4L2 -> H.264 编码 -> RTSP/MediaMTX
-> VLC
-> WebRTC/HLS -> 浏览器
RTSP 适合 VLC/监控客户端,但浏览器一般不能直接播放 RTSP;需要转换为 WebRTC 或 HLS。把“采集/编码”和“流媒体服务器”拆开学习,比从零实现 RTSP 服务器更合适。
第四阶段:用 C/C++ 做应用
建议按这个顺序写:
- V4L2 mmap 抓帧器。
libjpeg-turbo解 MJPEG,或直接转交压缩帧。- GStreamer
appsink/appsrc接入自己的业务代码。 - 增加断线重连、帧率统计、队列上限和丢帧策略。
- 接入 USB 麦克风,用 ALSA 采集 PCM,再编码 Opus/AAC。
- 用 PTS 做音画同步;不要依靠“每秒固定多少帧”推算时间。
开发依赖可按需安装:
apt install build-essential cmake pkg-config libv4l-dev libturbojpeg0-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libasound2-dev
第五阶段:全志 H616 硬件编解码
当前 /dev/cedar_dev 只说明 BSP 内核提供了 Video Engine 接口;系统里没有发现配套的 CedarX/VideoEngine 用户态库,不能仅凭这个设备节点直接让 Ubuntu 自带 FFmpeg 硬编。
这一步应使用与鲁班猫 A1 当前 BSP/内核匹配的野火或全志 SDK,重点找这些内容:
- CedarX / VideoEngine / VEncoder 示例和库
- H.264 编码示例、DMA/物理连续内存分配方式
- 摄像头帧到编码器的零拷贝路径
- 编码器输出 Annex-B H.264 后交给 GStreamer/FFmpeg/MediaMTX 推流
不要混用其他 H616 镜像里的二进制库,也不要把主线 Linux 的 Cedrus 解码接口和厂商 BSP 的 CedarX 接口当成同一套 API。先确认官方 SDK 与 5.4.125 内核、AArch64 用户态完全匹配。
建议的练手项目
按完成顺序:
camera-info:打印摄像头能力、格式和 controls。v4l2-capture:mmap 取帧并计算 fps,保存单帧 JPEG。rtp-mjpeg-camera:把原生 MJPEG 通过 RTP 发到电脑。rtsp-h264-camera:软件 H.264 + MediaMTX,VLC 可观看。av-camera:USB 麦克风 + 摄像头,完成时间戳和音画同步。h616-hw-camera:把软件 H.264 替换为全志硬件编码,比较 CPU、延迟、功耗和画质。