C SDK
本文为您介绍Linux系统C语言环境集成SDK的方法。
前提条件
已开通音视频通信服务。具体操作,请参见开通服务。
公测说明
C语言SDK目前正在公测中,非正式商用版本。
使用限制
目前仅支持Linux_x86_64版本的设备端C语言SDK。
Linux系统C语言SDK仅支持音视频的传输,需要结合硬件实现采集和渲染模块功能。
步骤一:设备端集成SDK
步骤二:实现通信功能
说明
本文中的实现方法仅供参考,您可以根据实际业务需求进行开发。
在rtc_host_integrated_demo.c
文件中实现如下功能:
初始化SDK。
void *mqtt_handle = NULL, *rtc_handle = NULL; /* 建立MQTT连接,并开启保活线程和接收线程 */ res = demo_mqtt_start(&mqtt_handle); if (res < 0) { printf("demo_mqtt_start failed\n"); return -1; } /* 创建rtc实例并初始化默认参数 */ rtc_handle = aiot_rtc_init(); if (rtc_handle == NULL) { demo_mqtt_stop(&mqtt_handle); printf("aiot_rtc_init failed\n"); return -1; } /* 将rtc实例和mqtt实例进行关联,通过mqtt实例接收服务端发来的消息 */ res = aiot_rtc_setopt(rtc_handle, AIOT_RTCOPT_MQTT_HANDLE, mqtt_handle); /* 设置rtc下行消息处理的回调函数 */ res = aiot_rtc_setopt(rtc_handle, AIOT_RTCOPT_RECV_HANDLER, demo_rtc_recv_handler);
主叫方发起通话。
aiot_rtc_msg_t msg = {0}; msg.data.channel_request.product_key = "dwp2****GPq"; msg.data.channel_request.device_name = "7D5u8********YE2y66T"; res = aiot_rtc_launch_channel(rtc_handle, &msg);
被呼叫方加入通话。
/* TODO: SDK接收到rtc消息时调用数据处理回调函数 */ void demo_rtc_recv_handler(void *handle, const aiot_rtc_recv_t *packet, void *userdata) { switch (packet->type) { /* 被呼叫方收到服务端下行的通话邀请 */ case AIOT_RTCRECV_INVIATION: { printf("guest invitation now\r\n"); /* 保存参数 */ if (0 != app_param_init(packet->data.invitation.app_id, packet->data.invitation.user_id, packet->data.invitation.channelid, packet->data.invitation.nonce, packet->data.invitation.timestamp, packet->data.invitation.token, packet->data.invitation.gslb, DEMO_CFG_DISPLAYNAME)) { printf("init param failed\n"); g_start_rtc = 0; } else { aiot_rtc_msg_t msg = {0}; msg.data.guest_reply.action = ACCEPT; msg.data.guest_reply.channel_id = packet->data.invitation.channelid; msg.data.guest_reply.caller_iotid = packet->data.invitation.caller_iotid; aiot_rtc_guest_resonse(handle, &msg); if (msg.data.guest_reply.action == ACCEPT) { g_start_rtc = 1; /* 将初始化参数传递给rtc服务器 */ if (0 != alirtc_init(app_param.app_id, app_param.user_id, &app_param.event_handler, app_param.log_dir)) { printf("init session failed\n"); return -1; } /* 建立rtc连接 */ if (0 != alirtc_join_channel(&app_param.cfg, &app_param.options, &app_param)) { printf(" init session failed\n"); return -1; } } } } break; ....
主叫方加入频道。
/* TODO: SDK接收到rtc消息时调用数据处理回调函数 */ void demo_rtc_recv_handler(void *handle, const aiot_rtc_recv_t *packet, void *userdata) { switch (packet->type) { /* 主叫方发起的通话邀请得到服务端批准 */ case AIOT_RTCRECV_CHANNEL_REQUEST_GRANTED: { printf("host granted now\r\n"); if (0 != app_param_init(packet->data.invitation.app_id, packet->data.invitation.user_id, packet->data.invitation.channelid, packet->data.invitation.nonce, packet->data.invitation.timestamp, packet->data.invitation.token, packet->data.invitation.gslb, DEMO_CFG_DISPLAYNAME)) { printf("init param failed\n"); g_start_rtc = 0; } else { /* 将初始化参数传递给rtc服务器 */ if (0 != alirtc_init(app_param.app_id, app_param.user_id, &app_param.event_handler, app_param.log_dir)) { printf("init session failed\n"); return -1; } /* 建立rtc连接 */ if (0 != alirtc_join_channel(&app_param.cfg, &app_param.options, &app_param)) { printf(" init session failed\n"); return -1; } g_start_rtc = 1; } break; }
结束通话。
aiot_rtc_cancel_channel(rtc_handle, app_param.cfg.channelid);
步骤三:通信监测
在音视频通信增值服务的服务详情页面,查看通信监测信息,例如通话总时长、通话产生的时间等。