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 两个服务器软件。

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 参数与设备端配置完全匹配,即可实现跨网络的音视频通信。