跳到主要内容

常电 IPC 应用

本文将以 V821 PERF2 板为示例,搭配不同摄像头,演示搭建 Smart IPC 场景功能,包括:

项目1M 场景1M 插值 2M 场景2M 场景4M 场景
摄像头GC1084GC1084GC2083GC4663
编码方式离线编码离线编码离线编码离线编码
主码流H.264,1280x720@30fpsH.264,1280x720@30fps 插值 1920x1080@30fpsH.264,1920x1080@30fpsH.264,2560x1440@15fps
子码流H.264,640x480@30fpsH.264,640x480@30fpsH.264,640x480@30fpsH.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 文件夹中

image-20241126135448043

将 Sample 复制到 TF 卡中,同时准备一个测试音频 test.wav 也放进 TF卡中。接入 V821 开发板使用。V821 在每次启动时都会尝试挂载 TF 卡到 /mnt/extsd 目录下。目前 SDK 未配置自动挂载功能。如果是启动后插入 TF 卡,需要手动挂载。

mount /dev/mmcblk0p1 /mnt/extsd

系统启动后可以用 mount 命令查看挂载情况

image-20241126142557415

1M 单目场景

系统配置

(1)开启硬件人形缩放

由于场景需要音频+人形的全功能场景,需要配置SDK硬件人形缩放功能。使用 quick_config 选择选项 21,启用硬件人形缩放功能

image-20241127104005453

(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>;
};

image-20241127112738717

image-20241127112930134

场景搭建

准备如下材料

  • V821 PERF2 开发板
  • GC1084 摄像头
  • 排线(用于连接摄像头)
  • TF 卡(用于存放应用)
  • 串口线(用于调试)
  • USB线(用于下载烧录)
  • 路由器(提供网络连接)
  • 天线(联网)
  • 平板 / PC / 手机(用于查看码流)

image-20241126141137358

修改配置文件

在运行前需要修改配置文件,开启相关配置,完整配置文件可以在本文附录查看。

(1)配置Wi-Fi 进行 RTSP 推流,配置音频测试。修改项如下

rtsp_net_type = 3
audio_test_enable = 1

(2)配置主码流为离线编码,分辨率1280x720 帧率 30fpsrtsp 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

image-20241127153938735

运行 Sample

执行命令

/mnt/extsd/sample_smartIPC_demo -path /mnt/extsd/sample_smartIPC_demo.conf

此时可以从喇叭中听到播放的音频,在手机上打开 VLC,输入开发板的地址,即可拉流查看,若出现人形则人形画框

image-20241127163414472

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 即可

image-20241127163559243

(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,输入开发板的地址,即可拉流查看,若出现人形则人形画框

image-20241128114751845

4M 单目场景

切换摄像头到GC4663

在测试 720P 摄像头正常后,可以切换摄像头到 GC4663 测试 1440P 的常电 IPC 功能

(1)在 SDK 中运行 quick_config 设置摄像头为 GC4663 ,选择配置 6 即可

image-20250106142456263

(2)在 SDK 中运行 quick_config 执行内存优化功能,选择配置 19 即可

image-20250106142604391

内存优化后请根据提示操作,重新配置环境变量

image-20250106142704507

(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缩放功能

image-20250106153102983

运行 Sample

执行命令

/mnt/extsd/sample_smartIPC_demo -path /mnt/extsd/sample_smartIPC_demo-4M-rtsp.conf

此时可以从喇叭中听到播放的音频,在手机上打开 VLC,输入开发板的地址,即可拉流查看,若出现人形则人形画框

image-20250106155051269

在PC端的VLC可以看到相关参数

img