Skip to content

自定义MQTT的连接问题 #106

@Chujie-cre

Description

@Chujie-cre

Checklist

  • Checked the issue tracker for similar issues to ensure this is not a duplicate
  • Read the documentation to confirm the issue is not addressed there and your configuration is set correctly
  • Tested with the latest version to ensure the issue hasn't been fixed

How often does this bug occurs?

always

Expected behavior

尊敬的Mr.Tempotian

我遇到了设备与后端的WebRTC连接问题,请求得到您的帮助!

Actual behavior (suspected bug)

我采用的是MQTT信令,跟后端处于同一个局域网、公网、网段
但日志却:在发送完sdpOffer并接收来自后端的answer并处理后,进行ICE协商交换握手,明明日志显示的已经完全按照流程在运行,但始终都无法连接,百思不得其解,只能向您请教!!
具体日志如下:(每次从状态”3“直接跳到状态”7“失败

Error logs or terminal output

I (11667) WEBRTC_PEER: ========================================
I (11677) WEBRTC_PEER:   初始化WebRTC Peer
I (11677) WEBRTC_PEER: ========================================
I (11697) MQTT_SIGNALING: 遗嘱消息: {"deviceId":"98A316CB1A14","type":"sfu","method":"probate","result":"probate"}
I (11717) MQTT_SIGNALING: MQTT客户端启动成功,正在连接服务器...
E (16717) MQTT_SIGNALING: 等待MQTT连接超时,1秒后重试...
I (19797) MQTT_SIGNALING: MQTT连接成功
I (19807) MQTT_SIGNALING: 已发送订阅请求, 主题: /public/striped-kind-tiger/result/98A316CB1A14, msg_id=35222
I (21817) MQTT_SIGNALING: 遗嘱消息: {"deviceId":"98A316CB1A14","type":"sfu","method":"probate","result":"probate"}
I (21817) MQTT_SIGNALING: MQTT客户端启动成功,正在连接服务器...
I (22697) MQTT_SIGNALING: MQTT连接成功
I (22697) MQTT_SIGNALING: 已发送订阅请求, 主题: /public/striped-kind-tiger/result/98A316CB1A14, msg_id=9602
I (22787) MQTT_SIGNALING: 订阅成功,连接建立完成!msg_id=9602
I (22797) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (22797) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (22797) MQTT_SIGNALING: 数据长度: 99
I (22807) MQTT_SIGNALING: 数据内容: {deviceId=98A316CB1A14, type=sfu, method=groupId, userId=98A316CB1A14, id=joinRoom, groupId=100000}
I (22817) MQTT_SIGNALING: 消息处理任务启动
I (22817) MQTT_SIGNALING: =============================
I (22817) MQTT_SIGNALING: 已注册消息接收回调
I (22827) MQTT_SIGNALING: 调用消息回调函数...
I (22837) WEBRTC_PEER: ✅ 获取到GroupId: 100000
I (22837) WEBRTC_PEER: ✅ WebRTC Peer初始化完成
I (22847) WEBRTC_PEER: ========================================
I (22847) WEBRTC_PEER:   启动WebRTC连接流程
I (22857) WEBRTC_PEER: ========================================
I (22857) WEBRTC_PEER: 【步骤1】请求获取GroupId
I (22867) MQTT_SIGNALING: 消息已发布, msg_id=21747
I (22867) WEBRTC_PEER: 已发送GroupId请求
I (22877) WEBRTC_PEER: 【步骤2】配置STUN服务器并创建Peer连接
I (22877) DTLS: Init SRTP OK
I (23077) MQTT_SIGNALING: 消息发布成功, msg_id=21747
I (23087) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23087) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23087) MQTT_SIGNALING: 数据长度: 99
I (23087) MQTT_SIGNALING: 数据内容: {deviceId=98A316CB1A14, type=sfu, method=groupId, userId=98A316CB1A14, id=joinRoom, groupId=100000}
I (23107) MQTT_SIGNALING: =============================
I (23107) MQTT_SIGNALING: 调用消息回调函数...
I (23347) WEBRTC_PEER: ✅ Peer连接已创建
I (23347) WEBRTC_PEER: Peer主循环任务启动
I (23347) WEBRTC_PEER: Peer状态变化: 2
I (23347) WEBRTC_PEER: ✅ 已请求生成SDP Offer
I (23357) AGENT: Start agent as Controlling
I (23357) PEER_DEF: Start DTLS role as 1
I (23357) WEBRTC_PEER: 【步骤4】生成SDP Offer,发送到后端
I (23367) MQTT_SIGNALING: 消息已发布, msg_id=55307
I (23367) WEBRTC_PEER: ✅ SDP Offer已发送
I (23377) WEBRTC_PEER: 📡 等待SDP交换和ICE连接...
I (23377) main_app: ========================================
I (23387) main_app:   系统初始化完成,进入运行状态
I (23387) main_app:   WebRTC正在建立连接...
I (23397) main_app: ========================================
I (23587) MQTT_SIGNALING: 消息发布成功, msg_id=55307
I (23597) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23597) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23597) MQTT_SIGNALING: 数据长度: 613
I (23597) MQTT_SIGNALING: 数据内容: {"deviceId":"98A316CB1A14","type":"answer","result":"v=0\r\no=- 3969675584 3969675584 IN IP4 0.0.0.0\r\ns=Kurento Media Server\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=msid-semantic: esp-webrtc\r\na=group:BUNDLE 0\r\nm=audio 1 UDP/TLS/RTP/SAVP 111\r\na=sendrecv\r\na=mid:0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-mux\r\na=setup:active\r\na=ssrc:4275300280 cname:user2058707793@host-27ea0cb8\r\na=ice-ufrag:ogbh\r\na=ice-pwd:p3+peJay/fxaFmn7GFwPPx\r\na=fingerprint:sha-256 06:F0:90:99:95:D6:8E:9B:68:4D:DE:8D:00:A2:A3:CF:E6:7B:8A:FB:45:33:BD:67:A0:DF:98:12:BA:24:EB:66\r\n","method":"sdpAnswer"}
E (23607) AGENT: 0 Not found for bind remote 192.168.66.99:11242
I (23657) MQTT_SIGNALING: =============================
I (23667) MQTT_SIGNALING: 调用消息回调函数...
I (23667) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23667) WEBRTC_PEER: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
I (23677) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23687) WEBRTC_PEER: 📥 收到SDP Answer
I (23697) MQTT_SIGNALING: 数据长度: 263
I (23697) WEBRTC_PEER: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
I (23707) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:13 2 UDP 2015364350 fe80::dcde:d9ff:fecc:d23 21568 typ host","method":"candidate","candidate":"candidate:13 2 UDP 2015364350 fe80::dcde:d9ff:fecc:d23 21568 typ host","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (23717) WEBRTC_PEER: 【步骤5】处理SDP Answer
I (23747) MQTT_SIGNALING: =============================
I (23747) PEER_DEF: Get peer role 0
I (23757) PEER_DEF: A SRC: 4275300280
I (23757) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23767) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23767) MQTT_SIGNALING: 数据长度: 265
I (23777) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:10 2 UDP 2015364094 fe80::a4a3:5c78:38bf:30ff 53266 typ host","method":"candidate","candidate":"candidate:10 2 UDP 2015364094 fe80::a4a3:5c78:38bf:30ff 53266 typ host","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (23797) MQTT_SIGNALING: =============================
I (23807) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23817) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23817) MQTT_SIGNALING: 数据长度: 287
I (23827) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:11 2 TCP 1015022590 fe80::a4a3:5c78:38bf:30ff 9 typ host tcptype active","method":"candidate","candidate":"candidate:11 2 TCP 1015022590 fe80::a4a3:5c78:38bf:30ff 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
SDP not contain candidate continue
I (23847) MQTT_SIGNALING: =============================
I (23857) WEBRTC_PEER: ✅ SDP Answer已发送到esp_peer处理
I (23867) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23867) MQTT_SIGNALING: 调用消息回调函数...
I (23867) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23887) MQTT_SIGNALING: 数据长度: 265
I (23877) WEBRTC_PEER: 🔹 收到后端ICE: candidate:13 2 UDP 2015364350 fe80::dcde:d9ff:fecc...
I (23887) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:9 2 TCP 1010828030 172.18.0.1 39140 typ host tcptype passive","method":"candidate","candidate":"candidate:9 2 TCP 1010828030 172.18.0.1 39140 typ host tcptype passive","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (23917) MQTT_SIGNALING: =============================
I (23927) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23937) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23937) MQTT_SIGNALING: 数据长度: 297
I (23947) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:18 2 TCP 1010828798 fe80::b41b:6bff:febb:9529 64878 typ host tcptype passive","method":"candidate","candidate":"candidate:18 2 TCP 1010828798 fe80::b41b:6bff:febb:9529 64878 typ host tcptype passive","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (23977) MQTT_SIGNALING: =============================
I (23977) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (23987) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (23987) MQTT_SIGNALING: 数据长度: 255
I (23997) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:8 2 TCP 1015022334 172.18.0.1 9 typ host tcptype active","method":"candidate","candidate":"candidate:8 2 TCP 1015022334 172.18.0.1 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (24007) WEBRTC_PEER: Peer状态变化: 3
I (24017) MQTT_SIGNALING: =============================
I (24027) main_app: 🔗 ICE配对中...
I (24027) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (24037) MQTT_SIGNALING: 调用消息回调函数...
I (24037) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (24047) WEBRTC_PEER: 🔹 收到后端ICE: candidate:10 2 UDP 2015364094 fe80::a4a3:5c78:38bf...
I (24047) MQTT_SIGNALING: 数据长度: 265
I (24057) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:16 2 UDP 2015364606 fe80::b41b:6bff:febb:9529 23368 typ host","method":"candidate","candidate":"candidate:16 2 UDP 2015364606 fe80::b41b:6bff:febb:9529 23368 typ host","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (24087) MQTT_SIGNALING: =============================
I (24177) WEBRTC_PEER: Peer状态变化: 3
I (24177) WEBRTC_PEER: Peer状态变化: 7
I (24177) main_app: 🔗 ICE配对中...
E (24177) main_app: ❌ WebRTC连接失败
I (24177) MQTT_SIGNALING: 调用消息回调函数...
I (24177) WEBRTC_PEER: 🔹 收到后端ICE: candidate:11 2 TCP 1015022590 fe80::a4a3:5c78:38bf...
I (24207) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (24207) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (24207) MQTT_SIGNALING: 数据长度: 265
I (24207) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:6 2 TCP 1010827774 172.19.0.1 64618 typ host tcptype passive","method":"candidate","candidate":"candidate:6 2 TCP 1010827774 172.19.0.1 64618 typ host tcptype passive","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (24237) MQTT_SIGNALING: =============================
I (24247) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (24247) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (24257) MQTT_SIGNALING: 数据长度: 255
I (24257) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:5 2 TCP 1015022078 172.19.0.1 9 typ host tcptype active","method":"candidate","candidate":"candidate:5 2 TCP 1015022078 172.19.0.1 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (24287) MQTT_SIGNALING: =============================
E (24287) AGENT: 0 Not found for bind remote 192.168.66.99:11242
I (24297) MQTT_SIGNALING: ====== 接收到MQTT消息 ======
I (24297) WEBRTC_PEER: Peer状态变化: 3
I (24297) MQTT_SIGNALING: 主题: /public/striped-kind-tiger/result/98A316CB1A14
I (24307) main_app: 🔗 ICE配对中...
I (24307) MQTT_SIGNALING: 数据长度: 233
I (24317) MQTT_SIGNALING: 调用消息回调函数...
I (24317) MQTT_SIGNALING: 数据内容: {"type":"candidate","result":"candidate:7 2 UDP 2015363838 172.18.0.1 19307 typ host","method":"candidate","candidate":"candidate:7 2 UDP 2015363838 172.18.0.1 19307 typ host","sdpMid":"0","sdpMLineIndex":0,"deviceId":"98A316CB1A14"}
I (24327) WEBRTC_PEER: 🔹 收到后端ICE: candidate:9 2 TCP 1010828030 172.18.0.1 39140 typ ...
I (24347) MQTT_SIGNALING: =============================
I (24467) WEBRTC_PEER: Peer状态变化: 3
I (24467) WEBRTC_PEER: Peer状态变化: 7
I (24467) main_app: 🔗 ICE配对中...
E (24467) main_app: ❌ WebRTC连接失败
I (24467) MQTT_SIGNALING: 调用消息回调函数...
I (24467) WEBRTC_PEER: 🔹 收到后端ICE: candidate:18 2 TCP 1010828798 fe80::b41b:6bff:febb...
I (24637) WEBRTC_PEER: Peer状态变化: 3
I (24637) main_app: 🔗 ICE配对中...
I (24637) MQTT_SIGNALING: 调用消息回调函数...
I (24637) WEBRTC_PEER: 🔹 收到后端ICE: candidate:8 2 TCP 1015022334 172.18.0.1 9 typ host...
I (24807) WEBRTC_PEER: Peer状态变化: 3
I (24807) WEBRTC_PEER: Peer状态变化: 7
I (24807) main_app: 🔗 ICE配对中...
E (24807) main_app: ❌ WebRTC连接失败
I (24807) MQTT_SIGNALING: 调用消息回调函数...
I (24807) WEBRTC_PEER: 🔹 收到后端ICE: candidate:16 2 UDP 2015364606 fe80::b41b:6bff:febb...
I (24977) WEBRTC_PEER: Peer状态变化: 3
I (24977) main_app: 🔗 ICE配对中...
I (24977) MQTT_SIGNALING: 调用消息回调函数...
I (24977) WEBRTC_PEER: 🔹 收到后端ICE: candidate:6 2 TCP 1010827774 172.19.0.1 64618 typ ...
E (25117) AGENT: 0 Not found for bind remote 192.168.66.99:11242
I (25117) WEBRTC_PEER: Peer状态变化: 3
I (25117) WEBRTC_PEER: Peer状态变化: 7
I (25127) main_app: 🔗 ICE配对中...
E (25127) main_app: ❌ WebRTC连接失败
I (25127) MQTT_SIGNALING: 调用消息回调函数...
I (25137) WEBRTC_PEER: 🔹 收到后端ICE: candidate:5 2 TCP 1015022078 172.19.0.1 9 typ host...
I (25297) WEBRTC_PEER: Peer状态变化: 3
I (25297) main_app: 🔗 ICE配对中...
I (25297) MQTT_SIGNALING: 调用消息回调函数...
I (25297) WEBRTC_PEER: 🔹 收到后端ICE: candidate:7 2 UDP 2015363838 172.18.0.1 19307 typ ...
I (25467) AGENT: 0 Add remote type:1 172.18.0.1:19307
0 Sorted pair 0 type: 1 local:192.168.66.117:55577 Remote:172.18.0.1:19307
I (25467) WEBRTC_PEER: Peer状态变化: 3
I (25467) AGENT: 0 Send binding request (cand:0) local:192.168.66.117:55577 remote:172.18.0.1:19307 id:7043bfa4398150e937521657
I (25467) main_app: 🔗 ICE配对中...
I (25987) AGENT: 0 Send binding request (cand:0) local:192.168.66.117:55577 remote:172.18.0.1:19307 id:4d9a2fdb76c3625e55075020
I (26497) AGENT: 0 Send binding request (cand:0) local:192.168.66.117:55577 remote:172.18.0.1:19307 id:329b54fb381fc0385378d5a8
I (27007) AGENT: 0 Send binding request (cand:0) local:192.168.66.117:55577 remote:172.18.0.1:19307 id:76e5004e797d87a62756c714
I (27517) AGENT: 0 Send binding request (cand:0) local:192.168.66.117:55577 remote:172.18.0.1:19307 id:4c598d93643bd7252b449456
I (28027) AGENT: 0 Send binding request (cand:0) local:192.168.66.117:55577 remote:172.18.0.1:19307 id:671286247899e644088232df
I (28537) WEBRTC_PEER: Peer状态变化: 7
E (28537) main_app: ❌ WebRTC连接失败

