常电 IPC 应用
本文将以 V821 PERF2 板为示例,搭配不同摄像头,演示搭建 Smart IPC 场景功能,包括:
项目 | 1M 场景 | 1M 插值 2M 场景 | 2M 场景 | 4M 场景 |
---|---|---|---|---|
摄像头 | GC1084 | GC1084 | GC2083 | GC4663 |
编码方式 | 离线编码 | 离线编码 | 离线编码 | 离线编码 |
主码流 | H.264,1280x720@30fps | H.264,1280x720@30fps 插值 1920x1080@30fps | H.264,1920x1080@30fps | H.264,2560x1440@15fps |
子码流 | H.264,640x480@30fps | H.264,640x480@30fps | H.264,640x480@30fps | H.264,640x480@15fps |
SD卡 | 录像 + 写卡 + 读卡 | 录像 + 写卡 + 读卡 | 录像 + 写卡 + 读卡 | 录像 + 写卡 + 读卡 |
WiFi RTSP 主码流图传 | √ | √ | √ | √ |
抓拍(JPEG编码) | √ | √ | √ | √ |
人形检测 + 主码流图传画框 | √ | √ | √ | √ |
音频 | 录制+播放 | 录制+播放 | 录制+播放 | 录制+播放 |
应用勾选
常电 IPC 场景使用的应用是 sample smartIPC_demo,运行 m menuconfig
然后勾选如下选项
Allwinner --->
eyesee-mpp --->
[*] select mpp sample
[*] mpp sample smartIPC_demo
编译后的可执行文件会存放在 platform/allwinner/eyesee-mpp/middleware/sun300iw1/sample/bin
文件夹中
将 Sample 复制到 TF 卡中,同时准备一个测试音频 test.wav
也放进 TF卡中。接入 V821 开发板使用。V821 在每次启动时都会尝试挂载 TF 卡到 /mnt/extsd
目录下。目前 SDK 未配置自动挂载功能。如果是启动后插入 TF 卡,需要手动挂载。
mount /dev/mmcblk0p1 /mnt/extsd
系统启动后可以用 mount
命令查看挂载情况
1M 单目场景
系统配置
(1)开启硬件人形缩放
由于场景需要音频+人形的全功能场景,需要配置SDK硬件人形缩放功能。使用 quick_config
选择选项 21,启用硬件人形缩放功能
(2)增加音频CMA内存
然后编辑设备树,增加 CMA 内存预留空间给音频使用,单目场景也可以释放一些内存池的内存出来给到CMA,前往修改设备树
device/config/chips/v821/configs/perf2/linux-5.4-ansc/board.dts
修改如下,CMA增加预留内存,内存池配置从20M改为15M:
reserved-memory {
size_pool {
reg = <0 0x82000000 0 0x00f00000>;
};
linux,cma {
size = <0x0 0x600000>;
};
};
heap_size_pool@0{
compatible = "allwinner,size_pool";
heap-name = "size_pool";
heap-id = <0x7>;
heap-base = <0x82000000>;
heap-size = <0x0f00000>;
heap-type = "ion_size_pool";
thrs = <512>;
sizes = <0 15360>;
fall_to_big_pool = <1>;
};
场景搭建
准备如下材料
- V821 PERF2 开发板
- GC1084 摄像头
- 排线(用于连接摄像头)
- TF 卡(用于存放应用)
- 串口线(用于调试)
- USB线(用于下载烧录)
- 路由器(提供网络连接)
- 天线(联网)
- 平板 / PC / 手机(用于查看码流)
修改配置文件
在运行前需要修改配置文件,开启相关配置,完整配置文件可以在本文附录查看。
(1)配置Wi-Fi 进行 RTSP 推流,配置音频测试。修改项如下
rtsp_net_type = 3
audio_test_enable = 1
(2)配置主码流为离线编码,分辨率1280x720
帧率 30fps
,rtsp id
为 0,码率为 1M,保存码流到 /mnt/extsd/mainStream
文件,单个文件时长 2
分钟,滚动保存 10 份码流。修改项如下
main_rtsp_id = 0
main_src_frame_rate = 30
main_encode_frame_rate = 30
main_online_en = 0
main_save_one_file_duration = 120
(3)配置子码流为离线编码,分辨率 640x480
帧率 30fps
,码率为 256K,配置10s 抓拍一次,启用人形检测,每 500ms 检测一次
main_2nd_enable = 1
main_2nd_src_frame_rate = 30
main_2nd_encode_frame_rate = 30
main_2nd_online_en = 0
main_2nd_take_picture = 1
main_2nd_pdet_enable = 1
main_2nd_pdet_run_interval = 15
连接网络
使用命令扫描 WIFI 网络
wifi -s
找到需要连接的 WIFI 网络后,使用命令连接
wifi -c <SSID> <PASSWORD>
连接成功后会显示 wlan0: link becomes ready
运行 Sample
执行命令
/mnt/extsd/sample_smartIPC_demo -path /mnt/extsd/sample_smartIPC_demo.conf
此时可以从喇叭中听到播放的音频,在手机上打开 VLC,输入开发板的地址,即可拉流查看,若出现人形则人形画框
1M 插值 2M 场景
在 1M 单目场景的 sample_smartIPC_demo.conf
基础上,修改如下参数:
audio_test_enable = 1
motionAlarm_on = 1
main_rtsp_id = 0
main_src_width = 1280
main_src_height = 720
main_src_frame_rate = 30
main_encode_width = 1920
main_encode_height = 1080
main_encode_frame_rate = 30
main_2nd_enable = 1
main_2nd_src_width = 640
main_2nd_src_height = 480
main_2nd_src_frame_rate = 30
main_2nd_encode_width = 640
main_2nd_encode_height = 480
main_2nd_encode_frame_rate = 30
main_2nd_take_picture = 1
main_2nd_pdet_enable = 1
运行 Sample
执行命令
/mnt/extsd/sample_smartIPC_demo -path /mnt/extsd/sample_smartIPC_demo.conf
2M 单目场景
切换摄像头到GC2083
在测试 720P 摄像头正常后,可以切换摄像头到 GC2083 测试 1080P 的常电 IPC 功能
(1)在 SDK 中运行 quick_config
设置摄像头为 GC2083,选择配置 3 即可
(2)配置分辨率为 1920x1080
,帧率为15fps,码率改为 2M 码率,同时子码流也需要修改帧率到30fps
main_src_width = 1920
main_src_height = 1080
main_src_frame_rate = 30
main_encode_width = 1920
main_encode_height = 1080
main_encode_frame_rate = 30
main_encode_bitrate = 2097152
main_2nd_src_frame_rate = 30
main_2nd_encode_frame_rate = 30
(3)然后编辑设备树,增加 CMA 内存预留空间给音频使用,单目场景也可以释放一些内存池的内存出来给到CMA,前往修改设备树
device/config/chips/v821/configs/perf2/linux-5.4-ansc/board.dts
修改如下,CMA增加预留内存,内存池配置从20M改为16M:
reserved-memory {
size_pool {
reg = <0 0x82000000 0 0x01000000>;
};
linux,cma {
size = <0x0 0x800000>;
};
};
heap_size_pool@0{
compatible = "allwinner,size_pool";
heap-name = "size_pool";
heap-id = <0x7>;
heap-base = <0x82000000>;
heap-size = <0x01000000>;
heap-type = "ion_size_pool";
thrs = <512>;
sizes = <0 16384>;
fall_to_big_pool = <1>;
};
运行 Sample
执行命令
/mnt/extsd/sample_smartIPC_demo -path /mnt/extsd/sample_smartIPC_demo.conf
此时可以从喇叭中听到播放的音频,在手机上打开 VLC,输入开发板的地址,即可拉流查看,若出现人形则人形画框
4M 单目场景
切换摄像头到GC4663
在测试 720P 摄像头正常后,可以切换摄像头到 GC4663 测试 1440P 的常电 IPC 功能
(1)在 SDK 中运行 quick_config
设置摄像头为 GC4663 ,选择配置 6 即可
(2)在 SDK 中运行 quick_config
执行内存优化功能,选择配置 19 即可
内存优化后请根据提示操作,重新配置环境变量
(3)修改配置文件,修改分辨率,帧率,与 ISP 模式,大分辨率拼接模式需要使用 NV21 数据格式。
完整配置文件可参考:
platform/allwinner/eyesee-mpp/middleware/sun300iw1/sample/sample_smartIPC_demo/sample_smartIPC_demo-4M-rtsp.conf
main_isp = 1
main_isp_algo_freq = 5
main_vipp = 1
main_src_width = 2560
main_src_height = 1440
main_pixel_format = "nv21"
main_src_frame_rate = 15
main_vi_stitch_mode = 1
main_encode_width = 2560
main_encode_height = 1440
main_encode_frame_rate = 15
main_encode_bitrate = 1572864
main_2nd_enable = 1
main_2nd_vipp = 5
main_2nd_vi_stitch_mode = 1
(4)开启人形DE缩放功能
运行 Sample
执行命令
/mnt/extsd/sample_smartIPC_demo -path /mnt/extsd/sample_smartIPC_demo-4M-rtsp.conf
此时可以从喇叭中听到播放的音频,在手机上打开 VLC,输入开发板的地址,即可拉流查看,若出现人形则人形画框
在PC端的VLC可以看到相关参数