From: CCC <2393524978@qq.com> Date: Tue, 27 Jun 2023 02:50:16 +0000 (+0800) Subject: jrtc video call X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=0b8af334dcbca04eed0423a1b4e013cbb093bf00;p=mirrors%2FASR3603_Z5.git jrtc video call --- diff --git a/2.sdk/external/third-party-libs/juphoon/jrtc.h b/2.sdk/external/third-party-libs/juphoon/jrtc.h deleted file mode 100644 index 91a2e587..00000000 --- a/2.sdk/external/third-party-libs/juphoon/jrtc.h +++ /dev/null @@ -1,202 +0,0 @@ -#ifndef __JRTC_H__ -#define __JRTC_H__ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * 呼叫流程: 假设 `设备A' 呼叫 `设备B' - * - * 启动连接流程 - * - A 需要 "某种推送机制" (长连接,推送方式) 通知到B, - * - A 打开通信(jrtc_open), 初始状态为 JRTC_OPENED - * - B 收到 "该种推送通知" 后也打开通信(jrtc_open), 初始状态为 JRTC_OPENED - * - A 主动激活媒体设备,以便自动接听 - * jrtc_activate(jc, JRTC_AUDIO|JRTC_CAMERA) - * - * 成功建立网络通道 - * - A 和 B 在服务器上对呼后连通, 通话状态都变为 JRTC_JOINED - * - A 可以开始渲染镜头预览(渲染流程) - * - * 被叫流程 - * - B 收到A的音视频数据, 通话状态变为 JRTC_TALKING - * - B 可以开始渲染对端视频(渲染流程) - * - B 弹出接听提示, 若用户选择"拒接"则进入挂断流程 - * - B 在界面选择接听后, 也激活媒体设备 - * jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA) - * - * 主叫流程 - * - A 在收到音视频数据后, 状态变为JRTC_TALKING - * - A 也开始渲染对端视频(渲染流程) - * - * 挂断流程 - * - A 调用 jrtc_close 主动挂断 - * - B 通话状态将变为 JRTC_LEAVING 或 JRTC_CLOSED - * - 通过 jrtc_error() 可以获取挂断的原因(出错值) - * - B 调用 jrtc_close 结束通话 - * - * 最简函数流程 - * - jrtc_config(...); // 配置环境,只需调用一次 - * - jc = jrtc_open(...);// 打开通话,返回对象 - * - jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA);//激活设备 - * - 在 UI 线程,更新视频或预览,参考下面的`渲染流程' - * - jrtc_close(jc, JRTC_EBYE); //主动挂断, 并且等待网络线程结束 - * - * 收到来电中断的处理 - * - jrtc_close(jc, JRTC_EAUDIOCALL);//结束通话,等待网络线程结束 - */ - -/** 通话状态 */ -enum jrtc_state -{ - JRTC_CLOSED=0,/*< 初始状态 */ - JRTC_LEAVING, /*< jrtc_leave 或内部出错后的状态 */ - JRTC_OPENED, /*< 调用jrtc_open 后的状态 */ - JRTC_JOINING, /*< 加入中的状态 */ - JRTC_JOINED, /*< 成功加入会话 */ - JRTC_TALKING, /*< 收到媒体后的状态 */ -}; - -/** 通话错误值 */ -enum jrtc_error -{ - JRTC_ENIL = 0, /* unknown error */ - JRTC_EPERM = 1, /* Operation not permitted */ - JRTC_ENONET = 64, /* Machine is not on the network */ - JRTC_EPROTO = 71, /* Protocol error */ - JRTC_EMSGSIZE = 90, /* Message too long */ - JRTC_ECONNRESET=104, /* Connection reset by peer */ - JRTC_ETIMEDOUT =101, /* Connection timed out */ - JRTC_ECONNREFUSED=111,/* Connection refused or closed */ - JRTC_EDECLINE = 129, /* Peer decline the call */ - JRTC_EINVOKETIMEOUT = 130, /* IoTUnit invoke timeout */ - JRTC_ECALLSERVERERROR = 131, /* Call server error */ - JRTC_EROOMNOTFND = 132, /* Room or callee not found */ - JRTC_ECALLTIMEOUT = 133, /* Call timeout */ - JRTC_ENOTREG = 134, /* device id not registered */ - JRTC_ELOGIN = 135, /* device id login failed */ - JRTC_EAUDIOCALL = 252, /* external audio call, don't close audio deivce */ - JRTC_EAUDIO=253, /* Audio device error */ - JRTC_EVIDEO=254, /* Video device error */ - JRTC_EBYE = 255, /* Success, Closed by peer leave */ -}; - -/** 通话中的媒体设备 */ -enum jrtc_device -{ - JRTC_SPEAKER = 1, - JRTC_MICROPHONE = 2, - JRTC_CAMERA = 4, - JRTC_AUDIO = 3, -}; - -/** 渲染流程: - * jrtc_image_t* img 代表 jrtc_open 中传入 video 或 camera - * - 检测当前为通话状态, 否则无须渲染 - * if (jrtc_state(jc) < JRTC_JOINED) break; - * - * - 内部自动更新图像: - * if (img->get == img->put) { - * '更新图像内容: 即对img中的data, width, height, format 赋值' - * img->put++;//增加写计数 - * } - * - * - 上层UI线程(App 界面层)负责绘制图像: - * if (img->get != img->put) { - * '界面绘制操作: 即使用img中的data, 更新界面控件' - * img->get = img->put;//增加读计数 - * } - * 在 ASR原生 LittlevGL 的 lv_watch 界面中, 界面绘制操作: - * // yuv420_2_rgb565 是内置的格式转换函数 - * //extern void yuv420_2_rgb565(int width, int height, const unsigned char *src, unsigned short *dst, unsigned semi); - * yuv420_2_rgb565(img->width, img->height, img->data, img_dsc->data, img->format); - * lv_img_set_src(img, img_dsc);//img, img_dsc 都是界面中的相应UI控件, - * - * - * 在jrtc_open()中用于设置建议值, 通话过程中用于获取图像数据. - * 例如, 希望接收和发送都是176x144 8帧/秒, 120 kbps 的音视频通话: - * static struct jrtc_image_t video, camera; - * video.width = camera.width = 176; - * video.height = camera.height = 144; - * video.fps = camera.fps = 8; - * video.kbps = camera.kbps = 120; - * //注意,以上仅是建议值, 在最终接通时, 由服务器决定实际值 - * - * jc = jrtc_open(roomid, 0, &video, &camera); - */ -struct jrtc_image_t -{ - void* data; - unsigned short width, height, kbps; - char fps; - char format;/*< 0: I420; 1: NV12 */ - volatile char put, get; -}; - -/** 当前的版本号 */ -#define JRTC_VERTION "1.4.0" - -/** 配置全局参数,只需调用一次. - * 注意: 内部直接引用地址, 由外部保证内存的有效性. - * - * @param[in] appkey 当前APP特有的标识, 需向Juphoon申请获得 - * @param[in] uid 账户 - * @param[in] srvURL 服务器地址 - * @param[in] key 通讯密钥, 必须与appkey匹配, 需向Juphoon申请或注册 - */ -void jrtc_config (const char* appkey, const char* uid, const char* srvURL, const char key[16]); - -/** 分配通话资源并启动网络线程 - * 注意: - * - 内部直接引用地址,由外部保证内存的有效性 - * - 内部设备初始没有激活,后续需要调如下开启 - * jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA) - * - * ticket 作为通话ID, 唯一标识每次通话: - * - 不能包含JSON需转义的字符 - * - 每次通话, 要使用不同的 ticket,(随机产生或向服务器申请) - * - A 呼叫前,申请获得 ticket - * - A 需要通"某种推送机制"(长连接,推送方式) 将 ticket 通知到B - * - A 和B 对呼时, 必须使用相同的ticket, 以便服务器精确标识会话 - * - * @param[in] roomid 加入的房间号(对方账户) - * @param[in] ticket 用于房间的hash值,可通过其他路径获得,默认为NULL,仅用于调试. - * @param[in] video 期望接收的视频尺寸和帧速,码率. 若 NULL,则不接收视频 - * @param[in] camera 用于预览图像,建议的发送尺寸和帧速,码率. 若 NULL, 则不使用镜头. - * 最终的视频尺寸和镜头的尺寸,都由服务器协商决定. - */ -struct jrtc_t* jrtc_open (const char* roomid, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera); - -/** 释放通话资源,并等待网络线程结束. - * - * @param[in] err 主动挂断为 JRTC_EBYE - * 但当语音电话中断时, 须设置为JRTC_EAUDIOCALL, - * 其他未知情况,可设置为 JRTC_ENIL(不修改挂断原因) - */ -void jrtc_close (struct jrtc_t* jc, enum jrtc_error err); - -/** 动态设置前后镜头 - * @param[in] camera 0为后镜头,1是前镜头 - */ -void jrtc_set_camera (struct jrtc_t* jc, int camera); - -/** 激活设备, 开启发送能力 - * @param[in] devices jrtc_device 的集合 - */ -void jrtc_activate (struct jrtc_t* jc, int devices); - -/** 禁活设备, 关闭发送能力 - * @param[in] devices jrtc_device 的集合 - */ -void jrtc_deactivate (struct jrtc_t* jc, int devices); - -/** 返回通话状态 */ -enum jrtc_state jrtc_state (const struct jrtc_t *jc); - -/** 返回最近的出错值 */ -enum jrtc_error jrtc_error (const struct jrtc_t *jc); - -#ifdef __cplusplus -} -#endif -#endif