Steps to reproduce the behavior

1、获取群组id,将id嵌入在sdp和ice的json字段中
2、发送sdpOffer
3、收到来自后端的answer和ice候选
4、丢给API处理answer,并完成ice交换
5、尝试连接到后端返回的内网地址
6、连接失败!❌

Project release version

esp_peer v1.2.6

System architecture

Intel/AMD 64-bit (modern PC, older Mac)

Operating system

Windows

Operating system version

windows 10

Shell

CMD

Additional context

主入口:

 ESP_LOGI(TAG, "【II】初始化并启动WebRTC");
    
    // 配置WebRTC Peer
    webrtc_peer_cfg_t peer_cfg = {
        .state_callback = webrtc_state_callback,
        .audio_callback = webrtc_audio_callback,
        .ctx = NULL,
    };
    
    // 初始化WebRTC Peer(会自动连接MQTT)
    esp_err_t ret = webrtc_peer_init(&peer_cfg);
    if (ret != ESP_OK) {
        ESP_LOGE(TAG, "WebRTC Peer初始化失败,程序终止");
        while (1) {
            vTaskDelay(pdMS_TO_TICKS(5000));
        }
    }
    
    // 启动WebRTC流程(自动处理GroupId、SDP交换、ICE协商)
    ret = webrtc_peer_start();
    if (ret != ESP_OK) {
        ESP_LOGE(TAG, "WebRTC连接流程失败");
    }

