安逸是什么意思| 西安古代叫什么名字| 软化血管吃什么药| 肝功能2项是指什么| 口业是什么意思| 玉米须有什么作用| 螺旋杆菌是什么病| 东道主是什么意思| 入驻是什么意思| 家里起火代表什么预兆| 治疗心率过快用什么药效果好| 破伤风什么情况需要打| 为什么会有白带| 谅解什么意思| 本垒打是什么意思| 长痣是什么原因| 泪崩是什么意思| 什么食物胆固醇含量高| juicy什么意思| 贾宝玉大名叫什么| 经血发黑是什么原因| 产检是什么意思| 康复治疗学是做什么的| hbc是什么意思| 狮子吃什么食物| 龙虎山是什么地貌| 什么是国企| 藤椒是什么| 梦见海龟是什么意思| 什么是拉拉| 胰岛素高是什么原因| 什么人适合喝三七粉| 怀孕16周要做什么检查| 提成是什么意思| 乳房结节是什么原因引起的| 肚脐眼左右两边疼是什么原因| 完美收官是什么意思| 力排众议是什么意思| 铁剂不能与什么同服| 广肚是什么| 近视眼镜是什么镜| 什么是生物制剂药| 为什么床上有蚂蚁| 小肠与什么相表里| 海葵是什么| 肤专家抑菌软膏主要治什么| 扭曲是什么意思| 下午3点到4点是什么时辰| 什么是血压高| 次第花开是什么意思| 不是你撞的为什么要扶| 柏油是什么| 咳嗽吃什么食物好得快| 右侧肋骨下方是什么器官| 丁香是什么| 肌酸激酶偏高说明什么| 黄瓜苦是什么原因| 股市量比什么意思| 热忱是什么意思| 大校相当于政府什么官| 回应是什么意思| 不苟言笑的苟是什么意思| luxury什么牌子| 时间像什么| 二十岁是什么之年| 大便前面硬后面稀是什么原因| 曹操为什么杀华佗| 碳13和碳14有什么区别| 属猪的本命佛是什么佛| 寡妇年是什么意思| 阿斯利康是什么药| fob价格是什么意思| 邓字五行属什么| 为什么性生活会出血| 梦见煮鱼有什么预兆| 什么样的男人不能嫁| 功名利禄是什么意思| nsaid是什么药| 印度属于什么亚| 失眠什么原因| 脸色发黑发暗是什么原因| 右边脑袋疼是什么原因| 肚脐眼左边是什么部位| 抵抗力差吃什么| 吊销是什么意思| 白茶泡出来是什么颜色| 洁身自爱是什么意思| 清真什么意思| 什么是老赖| 水瓶座是什么性格| 葡萄糖高是什么意思| 衣衫褴褛是什么意思| 血压低压低是什么原因| 1995年的猪五行属什么| 什么叫多动症| 梦见掉牙齿是什么征兆| 遗留是什么意思| 维生素e吃多了有什么副作用| 鸡叫是什么时辰| 突然眩晕是什么原因| 姊是什么意思| 这是什么虫子| 白带异常是什么原因| 香波是什么| 拉格啤酒是什么意思| 胃烧灼感吃什么药| alt医学上是什么意思| 下眼袋发青是什么原因| 舌头锯齿状是什么原因| 二甲双胍什么时候吃| 乳房发痒什么原因| 中午12点半是什么时辰| vogue什么意思| 眩晕是什么原因引起的| 骨密度z值是什么意思| 男人蛋皮痒用什么药| lover是什么意思| 耳朵后面疼是什么原因| 属猪的五行属什么| 肾结石用什么药最好| 为什么嘴巴老是干| 蓁是什么意思| 苦瓜为什么是苦的| 旅行是什么意思| 为什么长火疖子| logo中文是什么意思| 性别是什么意思| 胳膊上的肌肉叫什么| 下午三点到四点是什么时辰| 2333是什么意思啊| 兽医是什么专业| 怀孕胎盘低有什么影响| 做梦梦见牛是什么意思| 双肾结晶是什么意思| 肠梗阻是什么症状| 肠胃炎引起的发烧吃什么药| 9月6日什么星座| 疝气是什么病| 黑色的蛇是什么蛇| 至字五行属什么| 侧着睡觉有什么坏处| 一九八七年属什么生肖| 集体户口和个人户口有什么区别| 市政协常委是什么级别| 老人脚背肿是什么原因| 航班预警是什么意思| 肛门周围潮湿瘙痒是什么原因| 八月六号是什么星座| 13颗珠子的手串什么意思| 多巴胺是什么药| 饱经风霜是什么生肖| 世界上最大的海洋是什么| 微量元素挂什么科| 末梢血是什么意思| 下午四点到五点是什么时辰| 八面玲珑指什么生肖| 炁读什么| 中药地龙是什么| 英语什么时候学最好| ar是什么意思| 什么叫双相障碍| 大腿后侧疼痛什么原因| 己卯日五行属什么| 春砂仁与什么煲汤最佳| 7月29日是什么星座| 天津五行属什么| 精卫填海是什么意思| 为什么男怕属鸡| 区号是什么| 老班章是什么茶| 包虫病是什么病| bv是什么品牌| 成都市市长是什么级别| 唐氏筛查都查些什么| but什么意思| 属虎适合佩戴什么饰品| 飞机杯什么意思| 眼皮浮肿是什么原因引起的| 10015是什么电话| 处心积虑是什么意思| 韭菜补什么| 长孙皇后叫什么名字| 哺乳期能吃什么水果| 培坤丸有什么作用功效| 什么品牌的笔记本好| 忘恩负义的负是什么意思| 经常性偏头疼是什么原因| 月经来有血块是什么原因| 尿多尿频是什么原因| 征信对个人有什么影响| 胸闷是什么原因引起的| 666代表什么意思| 扫把星是什么生肖| 短发适合什么脸型| 玄女是什么意思| 铜罗是什么生肖| 梦见死人是什么兆头| 臭鳜鱼是什么鱼| 伏是什么意思| 新生儿湿疹用什么药膏| 金国人是现在的什么人| 自贸区是什么意思| 中性粒细胞数目偏高是什么意思| 花椒桂圆艾绒敷肚脐有什么作用| 口酸吃什么药| 米粉用什么做的| 炭疽病用什么农药最好| 脚底疼是什么原因| 吃了什么药不能喝酒| 腰酸背痛挂什么科| 2009年属什么生肖| o型血为什么叫贵族血| 出现幻觉是什么原因引起的| 十二指肠溃疡a1期什么意思| 白扁豆长什么样| 过敏性鼻炎用什么药| chloe是什么意思| 霉菌性阴道炎用什么药好| 蓝黑色是什么颜色| 4pcs是什么意思| 石英表是什么意思| 吃什么回奶最快最有效| 肺燥吃什么中成药| 满满的回忆什么意思| 阴唇为什么一大一小| 肝胆相照是什么意思| 捡漏什么意思| 五月十五是什么星座| 大姨妈为什么会推迟| 四五月份是什么星座| 地中海贫血是什么意思| 副巡视员是什么级别| 摩登女郎是什么意思| 容易打嗝是什么原因| 一直不来月经是什么原因| 7月1号是什么节日| 吃莲子有什么好处| 特朗普是什么星座| 片仔癀有什么功效| 广义货币m2是什么意思| 大腿抽筋是什么原因引起的| 准备好了吗时刻准备着是什么歌| mru是什么检查| 八字七杀是什么意思| 喝茶失眠是什么原因| 欲情故纵是什么意思| 阳历12月是什么星座| 低密度灶是什么意思| 兔配什么生肖最好| 30度穿什么衣服合适| 11月有什么节日| 胆囊炎吃什么食物好| 万兽之王是什么动物| 软肋骨炎吃什么药对症| 法本是什么意思| 噤若寒蝉是什么意思| 美国为什么不敢打伊朗| 什么样的春光| 麦穗鱼吃什么| 变蛋是什么| 生蚝有什么功效与作用| 白细胞酯酶阳性是什么意思| 土茯苓和什么煲汤最好| 裸贷是什么意思| 百度

