什么是干眼症| 原始鳞状上皮成熟是什么意思| 环移位了有什么症状| 甘油三酯偏高说明什么| 防冻液红色和绿色有什么区别| 更年期燥热吃什么食物| 六点半是什么时辰| 私处长痘痘是什么原因| 拉姆藏语什么意思| 超滤是什么意思| 宫颈纳氏腺囊肿是什么意思| 人中深浅代表什么| 中级会计什么时候报名| 什么叶子| 草木皆兵的意思是什么| 总做梦是什么原因| 什么叫开门见床头| 手指倒刺是什么原因| 埋汰是什么意思| 阴道感染有什么症状| 鸭肚是鸭的什么部位| 橡皮擦是什么材料做的| 六畜兴旺是什么意思| 经常生气会得什么病| 聪明的女人是什么样的| 什么茶提神| 胰岛素起什么作用| 长期失眠看什么科最好| 什么是天珠| 惊蛰是什么意思| 外阴白斑瘙痒用什么药| 细菌性阴道炎用什么洗液| 长期失眠吃什么药好| 1994年属什么| 你叫什么名字英语怎么说| 身上皮肤痒是什么原因| 大熊猫的尾巴是什么颜色| 足石念什么| 智齿冠周炎吃什么消炎药| 咳嗽有痰吃什么药效果好| 尿蛋白质阳性什么意思| 空调干燥是什么意思| 牛仔布料是什么面料| 吃了安宫牛黄丸要禁忌什么不能吃| 舌头发黑是什么原因| 为什么怀孕前三个月不能说| 小孩老咳嗽是什么原因| cnd是什么意思| 胸部什么时候停止发育| 一直耳鸣是什么原因引起的| twice什么意思| 源源不断是什么意思| 血压低是什么原因造成的| 梦见自己拉了很多屎是什么意思| 为什么微信运动总是显示步数为0| 脾脏结节一般是什么病| 美女如云什么意思| 身心是什么意思| 揣测是什么意思| 马路上的菱形标志是什么意思| 肺结节影是什么意思啊| 办什么厂比较好| 试管婴儿什么价格| 恒字属于五行属什么| 什么人不适合种植牙| 什么是焦虑| 锴字五行属什么| 产后第一次来月经是什么颜色| 痛风什么药止痛最快| 孕晚期吃什么水果好| 什么叫化学性肝损伤| 宫颈管是什么| 真空是什么意思| 血糖是什么引起的| 松针土适合种什么花| 对什么感兴趣| 栩字五行属什么| 喝什么利尿效果最好| 2024年是属什么生肖| 做梦梦到理发是什么征兆| 女生经常手淫有什么危害| 特斯拉是什么电池| 肝硬化早期有什么症状| 月亮是什么| 牵牛花什么时候开花| 吃什么胎儿眼睛黑又亮| 什么是体外射精| 红骨髓是什么意思| 啫啫煲为什么念jue| 酸入肝是什么意思| 阿司匹林治疗什么病| 吃什么最补胶原蛋白| 湿气太重吃什么药| 照身份证穿什么衣服| 胸闷气短是什么症状| 正常人突然抽搐是什么原因| 天丝是什么材质| 为什么手术前要禁食禁水| 嘴苦是什么情况| 喝什么茶降血压最好最快| 酸碱度偏高是什么意思| sku图是什么意思| 感觉心慌是什么原因| 榴莲和什么水果相克| 空鼻症是什么| 哒哒是什么意思| 邮箱抄送是什么意思| 做肌电图挂什么科| bitch是什么意思| 舌根白苔厚是什么原因| 吃什么受孕率又快又高| 什么是直肠炎| 为什么会长白头发| 发心是什么意思| 纵是什么意思| 35岁月经量少是什么原因| 女人要的是什么| 治疗早泄吃什么药| 下午一点半是什么时辰| 血红蛋白高是什么意思| 1976年出生属什么生肖| 爬是什么结构| 贡菜是什么做的| 奇变偶不变是什么意思| 张靓颖什么星座| 韭菜籽配什么壮阳最猛| 神神叨叨是什么意思| 阴阳二气是什么意思| 嘴唇发麻什么病兆| 什么是物理| 孽障是什么意思| 512是什么节日| 神经损伤吃什么药最好| 平反是什么意思| 挂妇科门诊都检查什么| 温字五行属什么| 月子里头疼是什么原因| 冬虫夏草到底是什么| 左耳朵嗡嗡响是什么原因引起的| 脑血管堵塞吃什么药最好| 国企是什么| 耷拉是什么意思| egg是什么意思| 5w是什么意思| 肝囊肿是什么病| 为什么警察叫条子| 节育环嵌顿是什么意思| 脂肪粒是什么原因引起的| 秦国是现在的什么地方| 梦到钓鱼是什么征兆| 达芬奇发明了什么| 从容不迫是什么意思| 要强是什么意思| 什么样的天山| 部堂大人是什么职位| 15天来一次月经是什么原因| 两情相悦什么意思| 台湾高山茶属于什么茶| 乙状结肠腺瘤是什么病| 葡萄籽有什么功效和作用| 力不从心是什么意思| 人为什么会长智齿| 吃蜂蜜不能吃什么食物| 送病人什么礼物好| 喝酒前吃什么药| 尿检3个加号什么意思| kalenji是什么品牌| 尿素氮高什么原因| 养狗的人容易得什么病| 什么是代沟| 为什么有狐臭| 梦见跟妈妈吵架是什么意思| 胃疼可以吃什么药| 舌苔厚白是什么原因| 肝脑涂地是什么意思| 经常梦遗是什么原因| 陈可以组什么词| 上海话娘娘是什么意思| 儿童抽动症挂什么科| 肋骨疼挂什么科| 11月28是什么星座| d是什么| 佬是什么意思| 奶粉水解什么意思| aqi是什么| 万里晴空什么意思| 蝙蝠是什么类| 真菌感染皮肤病用什么药最好| 什么叫房颤| 兔子可以吃什么| 什么叫修辞手法| 梦见做棺材是什么意思| 重阳节是干什么的| 减肥可以吃什么| 吃什么升血压快| 舌苔厚白中间有裂纹吃什么药| 耳朵内痒是什么原因| 神龙见首不见尾是什么意思| 三八妇女节是什么生肖| 为什么会得胆囊炎| 什么是外心| 子宫前位是什么意思| 甲木命是什么意思| 急性喉炎吃什么药| 尿液有白色絮状物是什么原因| 肾阴虚的症状吃什么药| 九月三号是什么日子| 起义是什么意思| ne医学上是什么意思| 体位性低血压是什么| 宝宝吃的益生菌什么牌子好| 麻古是什么| 拉痢疾是什么症状| 代销商是什么意思| 异型增生是什么意思啊| 凉皮加什么才柔软筋道| 198是什么意思| 什么叫情商| 恶露是什么东西| 族谱是什么意思| 疱疹什么症状| 倚老卖老什么意思| 黄帝内经讲的什么| 山对什么| 腹泻吃什么水果| 备是什么意思| 犹太人有什么特征| 肾钙化是什么意思| 山鬼是什么| 水肿是什么意思| 异常什么意思| 佝偻病缺少什么元素| 人突然瘦了要检查什么| 休克疗法是什么意思| 吃什么会变黑| 离子四项是检查什么的| 横财是什么意思| 崖柏手串有什么功效| 不打狂犬疫苗会有什么后果| 什么是气压| 什么座| 谷氨酰转移酶高是什么病| 大理寺卿是什么职位| 阴唇为什么一个大一个小| 什么是赌博| 老睡不醒是什么原因| 无厘头什么意思| 什么叫信仰| 河南人喜欢吃什么菜| 膝盖小腿酸软无力是什么原因| 什么动物菩萨心肠| 鳞癌是什么意思| 西瓜虫吃什么| 蛇为什么怕鹅| 切除甲状腺有什么影响| 罹患率是什么意思| 令坦是对方什么人的尊称| 包皮龟头炎用什么药| kipper什么意思| 挑担是什么意思| 怀孕吃什么宝宝皮肤白| 什么的白云| 吃什么能让阴茎更硬| 虚构是什么意思| 百度

佛罗伦萨与卡利亚里宣布退役阿斯托里球衣

百度 上图:中华青年发展联合会理事长王正 摄影:中国统一战线新闻网北京8月29日电 (记者闫妍)28日上午,由台盟中央主办的第四届大江论坛——两岸关系和平发展精英论坛在北京台湾会馆开幕,包括岛内产、经、学各领域精英人士和青年代表在内的两岸嘉宾二百多人汇聚一堂,围绕“融入乡情亲情,助推和平发展”论坛主题,积极建言献策,共同展望两岸关系和平发展的光明前景。

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 调用此函数以关闭视频输出流。
版记是什么 嘴唇干裂是什么原因 神经系统由什么组成 肺结节吃什么水果好 胎盘位于子宫后壁是什么意思
梦见洗头是什么预兆 脸水肿是什么原因 双什么意思 拉稀水是什么原因 a和ab型生的孩子是什么血型
下眼皮跳是什么原因 老面是什么面 香槟玫瑰花语是什么意思 问其故的故是什么意思 胰腺ca是什么意思
打喷嚏流鼻涕吃什么药好 口腔溃疡吃什么药 一喝牛奶就拉肚子是什么原因 nov是什么意思 玫瑰花茶有什么作用
牙齿痒是什么原因hcv8jop4ns2r.cn 为什么遗精hcv8jop8ns8r.cn 磨平了棱角是什么意思hcv9jop4ns3r.cn 纤维蛋白原是什么hcv9jop8ns2r.cn 健康管理师是干什么的hcv8jop6ns8r.cn
脚心发热吃什么药hcv8jop4ns5r.cn 藕粉色是什么颜色hcv9jop0ns4r.cn 甚好是什么意思hcv9jop3ns6r.cn 什么是唐卡hcv8jop8ns8r.cn 手上长疣是什么原因造成的hcv7jop9ns0r.cn
为什么不能空腹吃香蕉hcv9jop1ns3r.cn 性冷淡吃什么药onlinewuye.com 打强心针意味着什么hcv8jop1ns8r.cn 孕初期有什么症状hcv8jop2ns4r.cn 醋酸氯已定是什么药hcv9jop6ns3r.cn
为什么会打呼hcv8jop1ns6r.cn 36年属什么生肖xinmaowt.com 十月十一日是什么星座yanzhenzixun.com 酸碱度偏高是什么意思hcv9jop0ns4r.cn 游走是什么意思hcv9jop0ns6r.cn
百度