本文是 Juphoon RTOS RTC SDK 包的一部分。主要目标是帮助集成人员
了解基本流程,可以快速的集成并验证音视频功能。
- release_note.txt 版本的发布说明和历史记录
- C 语言头文件:
- C 静态库 libjrtc.a 所在目录:
- libs/unisoc_mocor_w317_debug W317 的可调试版本库
- libs/unisoc_mocor_w317_user W317 的正式版库
- readme.md 该 SDK 说明文档
因为音视频功能依赖硬件支持, 所以 **不提供模拟器版本的库**。
一对一语音呼叫 Juphoon Cloud 终端
- 配置全局环境
void jrtc_config(const char appKey[24], const char license[64], const char aesKey[16], const char tokens[128], const struct jrtc_handler_t *handler)
全局配置, 只需调用一次, 内部将复制所有参数
- 呼叫 Juphoon Cloud 终端
struct jrtc_t* jc =
jrtc_open (对方账号,
"", NULL, NULL);
void jrtc_activate(struct jrtc_t *jc, int devices)
开启发送状态.
struct jrtc_t * jrtc_open(const char channelId[64], const char uid[64], struct jrtc_image_t *video, struct jrtc_image_t *camera, struct jrtc_options_t *options)
分配通话资源并启动网络线程.
一对一视频呼叫 Juphoon Cloud 终端
- 呼叫 Juphoon Cloud 终端
_video.
width = _camera.width = 240;
_video.height = _camera.height = 240;
_video.fps = _camera.fps = 10;
_video.kbps = _camera.kbps = 120;
struct jrtc_t* jc =
jrtc_open (对方账号,
"", &_video, &_camera);
- 渲染 默认在当前窗口渲染,如需另起窗口承载渲染,可参考新建窗口如下
LOCAL MMI_RESULT_E MMI_VT_WinProc( MMI_WIN_ID_T win_id,
MMI_MESSAGE_ID_E msg_id,
DPARAM param )
{
MMI_RESULT_E result = MMI_RESULT_TRUE;
uint32 alpha = 0xFF;
GUI_COLOR_T color_key = MMI_BLACK_COLOR;
GUIBLOCK_TYPE_E block_type = GUIBLOCK_TYPE_OSD;
GUI_LCD_DEV_INFO lcd_dev_ptr = {0, 0};
GUI_RECT_T screen_rect = {0};
switch (msg_id)
{
case MSG_OPEN_WINDOW:
{
screen_rect = MMITHEME_GetFullScreenRect();
GUIBLOCK_SetType(alpha, color_key, block_type, &lcd_dev_ptr);
LCD_FillRect(&lcd_dev_ptr, screen_rect, color_key);
break;
}
case MSG_CLOSE_WINDOW:
{
GUIBLOCK_ResetType(block_type, &lcd_dev_ptr);
break;
}
case MSG_GET_FOCUS:
{
screen_rect = MMITHEME_GetFullScreenRect();
GUIBLOCK_SetType(alpha, color_key, block_type, &lcd_dev_ptr);
LCD_FillRect(&lcd_dev_ptr, screen_rect, color_key);
break;
}
case MSG_LOSE_FOCUS:
{
GUIBLOCK_ResetType(block_type, &lcd_dev_ptr);
break;
}
default:
result = MMI_RESULT_FALSE;
break;
}
return (result);
}
Unisoc(展锐)Mocor 平台必须的 PDP 流程
Mocor 平台上,创建 socket 需要一个整型值。
因此使用 jrtc_open 前必须对 _jrtc_net_id
赋值,它在 jrtc.h 中声明
unsigned _jrtc_net_id
展锐 Mocor 平台 需要设置PDP流程后获得的网络 ID
该值可以由 PDP 流程返回。简单的 PDP 代码流程,如下所示:
- 实现 PDP 流程的回调函数
static void lwm2m_socket_Handle_PdpMsg(MMIPDP_CNF_INFO_T *msg_ptr) {
int simindex = 0;
SCI_TRACE_LOW("[lwm2m socket demo debug ------------>]%s %d\n", __FUNCTION__, __LINE__);
if (PNULL == msg_ptr) {
SCI_TRACE_LOW("[lwm2m socket demo error]%s %d\n", __FUNCTION__, __LINE__);
return;
}
SCI_TRACE_LOW("[lwm2m socket demo debug]msg_ptr->msg_id = %d.", msg_ptr->msg_id);
if (msg_ptr->app_handler != MMI_MODULE_SAMPLE) {
SCI_TRACE_LOW("[lwm2m socket demo error]%s %d\n", __FUNCTION__, __LINE__);
return;
}
switch (msg_ptr->msg_id) {
case MMIPDP_ACTIVE_CNF:
if (MMIPDP_RESULT_SUCC == msg_ptr->result) {
SCI_TRACE_LOW("[lwm2m pdp active success, nsapi = %d]%s %d\n", msg_ptr->nsapi, __FUNCTION__, __LINE__);
}
else {
MMIAPIPDP_Deactive(MMI_MODULE_SAMPLE);
}
break;
case MMIPDP_DEACTIVE_CNF:
SCI_TRACE_LOW("[lwm2m socket demo debug deactive ok]%s %d\n", __FUNCTION__, __LINE__);
break;
case MMIPDP_DEACTIVE_IND:
SCI_TRACE_LOW("[lwm2m socket demo debug start deactive]%s %d\n", __FUNCTION__, __LINE__);
break;
default:
break;
}
SCI_TRACE_LOW("[lwm2m socket demo debug <------------]%s %d\n", __FUNCTION__, __LINE__);
}
- 激活 PDP 流程
int result = -1;
MMIPDP_ACTIVE_INFO_T active_info = { 0 };
char* apn_str = PNULL;
MMICONNECTION_LINKSETTING_DETAIL_T* linksetting = PNULL;
uint8 linkNum = MMIAPICONNECTION_GetLinkSettingNum(SIM_ID);
for (int i = 0; i < linkNum; i++) {
linksetting = PNULL;
linksetting = MMIAPICONNECTION_GetLinkSettingItemByIndex(SIM_ID, i);
if (PNULL != linksetting && 0 != linksetting->apn_len) {
apn_str = (char*)linksetting->apn;
if (PNULL != apn_str) break;
}
}
active_info.app_handler = MMI_MODULE_SAMPLE;
active_info.dual_sys = SIM_ID;
active_info.apn_ptr = apn_str;
active_info.user_name_ptr = NULL;
active_info.psw_ptr = NULL;
active_info.priority = 1;
active_info.ps_service_rat = MN_UNSPECIFIED;
active_info.ps_interface = MMIPDP_INTERFACE_GPRS;
active_info.handle_msg_callback = lwm2m_socket_Handle_PdpMsg;
active_info.ps_service_type = BROWSER_E;
active_info.storage = MN_GPRS_STORAGE_ALL;
MMIAPIPDP_Active(&active_info);
编译说明
因为各平台的编译系统完全不同,所以最好 **根据实际情况灵活实现**。
C 语言头文件可以直接放在当前集成代码所在目录。
C 静态库 libjrtc.a 则按各平台的默认情况举例如下:
- 将 libjrtc.a 放在 lib 目录
- ANTISW3.modules 中添加
LINKLIBLIST += lib/libjrtc.a