WebRTC核心逻辑:

static void mqtt_message_handler(const char *topic, const char *data, int data_len)
{
    if (!running) {
        return;
    }

    // 1. 如果还没有groupId,先解析groupId
    if (!group_id_received) {
        parse_group_id_response(data, data_len);
        return;
    }

    // 2. 处理SDP Answer
    if (strstr(data, "\"type\":\"answer\"") != NULL) {
        ESP_LOGI(TAG, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
        ESP_LOGI(TAG, "📥 收到SDP Answer");
        ESP_LOGI(TAG, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
        handle_sdp_answer(data, data_len);
        return;
    }

    // 3. 处理ICE Candidate
    if (strstr(data, "\"type\":\"candidate\"") != NULL) {
        handle_ice_candidate(data, data_len);
        return;
    }
}

整体连接流程

esp_err_t webrtc_peer_start(void)
{
    ESP_LOGI(TAG, "========================================");
    ESP_LOGI(TAG, "  启动WebRTC连接流程");
    ESP_LOGI(TAG, "========================================");

    // 【步骤1】请求获取GroupId
    ESP_LOGI(TAG, "【步骤1】请求获取GroupId");
    cJSON *root = cJSON_CreateObject();
    if (root == NULL) {
        return ESP_ERR_NO_MEM;
    }

    cJSON_AddStringToObject(root, "deviceId", device_mac);
    cJSON_AddStringToObject(root, "type", "sfu");
    cJSON_AddStringToObject(root, "method", "groupId");

    char *json_str = cJSON_PrintUnformatted(root);
    cJSON_Delete(root);

    if (json_str) {
        mqtt_signaling_publish((uint8_t *)json_str, strlen(json_str));
        ESP_LOGI(TAG, "已发送GroupId请求");
        free(json_str);
    }

    // 等待GroupId响应(最多30秒)
    EventBits_t bits = xEventGroupWaitBits(event_group, GROUPID_RECEIVED_BIT, 
                                           pdTRUE, pdFALSE, pdMS_TO_TICKS(30000));
    if (!(bits & GROUPID_RECEIVED_BIT)) {
        ESP_LOGE(TAG, "❌ 等待GroupId超时");
        return ESP_FAIL;
    }

    // 【步骤2】配置并创建esp_peer
    ESP_LOGI(TAG, "【步骤2】配置STUN服务器并创建Peer连接");
    
    // 重新启用STUN服务器,帮助建立连接
    esp_peer_ice_server_cfg_t ice_server = {
        .stun_url = STUN_SERVER_URL,
        .user = NULL,
        .psw = NULL,
    };
    
    esp_peer_audio_stream_info_t audio_info = {
        .codec = AUDIO_CODEC,
        .sample_rate = AUDIO_SAMPLE_RATE,
        .channel = AUDIO_CHANNEL,
    };
    
    esp_peer_cfg_t peer_cfg = {
        .server_lists = &ice_server,
        .server_num = 1,
        .role = ESP_PEER_ROLE_CONTROLLING,  // 作为发起方
        .ice_trans_policy = ESP_PEER_ICE_TRANS_POLICY_ALL,
        .audio_info = audio_info,
        .video_info = {0},
        .audio_dir = ESP_PEER_MEDIA_DIR_SEND_RECV,
        .video_dir = ESP_PEER_MEDIA_DIR_NONE,
        .no_auto_reconnect = false,
        .enable_data_channel = false,
        .ctx = NULL,
        .on_state = peer_state_callback,
        .on_msg = peer_msg_callback,
        .on_audio_data = peer_audio_data_callback,
        .on_video_data = NULL,
        .on_audio_info = NULL,
        .on_video_info = NULL,
    };
    
    int ret = esp_peer_open(&peer_cfg, esp_peer_get_default_impl(), &peer_handle);
    if (ret != ESP_PEER_ERR_NONE) {
        ESP_LOGE(TAG, "创建Peer失败: %d", ret);
        return ESP_FAIL;
    }
    
    ESP_LOGI(TAG, "✅ Peer连接已创建");
    
    // 创建主循环任务
    xTaskCreate(peer_main_loop_task, "peer_loop", 10 * 1024, NULL, 5, NULL);
    
    // 【步骤3】创建新连接(触发SDP生成)
    ret = esp_peer_new_connection(peer_handle);
    if (ret != ESP_PEER_ERR_NONE) {
        ESP_LOGE(TAG, "创建新连接失败: %d", ret);
        return ESP_FAIL;
    }
    
    ESP_LOGI(TAG, "✅ 已请求生成SDP Offer");
    ESP_LOGI(TAG, "📡 等待SDP交换和ICE连接...");
    
    return ESP_OK;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions