采集

本章节主要介绍音视频数据采集相关的功能。默认是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,不做任何处理!
枚举定义 说明
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介绍

设置底层针对麦克风采集数据处理开关接口

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);
    }