同时适用于FriendlyDesktop与FriendlyCore系统的功能特性
编辑教程同时适用于FriendlyDesktop与FriendlyCore系统的功能特性
Linux下使用摄像头(MIPI接口摄像头OV13850与OV4689,USB摄像头罗技C920)
摄像头连接方法: 摄像头可以连接在MIPI接口,如下图所示:
为了方便测试摄像头,我们提供了脚本可以在命令行测试摄像头的拍照和录像功能。
你可以用以下命令更新这个脚本到最新版本:
cd /tmp/
git clone https://github.com/friendlyarm/gst-camera-sh.git
sudo cp gst-camera-sh/*.sh /usr/bin/
共有以下三个脚本:
gst-camera.sh: | 单个摄像头的预览、拍照与录像 |
---|---|
dual-camera.sh: | 预览两个摄像头 |
stop-gst-camera.sh: | 停止预览 |
gst-camera.sh 参数说明
参数 | 功能 |
---|---|
--index或-i | 选择要使用的摄像头的序号,可选值为0和1,当同时连接两个摄像头时,指定为1表示要操作第二个摄像头 |
--action或-a | 指定命令要执行的动作,可选参数为: preview、photo和video,分别对应预览、拍照和录像 |
--output或-o | 指定输出的文件名,用于拍照和录像时指定输出文件名 |
--verbose或-v | 指定为yes时,会输出调用gst-launch-1.0命令的完整命令行 |
-x | 使用rkximagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统 |
-g | 使用glimagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统 |
-k | 使用kmssink插件,预览图像会直接输出到屏幕,适用于FriendlyCore系统 |
脚本gst-camera.sh会自动识别OV13850/OV4689/罗技C920摄像头,并传递合适的参数给gst-launch-1.0。
脚本使用方法
预览图像
gst-camera.sh --action preview
拍照
用命令拍照一张照片,存储为文件 1.jpg:
gst-camera.sh -a photo -o 1.jpg
录像并预览
用以下命令启动录像,存储为视频文件 1.ts,录像时使用了硬件编码:
gst-camera.sh --action video -output 1.ts
显示完整的命令
加入 --verbose yes 的参数,会显示最终的 gsteamer 命令,例如:
gst-camera.sh --action video --output 1.ts --verbose yes
你会得到以下完整的 gsteamer 命令,这对你开发会有帮助:
gst-launch-1.0 rkisp num-buffers=512 device=/dev/video0 io-mode=1 ! \
video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! \
mpph264enc ! queue ! h264parse ! mpegtsmux ! \
filesink location=/tmp/camera-record.ts
预览双摄像头 连接两个mipi摄像头,或者一个mipi摄像头加一个usb摄像头(仅测试过:罗技C920 pro),调用以下命令即可同时预览两个摄像头的图像:
dual-camera.sh
注:建议在FriendlyDesktop下测试。
gst-launch-1.0命令行解析
在FriendlyDesktop下预览摄像头命令如下:
gst-launch-1.0 rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! rkximagesink
重要参数说明:
参数 | 说明 |
---|---|
device | 用于预览的device (selfpath) 是 /dev/video1, 用于拍照的device (mainpath) 是 /dev/video0, 如果是多路摄像头,则另一路预览(selfpath)是 /dev/video5, 另一路拍照 (mainpath)是 /dev/video4, USB摄像头一般都是 /dev/video8 |
io-mode | 值为1表示是memory map模式,值为4表示是dmabuf模式,一般预览用io-mode=4,拍照用io-mode=1, 在OpenCV里访问用io-mode=4 |
rkximagesink/glimagesink/kmssink | 在X-Windows窗口中输出mipi摄像头图像时指定为rkximagesink (适用于FriendlyDesktop),如果是USB摄像头则指定为glimagesink,FriendlyCore下只能使用kmssink |
在OpenCV中访问摄像头
访问MIPI摄像头:
cv.VideoCapture('rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)
访问USB摄像头:
cv.VideoCapture('rkisp device=/dev/video8 io-mode=4 ! videoconvert ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)
详情请参考这里的示例代码:https://github.com/friendlyarm/install-opencv-on-friendlycore/tree/rk3399/examples
摄像头应用教程: 推流至直播平台
请查看这篇文档: How to setup RTMP server on NanoPC-T4/zh
参考资源
http://blog.iotwrt.com/media/2017/10/01/camera/ http://www.360doc.com/content/16/1019/17/496343_599664458.shtml
Docker的安装与使用
安装Docker
使用以下命令安装:
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce-cli_19.03.2~3-0~ubuntu-bionic_arm64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce_19.03.2~3-0~ubuntu-bionic_arm64.deb
sudo dpkg -i containerd.io_1.2.6-3_arm64.deb
sudo dpkg -i docker-ce-cli_19.03.2~3-0~ubuntu-bionic_arm64.deb
sudo dpkg -i docker-ce_19.03.2~3-0~ubuntu-bionic_arm64.deb
验证Docker的安装
用Docker创建并运行一个debian镜像:
git clone https://github.com/friendlyarm/debian-jessie-arm-docker
cd debian-jessie-arm-docker
./rebuild-image.sh
./run.sh
Linux下使用ffmpeg进行硬件加速的视频解码
FriendlyCore和FriendlyDesktop系统均预装了 ffmpeg 的可执行文件、静态库和头文件,位于 /usr/ffmpeg-rkmp目录。
ffmpeg支持RockChip MPP视频硬件解码器,但并不支持硬编码,具体信息可参考:https://trac.ffmpeg.org/wiki/HWAccelIntro
测试4K视频的解码性能:
/usr/ffmpeg-rkmp/bin/ffmpeg -benchmark -loglevel 48 -vcodec h264_rkmpp -i 4K-Chimei-inn-60mbps.mp4 -map 0:v:0 -f null -
结果如下图所示,平均 45 FPS:
要播放视频,可以使用基于 ffmpeg 实现的播放器 mpv,上面测试所用的4K视频可在网盘的 test-video 目录找到,网盘地址:http://dl.friendlyarm.com/nanopct4。
使用NVME SSD高速固态硬盘
为了方便操作,请在终端上先用以下命令切换为 root 用户:
su -
root用户的默认密码是fa。
检查是否检测到了SSD
root@FriendlyELEC:~# cat /proc/partitions
major minor #blocks name
1 0 4096 ram0
259 0 125034840 nvme0n1
看到有 nvme0n1 设备的节点,说明SSD已经成功被识别到了。
给SSD重新分区
为了让 Linux 系统能成功能挂载,我们选择给 SSD 重新分区,下面的命令会自动将 SSD 整个空间分成一个区:
(echo o; echo n; echo p; echo 1; echo ""; echo "";
echo w; echo q) | fdisk /dev/nvme0n1
如果要分多个区,可以用 fdisk /dev/nvme0n1 命令,参考 fdisk的文档来操作。
将分区格式化为 ext4 格式
上一个步骤分区完成后,我们再用 cat /proc/partitions 命令看一下当前的分区信息,在下面的结果中,可用于存储数据的分区设备名为 /dev/nvme0n1p1 :
root@FriendlyELEC:~# cat /proc/partitions
major minor #blocks name
1 0 4096 ram0
259 0 125034840 nvme0n1
259 2 125033816 nvme0n1p1
下面的命令将该分区格式化为 ext4 格式:
mkfs.ext4 /dev/nvme0n1p1
开机时自动挂载 SSD 分区
首先,我们需要了解分区的Block ID,用blkid查看:
blkid /dev/nvme0n1p1
/dev/nvme0n1p1: UUID="d15c4bbf-a6c3-486f-8f81-35a8dbd46057" TYPE="ext4" PARTUUID="887628f0-01"
然后需要把 Block ID 添加到 /etc/fstab 文件中去,格式为
UUID=<Block ID> /media/nvme ext4 defaults 0 0
其中,<Block ID>请替换成 blkid 得到的UUID结果,为了挂载本例中使用的SSD,/etc/fstab内容如下所示:
UUID=d15c4bbf-a6c3-486f-8f81-35a8dbd46057 /media/nvme ext4 defaults 0 0
我们会将SSD挂载到 /media/nvme目录,这个目录默认是不存在的,我们用以下命令手动创建它,并设置为普通用户可以读写:
mkdir /media/nvme
chmod 777 /media/nvme
接下来就可以输入mount命令,测试一下是否能正常挂载了:
mount /media/nvme
接下来我们关机测试一下,看下次开机是否会自动挂载:
reboot
重新开机,应该能看到已经挂载的SSD分区了。
设置调速散热风扇
散热风扇使用PWM来实现自动调速,会根据当前的CPU温度来决定风扇的开关,以及风扇的转速,如果当前的CPU温度不高,风扇会被关闭或者以较低转速旋转 (减少不必要的环境噪声),
如果你想让风扇立即开始工作,可以用以下命令让CPU立即以高负载运行,以便观察风扇的工作状态:
cpuburn
如果你想改变风扇的调速行为,请修改以下文件
/usr/bin/start-rk3399-pwm-fan.sh
需要禁止开机自动启动风扇(比如你需要连接其他的PWM设备),请输入以下命令:
systemctl stop pwm-fan
systemctl disable pwm-fan
或者删除下面这两个文件:
/etc/systemd/system/pwm-fan.service
/etc/systemd/system/multi-user.target.wants/pwm-fan.service
Linux下使用4G EC20模块
请参考: How to use 4G Module on NanoPC-T4/zh
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间