昆明发文加强控辍保学 每年3月为义务教育宣传月

百度 党的建设方面,自觉维护党中央权威和集中统一领导,注重加强党委支部建设,完善学习制度和考核办法,校领导班子带头加强理论学习,开展读原文、学原著和红色经典诵读等活动,引导干部职工和学员树牢“四个意识”,坚定“四个自信”。

SDK 正常工作依赖硬件设备平台提供的软硬件接口,包括麦克风、扬声器、摄像头、加密库等模块。我们设计了硬件抽象层,提供一致的接口定义,具体的接口实现需要 SDK 的接入方提供。

# 1. Module 抽象

头文件:wmpf/module.h

我们把每个模块抽象成一个wx_module类型,目前有如下几种 module:

类型 头文件 说明
wx_audio_module wmpf/hardware/audio.h 音频模块,用于从麦克风和扬声器输入/输出音频流
wx_camera_module wmpf/hardware/camera.h 摄像头模块,用于从摄像头获取视频流
wx_crypto_module wmpf/crypto.h 签名算法模块。SDK 依赖系统的加密库中的签名算法。
wx_video_module wmpf/hardware/video.h 视频模块,用于创建远端视频流

当按需实现这几种 Module 后,在调用 wx_init() 初始化 SDK 的时候,将使用如下函数指针把 Module 提供给 SDK 使用:

typedef wx_error_t (*wx_get_module_t)(const char* id,
                                      struct wx_module** module);

SDK 调用实现的函数时,会传入一个 ID,需要返回此 ID 所对应的 wx_module 的实例。

参数

属性 类型 说明
id char* module ID,在后续定义
module struct wx_module** 对应的 module 实例

当前支持的 module ID 已经预先定义在各个头文件中:

ID 头文件
WX_AUDIO_MODULE_ID wmpf/hardware/audio.h
WX_CAMERA_MODULE_ID wmpf/hardware/camera.h
WX_CRYPTO_MODULE_ID wmpf/crypto.h
WX_VIDEO_MODULE_ID wmpf/hardware/video.h

返回值

wx_error_t SDK 根据此返回值,判断请求的 module 是否有效。

例如一台设备不具备摄像头,那么当 SDK 请求 WX_CAMERA_MODULE_ID 时,只需返回 WXERROR_UNIMPLEMENTED

错误码 说明
WXERROR_OK 请求的 module 有效。
WXERROR_UNIMPLEMENTED 请求的 module 无效。

示例代码

// 假设已经实现了如下module:
extern struct wx_audio_module audio_module;
extern struct wx_camera_module camera_module;
extern struct wx_crypto_module crypto_module;
// 现实现HAL获取Module的函数如下:
wx_error_t hal_get_module(const char* id, struct wx_module** module_out) {
  if (!strcmp(id, WX_AUDIO_MODULE_ID)) {
    *module_out = (struct wx_module*)&audio_module;
    return WXERROR_OK;
  } else if (!strcmp(id, WX_CAMERA_MODULE_ID)) {
    *module_out = (struct wx_module*)&camera_module;
    return WXERROR_OK;
  } else if (!strcmp(id, WX_CRYPTO_MODULE_ID)) {
    *module_out = (struct wx_module*)&crypto_module;
    return WXERROR_OK;
  }
  // 假设当前设备没有屏幕,因此不需提供 wx_video_module,那么就返回 WXERROR_UNIMPLEMENTED
  return WXERROR_UNIMPLEMENTED;
}

# 2. 音频模块

头文件:wmpf/hardware/audio.h

音频模块,需要配置一个 wx_audio_module 类型的实例。该类型主要包含如下几个函数指针,用来获取音频输入/输出设备的信息,或操作音频设备。

运行时,VoIP 将顺序调用这 4 个函数,完成对音频输入/输出设备的配置。

# 2.1 get_number_of_devices

获取指定类型音频输入/输出设备的数量。

wx_error_t (*get_number_of_devices)(struct wx_audio_module* module,
                                    wx_audio_device_type_t device_type,
                                    size_t* num_devices_out);

参数

属性 类型 说明
module struct wx_audio_module* context
device_type wx_audio_device_type_t 设备类型,可选值
WX_AUDIO_DEVICE_IN(音频输入设备,如麦克风)
WX_AUDIO_DEVICE_OUT(音频输出设备,如扬声器)
num_devices_out size_t* 返回对应类型的音频设备的数量

返回值

wx_error_t SDK 根据此返回值,判断得到的设备数量是否有效

错误码 说明
WXERROR_OK 成功
WXERROR_INVALID_ARGUMENT num_devices_out 为空

# 2.2 get_device_name

查询指定类型(如 WX_AUDIO_DEVICE_IN 表示麦克风)音频输入/输出设备列表中第 index 个设备的 ID

wx_error_t (*get_device_name)(struct wx_audio_module* module,
                              size_t index,
                              wx_audio_device_type_t device_type,
                              char** device_name_out);

参数

属性 类型 说明
module struct wx_audio_module* context
index size_t 设备列表中指定的设备。取值范围[0, num_devices_out)
device_type wx_audio_device_type_t 设备类型,同 get_number_of_devices
device_name_out char** 返回对应设备的 ID

返回值

wx_error_t SDK 根据此返回值,判断得到的设备 ID 是否有效

错误码 说明
WXERROR_OK 成功
WXERROR_INVALID_ARGUMENT num_devices_out 为空
WXERROR_OUT_OF_RANGE index 超出范围

# 2.3 get_device_info

查询指定类型和设备 ID 的设备的详细信息。该函数用于返回一些在不用打开音频设备的情况下就能获取到的音频设备信息,如支持的音频编码格式。

wx_error_t (*get_device_info)(struct wx_audio_module* module,
                              const char* id,
                              wx_audio_device_type_t device_type,
                              const struct wx_metadata** metadata_out);

参数

属性 类型 说明
module struct wx_audio_module* context
id const char* get_device_name 查到的设备 ID,或者宏 WX_AUDIO_DEVICE_PRIMARY 表示任意有效的设备。
device_type wx_audio_device_type_t get_number_of_devices 的 device_type
metadata_out const struct wx_metadata** 返回对应设备的详情。二级指针指向的对象可以是局部变量。

返回值

wx_error_t SDK 根据此返回值,判断得到的设备详情是否有效

错误码 说明
WXERROR_OK 成功

# 2.4 open

调用指定的音频输入/输出设备。

wx_error_t (*open)(struct wx_audio_module* module,
                   const char* id,
                   wx_audio_device_type_t device_type,
                   struct wx_audio_device** device_out);

参数

属性 类型 说明
module struct wx_audio_module* context
id const char* get_device_infoid
device_type wx_audio_device_type_t get_number_of_devices 的 device_type
device_out struct wx_audio_device** 返回对应的设备实例。详见后续 wx_audio_device 类型说明

返回值

wx_error_t SDK 根据此返回值,判断得到的设备实例是否有效

错误码 说明
WXERROR_OK 成功

# 2.5 wx_audio_device

属性 类型 说明
common wx_device 设备类型的公共基类。
metadata wx_metadata 对于设备的描述信息。

struct wx_audio_device 本身的功能不多,主要是对于设备的描述。真正需要重点关注的是它的两个拓展类型:wx_audio_device_inwx_audio_device_out

# 2.5.1 wx_audio_device_in

对于输入设备(如:麦克风)的抽象。这个类型的关键是需要提供 open_input_stream 函数实现,运行时 SDK 将调用此函数,创建音频输入流对象 wx_audio_stream_in。SDK 使用 wx_audio_stream_in 对象的实例进一步控制音频采集。

麦克风设备在 VoIP 通话拨通时被创建,VoIP 通话结束时销毁。

属性 类型 说明
device wx_audio_device 基类。
open_input_stream 函数指针 SDK 使用这个函数指针打开/使用麦克风设备。
# open_input_stream 的参数
参数 类型 说明
dev wx_audio_device_in * context
config wx_audio_config * SDK 希望的麦克风配置。
listener wx_audio_stream_in_listener * SDK 监听麦克风事件的回调函数。开发者需要在合适的时机正确地调用这些函数。
user_data void * SDK 所依赖的其他 context 信息。调用麦克风事件回调函数时需要带上这个指针。
stream_out wx_audio_stream_in ** 返回新创建的音频输入流对象。定义如下。
# wx_audio_stream_in
参数 类型 说明
common wx_audio_stream * context
pause 函数指针 SDK 调用此函数以暂停音频数据输入。
resume 函数指针 SDK 调用此函数以恢复音频数据输入。
# wx_audio_stream_in_listener
参数 类型 说明
common wx_struct 基类
data 函数指针 系统调用此函数向 SDK 提供麦克风采集到的音频数据。
error 函数指针 系统通过调用此函数告知 SDK 麦克风采集音频数据出错。

注意事项:

  1. SDK 目前仅采集 PCM 格式的音频数据,远期可能增加其他音频格式。
  2. config 目前以采样率 16000、采样长度 20ms、16bit 为默认配置,可能会动态调整。如果设备不支持这些音频配置,设备厂商应当自行对 PCM 数据进行变换。
  3. data 回调可以理解为非阻塞的,即与网络无关。
  4. data 回调提供的一帧音频数据,需要根据 config 设置的参数提供。举例来说:PCM 采样率 16000、采样格式 16Bit、采样长度 20ms 的单通道音频数据,包含 16000 / 1000 * 20 * 1 * (16 / 8) 字节的数据(采样率 / 1000 * 采样长度 * 通道数 * 采样格式 / 8Bit)。

# 2.5.2 wx_audio_device_out 类型

对于扬声器设备的抽象。这个类型的关键是提供 open_output_stream 函数实现,运行时 SDK 将调用此函数,创建音频输出流对象 wx_audio_stream_out。SDK 使用 wx_audio_stream_out 对象的实例进一步控制音频播放。

扬声器设备在 VoIP 通话开始拨打时被创建,先播放铃声,在 VoIP 通话开始时开始播放语音,VoIP 通话结束时销毁。

属性 类型 说明
device wx_audio_device 基类。
open_output_stream 函数指针 SDK 使用这个函数指针打开/使用扬声器设备。
# open_output_stream 的参数:
参数 类型 说明
dev wx_audio_device_out * context
config wx_audio_config * SDK 希望的扬声器配置。
listener wx_audio_stream_out_listener * SDK 监听扬声器事件的回调函数。应在合适的时机正确地调用这些函数。
user_data void * SDK 所依赖的其他 context 信息。调用扬声器事件回调函数时需要带上这个指针。
stream_out wx_audio_stream_out ** 返回新创建的音频输出流对象。定义如下。
# wx_audio_stream_out 类型
参数 类型 说明
common wx_audio_stream * context
pause 函数指针 SDK 调用此函数以暂停音频数据播放。
resume 函数指针 SDK 调用此函数以恢复音频数据播放。
flush 函数指针 SDK 调用此函数要求音频播放缓存,立刻播放缓存内的音频数据。
# wx_audio_stream_out_listener 类型
参数 类型 说明
common wx_struct 基类
data 函数指针 系统通过调用此函数向 SDK 拉取待播放(铃声或收到的语音流)的音频数据。
error 函数指针 系统通过调用此函数通知 SDK 音频播放出错。

注意事项:

  1. SDK 目前仅提供 PCM 格式的音频数据,远期可能增加其他音频格式。
  2. config 目前以采样率 16000、采样长度 20ms、16bit 为默认配置,可能会动态调整。如果设备不支持这些音频配置,设备厂商应当自行对 PCM 数据进行变换。
  3. data 回调可以理解为非阻塞的,即与网络无关。
  4. data 回调传入的 buffer 需要足够大,能存下 config 设置的一帧音频数据。举例来说:PCM 采样率 16000、采样格式 16Bit、采样长度 20ms 的单通道音频数据,包含 16000 / 1000 _ 20 _ 1 _ (16 / 8) 字节的数据(采样率 / 1000 _ 采样长度 _ 通道数 _ 采样格式 / 8Bit)。

# 3. 签名算法模块

头文件:wmpf/crypto.h

SDK 依赖系统内置的签名算法,我们提供了 OpenSSL、MbedTLS、WolfSSL 的 Demo 实现,存放在 example 目录中。如果使用上述 crypto 实现,通常可以直接使用 example 的代码实现,否则请参考 example 实现进行适配。

Demo 实现:

  • example/crypto_mbedtls.c
  • example/crypto_openssl.c
  • example/crypto_wolfssl.c

# 4. (可选)摄像头模块

头文件:wmpf/hardware/camera.h

摄像头模块,需要配置一个 wx_camera_module 类型的实例。该类型主要是需要你提供如下几个函数指针,用来利用设备提供的摄像头设备对象生成设备发送到手机的视频流

运行时,SDK 将顺序调用这 3 个函数,完成对摄像头设备的配置。

# 4.1 get_number_of_devices

获取摄像头设备的数量。

wx_error_t (*get_number_of_devices)(struct wx_camera_module* module,
                                    size_t* num_devices_out);

参数

属性 类型 说明
module struct wx_camera_module* context
num_devices_out size_t* 返回对应类型的摄像头设备的数量

返回值

wx_error_t SDK 根据此返回值,判断得到的设备数量是否有效

错误码 说明
WXERROR_OK 成功
WXERROR_INVALID_ARGUMENT num_devices_out 为空

# 4.2 get_device_info

查询指定摄像头设备的详细信息。

wx_error_t (*get_device_info)(struct wx_camera_module* module,
                              size_t index,
                              struct wx_camera_device_info* device_info);

参数

属性 类型 说明
module struct wx_camera_module* context
index size_t 设备列表中指定的设备。取值范围[0, num_devices_out)
device_info struct wx_camera_device_info* SDK 会传入此 device_info,需要填充此结构体的内容。

返回值

wx_error_t SDK 根据此返回值,判断得到的设备详情是否有效

错误码 说明
WXERROR_OK 请求到的设备详情有效。

# 4.3 open

调用指定的摄像头设备。

wx_error_t (*open)(struct wx_camera_module* module,
                   const char* id,
                   struct wx_camera_device** device_out);

参数

属性 类型 说明
module struct wx_camera_module* context
id char * get_device_info 查到的设备 ID,或者宏 WX_CAMERA_DEVICE_PRIMARY 表示任意有效的设备。
device_out struct wx_camera_device ** 返回对应的设备实例。

返回值

wx_error_t SDK 根据此返回值,判断得到的设备实例是否有效

错误码 说明
WXERROR_OK 成功

# 4.4 wx_camera_device

对于摄像头设备的抽象。这个类型的关键是需要提供 open_stream 函数实现,运行时 SDK 将调用此函数,创建视频输入流对象 wx_camera_stream。SDK 使用 wx_camera_stream 对象的实例进一步控制视频采集。

属性 类型 说明
common wx_device 设备类型的公共基类。
metadata wx_metadata 对于设备的描述信息。
open_stream 函数指针 SDK 使用这个函数指针打开/使用摄像头设备。

open_stream 的参数:

参数 类型 说明
dev wx_camera_device * context
config wx_camera_stream_config * SDK 需要的摄像头配置,包括数据流类型。
listener wx_camera_stream_listener * SDK 监听摄像头事件的回调函数。应在合适的时机正确地调用这些函数。
user_data void * SDK 所依赖的其他 context 信息。调用摄像头事件回调函数时需要带上这个指针。
stream_out wx_camera_stream ** 返回新创建的视频输入流对象。定义如下。

# wx_camera_stream 类型

参数 类型 说明
common wx_struct 基类
update 函数指针 SDK 调用此函数以更新摄像头录制参数。
make_i_frame 函数指针 SDK 调用此函数以请求立刻收到一个 H264/H265 I 帧。

# wx_camera_stream_listener 类型

参数 类型 说明
common wx_struct 基类
data 函数指针 系统调用此函数向 SDK 提供摄像头采集到的视频数据。
error 函数指针 系统通过调用此函数告知 SDK 摄像头采集视频数据出错。

注意事项:

  1. SDK 目前仅采集 H264/H265 格式的视频数据。
  2. data 回调可以理解为非阻塞的,即与网络无关。
  3. 设备需要定时(建议 1 秒,最长不得超过 5 秒)提供 PPS、SPS、I 帧。
  4. 设备传入的 rotation 仅在 Linux SDK 0xD5000084 及以上版本、微信客户端 8.0.41 及以上版本生效,对于更旧的微信版本,需要在小程序侧调用 VoIP 插件的 setUIConfig 设置旋转角度。

# 5. (可选)视频模块

头文件:wmpf/hardware/video.h

摄像头模块,需要配置一个 wx_video_module 类型的实例。

运行时,SDK 将调用 create_output_stream 函数创建视频输出流,将接收到的远端(手机)摄像头录制的视频通过流对象输出。

# 5.1 create_output_stream

创建一个视频输出流。

wx_error_t (*create_output_stream)(struct wx_video_module* module,
                                   const struct wx_video_stream_config* config,
                                   struct wx_video_stream** stream);

参数

属性 类型 说明
module struct wx_video_module* context
config const struct wx_video_stream_config* 视频输出流参数
stream struct wx_video_stream** 返回视频输出流对象

返回值

wx_error_t SDK 根据此返回值,判断视频输出流是否有效

错误码 说明
WXERROR_OK 成功

# 5.2 wx_video_stream

参数 类型 说明
common wx_struct 基类
write 函数指针 SDK 调用此函数以写入视频输出流。
close 函数指针 SDK 调用此函数以关闭视频输出流。
做梦梦到钓鱼是什么意思 吃什么消炎药可以喝酒 吃什么容易滑胎流产 梦见别人拉屎是什么意思 奥美拉唑主要治什么
6月14日什么星座 日本豆腐是什么材料 什么是破伤风 手指代表什么生肖 利妥昔单抗是什么药
为什么的拼音怎么写 藏毛窦是什么病 罗红霉素和红霉素有什么区别 唐宝是什么意思 zfc是什么牌子
天梭手表属于什么档次 晕3d是什么原因 家财万贯是什么生肖 ca125是查什么的 什么样的人不适合吃人参
想要孩子需要做什么检查hcv9jop3ns5r.cn 阴囊瘙痒挂什么科室inbungee.com 头皮毛囊炎用什么洗发水hcv8jop8ns9r.cn 体检挂什么科96micro.com 糖尿病人早餐吃什么hcv9jop0ns3r.cn
感冒吃什么药好得快hcv8jop2ns3r.cn 甲木命是什么意思hcv8jop4ns9r.cn 高嘌呤是什么意思hcv8jop7ns3r.cn apf是什么意思520myf.com 银屑病为什么会自愈hcv9jop5ns7r.cn
走马观花的走什么意思hcv9jop5ns2r.cn 突然头晕想吐是什么原因zhongyiyatai.com 梦见韭菜是什么预兆hcv8jop1ns1r.cn 下午4点半是什么时辰hcv8jop9ns9r.cn 车厘子和樱桃有什么区别hcv8jop5ns1r.cn
全麦是什么意思hcv9jop3ns1r.cn 脾胃虚吃什么好hcv8jop4ns5r.cn 鱼工念什么hcv8jop3ns9r.cn 什么银行卡最好用hcv8jop4ns9r.cn 中国精神是什么hcv8jop7ns6r.cn
百度