metaIPC2 on FreeRTOS: 开发实战指南 (BK7258/BK7259)

metaIPC2 on FreeRTOS: 开发实战指南 (BK7258/BK7259)

1. 概述

本指南详细阐述了metaIPC2的设备端(BK7258/BK7259)/云端/客户端整体解决方案的系统集成与开发流程。

  • 性能实测:在 BK7258 平台上,实测传输 H.264 视频流至浏览器的端到端延迟稳定在 100-150ms 区间。全面优化后,延迟有望进一步降低至 60-120ms。

  • 硬件差异:鉴于 BK7259 具备更高的硬件配置,其预期性能表现将优于 BK7258。

  • 编解码支持

    • 视频:H.264

    • 音频:PCMA / PCMU

2. 环境准备与代码获取

2.1 代码获取

2.1.1 设备端
  • SDK 仓库(请根据芯片选择对应分支/版本):

    • BK7258 推荐版本:3.1.9

    • BK7259 推荐版本:4.0

    bash

    # 克隆 SDK git clone https://gitlab.bekencorp.com/armino/bk_avdk_smp.git # 或镜像 git clone https://github.com/bekencorp/bk_avdk_smp.git
  • yangipc 解决方案

    bash

    git clone https://github.com/metartc/bk_solution_yangipc.git # 或 Gitee 镜像 git clone https://gitee.com/metartc/bk_solution_yangipc.git
2.1.2 云端

云端需安装mosquittocoturn两个服务器软件。

  • mosquitto
    Download | Eclipse Mosquitto

  • coturn
    https://github.com/coturn/coturn

2.1.3 客户端

客户端源码获取地址

bash

git clone https://github.com/metartc/yangipcclient.git # 或 Gitee 镜像 git clone https://gitee.com/metartc/yangipcclient.git

2.2 编译

2.2.1 设备端

首先,参考bk_solution_yangipc目录下的README.md打上sdk_patch目录内的补丁。然后执行以下编译步骤:

bash

# 创建项目目录并进入 SDK mkdir -p ~/armino && cd ~/armino cd bk_avdk_smp/bk_solution_yangipc/projects/yangipc # 清理并编译 make clean make bk7258 # 若编译 BK7259,请使用对应的 make target

编译产物可用于烧录到对应芯片。

2.2.2 云端
2.2.2.1 coturn

bash

cd coturn ./configure make -j8 sudo cp ./examples/etc/turnserver.conf /usr/local/etc/ # 后台运行 turnserver -c /usr/local/etc/turnserver.conf -v

核心配置/usr/local/etc/turnserver.conf

# 监听端口 STUN/TURN listening-port=3478 # 加密 TURNS 端口 tls-listening-port=5349 # 内网网卡 IP listening-ip=0.0.0.0 relay-ip=服务器内网IP # 云服务器必填公网 IP external-ip=服务器公网IP # 中继媒体端口范围 min-port=49152 max-port=65535 # 域名标识(可自定义) realm=metartc.cn # 自定义账号密码 user=test:123456

请将服务器内网IP服务器公网IP替换为实际地址,并根据需要修改账号密码。

2.2.2.2 mosquitto

编译(需开启 SSL、WebSocket 和 systemd 支持):

bash

cd mosquitto make WITH_SSL=yes WITH_WEBSOCKETS=yes WITH_SYSTEMD=yes

运行:

bash

cd mosquitto/bin #后台运行 ./mosquitto -c mosquitto.conf &

确保配置文件mosquitto.conf已正确设置,允许设备与客户端的 MQTT 连接。

2.2.3 客户端

客户端支持多平台,各平台工程目录及构建方式如下:

  • 移动端

    • iOS:Xcode 工程

    • Android:Android Studio 工程

    • 跨平台框架:

      • Flutter (Android/iOS)

      • React Native (Android/iOS)

      • Uniapp (Android/iOS)

  • 桌面端

    • Windows:Qt 工程

    • macOS:Qt 工程

    • Linux:Qt 工程

客户端的具体编译与运行细节,请参考对应的官方文档或本站相关文档。

3. 参数配置

3.1 设备端

ap_main.c中实现配置初始化函数yang_init_ipcConfig

void yang_init_ipcConfig(YangIpcConfig* config) { // 音频方向:0 单向直播,1 对讲 config->audioDirection = 1; // 视频参数 config->width = 640; config->height = 480; config->fps = 30; // 设备名称(客户端需用相同名称才能联通) strcpy(config->deviceName, "test1001"); // coturn 配置 config->icePort = 3478; strcpy(config->iceServerIP, "192.168.0.104"); strcpy(config->iceUserName, "metartc"); strcpy(config->icePassword, "metartc"); // MQTT 配置 config->mqttPort = 1883; strcpy(config->mqttServerIP, "192.168.0.104"); memset(config->mqttUserName, 0, sizeof(config->mqttUserName)); memset(config->mqttPassword, 0, sizeof(config->mqttPassword)); }

连接 Wi-Fi 网络:

yangipc_wifi_sta_connect("ssid", "password");

启动 yangipc 服务(通过命令行或系统命令)

bash

ap_cmd yang_ipc

注意:实际部署时,请将 IP 地址、端口、账号密码、Wi-Fi 凭据和设备名称替换为真实环境的值。

3.2 客户端

3.2.1 浏览器

使用index_mqtt_hd.html页面,配置关键参数:

  • 第 107 行附近,设置发布主题与设备名称一致:

    javascript var yang_pubTopic = "test1001";
  • 同时配置 MQTT 服务器参数和 ICE 服务器 (coturn) 参数,确保与设备端保持一致。

打开网页即可建立连接,接收视频流。

3.2.2 原生客户端

客户端通过YangIpcPlayer类进行连接和播放。

cpp

class YangIpcPlayer; // 启动 MQTT 连接,传入设备名称(与设备端 deviceName 一致) startMqtt((char*)"test1001"); // 设置 ICE 服务器 (coturn) void setIceServer(char* ip, int32_t port, char* username, char* password); // 设置 MQTT 服务器 void setMqttServer(bool isTls, char* ip, int32_t port, char* username, char* password);

按顺序调用上述接口,确保 ICE 和 MQTT 参数与设备端配置完全匹配,即可实现跨网络的音视频通信。