采集
本章节主要介绍音视频数据采集相关的功能。默认是SDK接管采集,开发者也可以选择自己控制采集也就是自定义音视频数据输入。 清晰度档位支持 清晰度设置默认是480P 支持的清晰度设置包括:720P、540P、480P、360P、352*288、176*144
帧率档位支持 帧率设置默认是15fps,
遍历设备列表
API介绍
遍历指定类型设备,获取系统中所有该类型设备的名称。目前只支持摄像头设备的获取。
API原型
NIM_SDK_DLL_API void nim_vchat_enum_device_devpath(enum NIMDeviceType type, const char *json_extension, nim_vchat_enum_device_devpath_sync_cb_func cb, const void *user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 设备类型,见NIMDeviceType |
json_extension | char* | 无效的扩展字段。 |
cb | function | 结果回调 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
- NIMDeviceType
枚举定义 | 值 | 说明 |
---|---|---|
kNIMDeviceTypeAudioIn | 0 | 麦克风设备 |
DeviceTypeAudioOut | 1 | 听筒设备用于播放本地采集音频数据,麦克风试音 |
DeviceTypeAudioOutChat | 2 | 听筒设备用于通话音频数据,由DeviceTypeAudioOut遍历得到设备 |
DeviceTypeVideo | 3 | 摄像头 |
示例
void nim_vchat_enum_device_devpath_sync_callback(bool ret, enum NIMDeviceType type, const char *json_extension, const void *user_data)
{
printf("ret->%d,type->%d,json->%s\n", ret, type, json_extension);
}
nim_vchat_enum_device_devpath(kNIMDeviceTypeVideo, "", nim_vchat_enum_device_devpath_sync_callback, NULL);
启动设备
API介绍
启动设备。同一NIMDeviceType下设备将不重复启动,不同的设备会先关闭前一个设备开启新设备。
API原型
NIM_SDK_DLL_API void nim_vchat_start_device(enum NIMDeviceType type, const char* device_path, unsigned fps, const char* json_extension, nim_vchat_start_device_cb_func cb, const void* user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 设备类型,见NIMDeviceType |
device_path | char* | 设备路径对应kNIMDevicePath |
fps | unsigned int | 摄像头的采样频率,非摄像头类型设备无效(麦克风采样频率由底层控制,播放器采样频率也由底层控制) |
width | int | 摄像头采集宽度期望值,取0则底层选默认值,非摄像头类型设备无效。 |
height | int | 摄像头采集高度期望值,取0则底层选默认值,非摄像头类型设备无效。 |
cb | function | 结果回调 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
void nim_vchat_start_device_callback(enum NIMDeviceType type, bool ret, const char *json_extension, const void *user_data)
{
printf("func->%s,type->%d,ret->%d\n", __FUNCTION__, type, ret);
switch (type)
{
case kNIMDeviceTypeAudioIn:
break;
case kNIMDeviceTypeAudioOut:
break;
case kNIMDeviceTypeAudioOutChat:
break;
default:
break;
}
}
void test_nim_start_device()
{
int device_type = 0;
printf("open the device 0 1 2 3:\n");
scanf("%d", &device_type);
switch (device_type)
{
case kNIMDeviceTypeAudioIn:
nim_vchat_start_device(kNIMDeviceTypeAudioIn, NULL, 15, "", nim_vchat_start_device_callback, NULL);
break;
case kNIMDeviceTypeAudioOut:
nim_vchat_start_device(kNIMDeviceTypeAudioOut, NULL, 15, "", nim_vchat_start_device_callback, NULL);
break;
case kNIMDeviceTypeAudioOutChat:
nim_vchat_start_device(kNIMDeviceTypeAudioOutChat, NULL, 15, "", nim_vchat_start_device_callback, NULL);
break;
case kNIMDeviceTypeVideo:
{
char device_path[50];
int width = 640;
int height = 480;
json_value* value = json_object_new(0);
char* buf = NULL;
size_t length = 0;
printf("input device path:\n");
scanf("%s", &device_path);
printf("input video width:\n");
scanf("%d", &width);
printf("input video height:\n");
scanf("%d", &height);
json_object_push(value, kNIMDeviceWidth, json_integer_new(width));
json_object_push(value, kNIMDeviceHeight, json_integer_new(height));
length = json_measure(value);
buf = malloc(length);
json_serialize(buf, value);
nim_vchat_start_device(kNIMDeviceTypeVideo, device_path, 15, buf, nim_vchat_start_device_callback, NULL);
json_value_free(value);
free(buf);
}
}
结束设备
API介绍
结束设备
API原型
NIM_SDK_DLL_API void nim_vchat_end_device(enum NIMDeviceType type, const char* json_extension)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 设备类型,见nim_device_def.h |
json_extension | char* | 无效的扩展字段 |
返回值说明
无返回值。
示例
void test_end_vchat_device()
{
nim_vchat_end_device(kNIMDeviceTypeAudioIn, "");
nim_vchat_end_device(kNIMDeviceTypeAudioOutChat, "");
nim_vchat_end_device(kNIMDeviceTypeAudioOut, "");
nim_vchat_end_device(kNIMDeviceTypeVideo,"");
}
音视频数据监听
API介绍
监听音频数据(可以不监听,通过启动设备kNIMDeviceTypeAudioOut和kNIMDeviceTypeAudioOutChat由底层播放)。
API原型
NIM_SDK_DLL_API void nim_vchat_set_audio_data_cb(bool capture, const char *json_extension, nim_vchat_audio_data_cb_func cb, const void *user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
capture | bool | true 标识监听麦克风采集数据,false 标识监听通话中对方音频数据 |
json_extension | char* | 暂时无效 |
cb | nim_vchat_audio_data_cb_func | 结果回调见nim_device_def.h |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理 |
示例
void nim_vchat_audio_data_callback(uint64_t time, const char *data, uint32_t size, const char *json_extension, const void *user_data)
{
}
void demo_nim_vchat_set_audio_data_cb(bool capture)
{
nim_vchat_set_audio_data_cb(capture,"",nim_vchat_audio_data_callback,NULL);
}
API介绍
监听视频数据
API原型
NIM_SDK_DLL_API void nim_vchat_set_video_data_cb(bool capture, const char *json_extension, nim_vchat_video_data_cb_func cb, const void *user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
capture | bool | true 标识监听麦克风采集数据,false 标识监听通话中对方音频数据 |
json_extension | const char* | 扩展Json string:kNIMVideoSubType(缺省为kNIMVideoSubTypeARGB) |
cb | nim_vchat_video_data_cb_func | 结果回调见nim_device_def.h |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理 |
示例
void nim_vchat_video_data_callback(uint64_t time, const char *data, uint32_t size, uint32_t width, uint32_t height, const char *json_extension, const void *user_data);
{
}
void demo_nim_vchat_set_video_data_cb(bool capture)
{
nim_vchat_set_video_data_cb(capture,"",nim_vchat_video_data_callback,NULL);
}
音频前处理开关
API介绍
设置底层针对麦克风采集数据处理开关接口
API原型
NIM_SDK_DLL_API void nim_vchat_set_audio_process_info(bool aec, bool ns, bool vad)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
aec | bool | true表示打开回音消除功能,false表示关闭 |
ns | bool | true表示打开降噪功能,false表示关闭 |
vad | bool | true表示打开人言检测功能,false表示关闭 |
返回值说明
无返回值
示例
void demo_test_nim_vchat_set_audio_process_info(bool aec, bool ns, bool vad)
{
nim_vchat_set_audio_process_info(aec,ns,vad);
}
API介绍
设置回声消除参数值
API原型
NIM_SDK_DLL_API void nim_vchat_set_audio_play_delay_time(int time);
File: nim_device_embedded.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
time | int | 采集与播放之间的经验差值 time 0-1000 |
返回值说明
无返回值
示例
void demo_test_nim_vchat_set_audio_play_delay_time(int time)
{
nim_vchat_set_audio_play_delay_time(time);
}
切换视频质量
API介绍
通话中修改发送画面分辨率,发送的分辨率限制只对上限限制,如果数据源小于发送分辨率,不会进行放大。
API原型
NIM_SDK_DLL_API void nim_vchat_set_video_quality(int video_quality, const char* json_extension, nim_vchat_opt_cb_func cb, const void* user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
video_quality | int | 分辨率模式 见NIMVChatVideoQuality定义。 |
json_extension | char* | 无效扩展字段。 |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
示例
void demo_test_nim_vchat_set_video_quality_callback(bool ret, int code, const char *json_extension, const void *user_data)
{
printf("nim_vchat_set_video_quality callback ret->%d,code->%d\n", ret, code);
}
void demo_test_nim_vchat_set_video_quality(int video_quality)
{
nim_vchat_set_video_quality(video_quality, "", demo_test_nim_vchat_set_video_quality_callback, NULL);
}
特殊说明
该接口只在多人音视频下有效。
自定义音频数据输入
API介绍
自定义音频数据接口, 采样位深只支持16,如果是浮点型数据先转成整型。kNIMDeviceSampleRate支持8000,16000,32000,44100。
API原型
NIM_SDK_DLL_API bool nim_vchat_custom_audio_data(uint64_t time, const char *data, uint32_t size, const char *json_extension)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
time | unsigned long long | 时间,毫秒级。 |
data | void* | 音频数据,pcm格式。 |
size | unsigned int | data的数据长度。 |
json_extension | char* | 扩展Json:kNIMDeviceSampleRate采样频和kNIMDeviceSampleBit采样位深,默认如{"sample_rate":16000, "sample_bit":16}。 |
返回值说明
调用成功返回true,调用失败返回false。
示例
void demo_test_custom_data(bool custom_audio,bool custom_video)
{
nim_vchat_set_custom_data(custom_audio, custom_video, "", nim_vchat_custom_data_cb, NULL);
}
//capture数据发送
void nim_vchat_audio_capture_data_callback(uint64_t time, const char *data, unsigned int size, const char *json_extension, const void *user_data)
{
//发送数据
nim_vchat_custom_audio_data(time, data, size, json_extension);
}
特殊说明
调用该接口前应调用nim_vchat_set_custom_data接口将自定义音频数据开启
自定义视频数据输入
API介绍
自定义视频数据
API原型
NIM_SDK_DLL_API bool nim_vchat_custom_video_data(uint64_t time, const char* data, uint32_t size, uint32_t width, uint32_t height, const char* json_extension)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
time | unsigned long long | 时间,毫秒级。暂时无效 |
data | void* | 视频数据,默认为yuv420格式。 |
size | unsigned int | data的数据长度。 |
width | unsigned int | 画面宽度,必须是偶数。 |
height | unsigned int | 画面高度,必须是偶数。 |
json_extension | char* | 扩展Json kNIMVideoSubType视频数据格式(缺省为kNIMVideoSubTypeI420)。 |
返回值说明
调用成功返回true,调用失败返回false。
示例
void demo_test_custom_data(bool custom_audio,bool custom_video)
{
nim_vchat_set_custom_data(custom_audio, custom_video, "", nim_vchat_custom_data_cb, NULL);
}
void nim_vchat_video_recv_data_callback(uint64_t time, const char *data, uint32_t size, uint32_t width, uint32_t height, const char *json_extension, const void *user_data)
{
nim_vchat_custom_video_data(time, data, size, width, height, json_extension);
}
特殊说明
调用该接口前应调用nim_vchat_set_custom_data接口将自定义视频数据开启
切换视频编码模式
API介绍
在通话过程中动态设置视频编码模式
API原型
**NIM\_SDK\_DLL\_API void nim\_vchat\_select\_video\_adaptive\_strategy(NIMVChatVideoEncodeMode mode, const char \*json\_extension, nim\_vchat\_opt\_cb\_func cb, const void \*user\_data)**
File:nim\_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
mode | enum | 编码模式NIMVChatVideoEncodeMode。 |
json_extension | char* | 无效扩展 |
cb | function | 结果回调 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
void foo()
{
nim_vchat_select_video_adaptive_strategy(kNIMVChatVEModeScreen, "", NULL, NULL);
}
切换视频裁剪模式
API介绍
设置发送时视频画面的长宽比例裁剪模式,裁剪的时候不改变横竖屏
获取视频画面的裁剪模式。
API原型
**NIM\_SDK\_DLL\_API void nim\_vchat\_set\_video\_frame\_scale(enum NIMVChatVideoFrameScaleType type)**
**NIM\_SDK\_DLL\_API int nim\_vchat\_get\_video\_frame\_scale\_type()**
File:nim\_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 裁剪模式NIMVChatVideoFrameScaleType。 |
返回值说明
set函数无返回值。
get函数返回当前的裁剪模式,见NIMVChatVideoFrameScaleType。
示例
void foo()
{
nim_vchat_set_video_frame_scale(kNIMVChatVideoFrameScale16x9);
int type = nim_vchat_get_video_frame_scale_type();
}
切换视频帧率
API介绍
实时设置视频发送帧率上限。
API原型
**NIM\_SDK\_DLL\_API void nim\_vchat\_set\_frame\_rate(enum NIMVChatVideoFrameRate frame\_rate, const char\* json\_extension, nim\_vchat\_opt\_cb\_func cb, const void \*user\_data)**
File:nim\_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
frame_rate | enum | 帧率类型,见NIMVChatVideoFrameRate定义。 |
json_extension | char* | 无效备用。 |
cb | function | 结果回调,见nim_vchat_def.h。 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
void foo()
{
nim_vchat_set_frame_rate(kNIMVChatVideoFrameRateNormal, "", NULL, NULL);
}