设备
本章节主要介绍音视频设备相关的功能。
遍历设备列表
API介绍
遍历指定类型设备,获取系统中所有该类型设备的名称。这里只遍历麦克风,摄像头和播放器。
API原型
C++
static void EnumDeviceDevpath(nim::NIMDeviceType type, nim_vchat_enum_device_devpath_sync_cb_func cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static NIMDeviceInfoList GetDeviceList(NIMDeviceType type)
Namespace: NIM
Class: DeviceAPI
C
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(C) | string | 无效的扩展字段。 |
cb(C/C++) | function | 结果回调 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
- NIMDeviceType
枚举定义 | 值 | 说明 |
---|---|---|
kNIMDeviceTypeAudioIn | 0 | 麦克风设备 |
kNIMDeviceTypeAudioOut | 1 | 听筒设备用于播放本地采集音频数据,麦克风试音,耳返功能需要同时打开麦克风设备 |
kNIMDeviceTypeAudioOutChat | 2 | 听筒设备用于通话音频数据,由DkNIMeviceTypeAudioOut遍历得到设备 |
kNIMDeviceTypeVideo | 3 | 摄像头 |
kNIMDeviceTypeSoundcardCapturer | 4 | 声卡声音采集,由kNIMDeviceTypeAudioOut遍历得到设备,得到的数据混音到发送的通话声音中(此模式使用条件苛刻不建议使用) |
kNIMDeviceTypeAudioHook | 5 | 伴音,使用本地播放器的启动路径(exe启动文件的全路径),启动第三方播放器并获取音频数据(只允许存在一个进程钩子),只混音到发送的通话声音中 |
返回值说明
C/C++:无返回值,遍历结果通过结果回调异步返回。
C#:同步返回遍历到的设备列表。
示例
C++
void EnumDevCb(bool ret, nim::NIMDeviceType type, const char* json, const void*) { if (ret) { Json::Value valus; Json::Reader reader; if (reader.parse(json, valus) && valus.isArray()) { int num = valus.size(); for (int i=0;i<num;++i) { Json::Value device; device = valus.get(i, device); MEDIA_DEVICE_DRIVE_INFO info; info.device_path_ = device[nim::kNIMDevicePath].asString(); info.friendly_name_ = device[nim::kNIMDeviceName].asString(); } } } } void foo() { nim::VChat::EnumDeviceDevpath(nim::kNIMDeviceTypeAudioIn, &EnumDevCb); }
C#
void foo() { NIMDeviceInfoList cameraDeviceinfolist = NIM.DeviceAPI.GetDeviceList(NIM.NIMDeviceType.kNIMDeviceTypeVideo); }
C
void EnumDevCb(bool ret, nim::NIMDeviceType type, const char* json, const void*) { if (ret) { Json::Value valus; Json::Reader reader; if (reader.parse(json, valus) && valus.isArray()) { int num = valus.size(); for (int i=0;i<num;++i) { Json::Value device; device = valus.get(i, device); MEDIA_DEVICE_DRIVE_INFO info; info.device_path_ = device[nim::kNIMDevicePath].asString(); info.friendly_name_ = device[nim::kNIMDeviceName].asString(); } } } } typedef void(*nim_vchat_enum_device_devpath)(nim::NIMDeviceType type, const char *json_extension, nim_vchat_enum_device_devpath_sync_cb_func cb, const void *user_data); void foo() { nim_vchat_enum_device_devpath func = (nim_vchat_enum_device_devpath) GetProcAddress(hInst, "nim_vchat_enum_device_devpath"); func(nim::kNIMDeviceTypeAudioIn, "", &EnumDevCb, nullptr); }
启动设备
API介绍
启动设备。同一NIMDeviceType下设备将不重复启动,不同的设备会先关闭前一个设备开启新设备。启动的类型包括麦克风设备,播放器设备(包含耳返即麦克风本地播放,及远端监听播放),摄像头设备,本地声卡监听,第三方伴音程序。
API原型
C++
static void StartDevice(nim::NIMDeviceType type, const std::string& device_path, unsigned fps, int width, int height, nim_vchat_start_device_cb_func cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void StartDevice(NIMDeviceType type, string devicePath, uint fps, NIMStartDeviceJsonEX StartDeviceInfo,StartDeviceResultHandler handler)
Namespace: NIM
Class: DeviceAPI
C
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 | string | 设备路径对应kNIMDevicePath,如果是kNIMDeviceTypeAudioHook,对应播放器本地全路径。 |
fps | unsigned int | 摄像头的采样频率,非摄像头类型设备无效(麦克风采样频率由底层控制,播放器采样频率也由底层控制)。 |
width(C++) | int | 摄像头采集宽度期望值,取0则底层选默认值,非摄像头类型设备无效。 |
height(C++) | int | 摄像头采集高度期望值,取0则底层选默认值,非摄像头类型设备无效。 |
StartDeviceInfo(C#) | object | 启动设备json封装类。 |
cb(C/C++)/handler(C#) | function | 结果回调 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void StartDeviceCb(nim::NIMDeviceType type, bool ret, const char *json, const void*) { } void foo() { nim::VChat::StartDevice(nim::kNIMDeviceTypeVideo, device_path, 50, width, height, &StartDeviceCb); }
C#
void foo() { NIM.DeviceAPI.StartDeviceResultHandler handle = (type, ret) => { Action action = () => { if(ret) { } else { MessageBox.Show("启动摄像头设备失败"); } }; this.Invoke(action); }; NIM.DeviceAPI.StartDevice(NIM.NIMDeviceType.kNIMDeviceTypeVideo, camera_device_path, 25, handle);//开启摄像头 }
C
void StartDeviceCb(nim::NIMDeviceType type, bool ret, const char *json, const void*) { } typedef void(*nim_vchat_start_device)(nim::NIMDeviceType type, const char* device_path, unsigned fps, const char* json_extension, nim_vchat_start_device_cb_func cb, const void *user_data); void foo() { nim_vchat_start_device func = (nim_vchat_start_device) GetProcAddress(hInst, "nim_vchat_start_device"); std::string json_value; Json::FastWriter fs; Json::Value value; value[nim::kNIMDeviceWidth] = width; value[nim::kNIMDeviceHeight] = height; json_value = fs.write(value); fun(nim::kNIMDeviceTypeVideo, device_path.c_str(), 25, json_value.c_str(), &StartDeviceCb, nullptr); }
结束设备
API介绍
结束设备
API原型
C++
static void EndDevice(nim::NIMDeviceType type)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void EndDevice(NIMDeviceType type)
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API void nim_vchat_end_device(enum NIMDeviceType type, const char *json_extension)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 设备类型,见NIMDeviceType |
json_extension(C) | string | 无效的扩展字段。 |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::EndDevice(nim::kNIMDeviceTypeVideo); }
C#
void foo() { NIM.DeviceAPI.EndDevice(NIM.NIMDeviceType.kNIMDeviceTypeAudioOut); }
C
typedef void(*nim_vchat_end_device)(nim::NIMDeviceType type, const char *json_extension); void foo() { nim_vchat_end_device func = (nim_vchat_end_device) GetProcAddress(hInst, "nim_vchat_end_device"); fun(nim::kNIMDeviceTypeVideo, ""); }
监听设备状态
API介绍
添加设备监听(摄像头和麦克风,伴音设备) 注意监听设备后底层会定时检查设备情况,在不需要监听后请移除。在设备监听的情况下,如果麦克风、摄像头设备成功启动,则会在后面自动重启设备或切换设备。伴音设备只会返回第一次数据接收的事件为工作状态事件。
API原型
C++
static void AddDeviceStatusCb(nim::NIMDeviceType type, nim_vchat_device_status_cb_func cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void AddDeviceStatusCb(NIMDeviceType type, DeviceStatusHandler handler)
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API void nim_vchat_add_device_status_cb(enum NIMDeviceType type, nim_vchat_device_status_cb_func cb, const void *user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 设备类型,kNIMDeviceTypeAudioIn和kNIMDeviceTypeVideo、kNIMDeviceTypeAudioHook有效,见NIMDeviceType |
cb(C/C++)/handler(C#) | function | 结果回调 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void DeviceStatusCb(nim::NIMDeviceType type, UINT status, const char* path, const char *json, const void *) { } void foo() { nim::VChat::AddDeviceStatusCb(nim::kNIMDeviceTypeVideo, &DeviceStatusCb); }
C#
void foo() { NIM.DeviceAPI.AddDeviceStatusCb(NIM.NIMDeviceType.kNIMDeviceTypeVideo, (type, status, devicePath) => { }); }
C
void DeviceStatusCb(nim::NIMDeviceType type, UINT status, const char* path, const char *json, const void *) { } typedef void(*nim_vchat_add_device_status_cb)(nim::NIMDeviceType type, nim_vchat_device_status_cb_func cb, const void *user_data); void foo() { nim_vchat_add_device_status_cb func = (nim_vchat_add_device_status_cb) GetProcAddress(hInst, "nim_vchat_add_device_status_cb"); fun(nim::kNIMDeviceTypeVideo, &DeviceStatusCb); }
移除设备监听
API介绍
移除设备监听(摄像头和麦克风,伴音hook)
API原型
C++
static void RemoveDeviceStatusCb(nim::NIMDeviceType type)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void RemoveDeviceStatusCb(NIMDeviceType type)
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API void nim_vchat_remove_device_status_cb(enum NIMDeviceType type)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 设备类型,见NIMDeviceType |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::RemoveDeviceStatusCb(nim::kNIMDeviceTypeVideo); }
C#
void foo() { NIM.DeviceAPI.RemoveDeviceStatusCb(NIM.NIMDeviceType.kNIMDeviceTypeVideo); }
C
typedef void(*nim_vchat_remove_device_status_cb)(nim::NIMDeviceType type); void foo() { nim_vchat_remove_device_status_cb func = (nim_vchat_remove_device_status_cb) GetProcAddress(hInst, "nim_vchat_remove_device_status_cb"); fun(nim::kNIMDeviceTypeVideo); }
启动辅助摄像头
API介绍
启动辅助的摄像头,摄像头数据通过nim_vchat_set_video_data_cb设置采集回调返回,不直接通过视频通话发送给对方,并且不参与设备监听检测。
API原型
C++
暂无
C#
static void StartExtendCamera(string id, string device_path, uint fps, string json_extension, StartDeviceResultHandler handler)
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API void nim_vchat_start_extend_camera(const char *id, const char *device_path, uint32_t fps, const char *json_extension, nim_vchat_start_device_cb_func cb, const void *user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
id | string | 摄像头标识,用于开关及数据回调时的对应,不能为空。(同一id下设备将不重复启动,如果设备device_path不同会先关闭前一个设备开启新设备) |
device_path | string | 设备路径,对应kNIMDevicePath。 |
fps | unsigned int | 摄像头的采样频率。 |
json_extension | string | 打开摄像头允许设置 kNIMDeviceWidth 和 kNIMDeviceHeight,并取最接近设置值的画面模式。 |
cb(C)/handler(C#) | function | 结果回调,见nim_device_def.h。 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
C#
void foo() { NIM.DeviceAPI.StartDeviceResultHandler handle = (type, ret) => { Action action = () => { if(ret) { } else { MessageBox.Show("启动摄像头设备失败"); } }; this.Invoke(action); }; NIMStartDeviceJsonEX json = new NIMStartDeviceJsonEX(); json.VideoWidth = 1280; json.VideoHeight = 720; NIM.DeviceAPI.StartExtendCamera("video_extend", device_path, 50, json.Serialize(), handler); }
C
void StartDeviceCb(nim::NIMDeviceType type, bool ret, const char *json, const void*) { } typedef void(*nim_vchat_start_extend_camera)(const char *id, const char *device_path, unsigned fps, const char *json_extension, nim_vchat_start_device_cb_func cb, const void *user_data); void foo() { nim_vchat_start_extend_camera func = (nim_vchat_start_extend_camera) GetProcAddress(hInst, "nim_vchat_start_extend_camera"); std::string json_value; Json::FastWriter fs; Json::Value value; value[nim::kNIMDeviceWidth] = width; value[nim::kNIMDeviceHeight] = height; json_value = fs.write(value); fun("video_extend", device_path.c_str(), 50, json_value.c_str(), cb, nullptr); }
结束辅助摄像头
API介绍
结束辅助摄像头
API原型
C++
暂无
C#
static void StopExtendCamera(string id)
Namespace: NIM
Class: DeviceAPI
C NIM_SDK_DLL_API void nim_vchat_stop_extend_camera(const char *id, const char *json_extension)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
id | string | 摄像头标识id,如果为空,则关闭所有辅助摄像头。 |
json_extension(C) | string | 无效的扩展字段 |
返回值说明
无返回值。
示例
C++
C#
void foo() { NIM.DeviceAPI.StartExtendCamera("video_extend"); }
C
typedef void(*nim_vchat_stop_extend_camera)(const char *id, const char *json_extension); void foo() { nim_vchat_stop_extend_camera func = (nim_vchat_stop_extend_camera) GetProcAddress(hInst, "nim_vchat_stop_extend_camera"); fun("video_extend", ""); }
音视频数据
本章节主要介绍音视频数据采集接收及发送功能。
自定义音视频数据开关
通话中修改自定义音视频数据模式,和通话发起时json中扩展的自定义音频数据开关和自定义视频数据开关一致。如果开启自定义音频数据,麦克风数据将不在通话中发送,需要用户通过自定义音频数据接口传入指定的音频数据,其中伴音、声卡等设备的数据如果不开其监听则仍然会发送。开启自定义视频数据,摄像头数据将不会发送,而使用用户自定义视频数据接口传回的数据。
API原型
C++
static static void SetCustomData(bool custom_audio, bool custom_video)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetCustomData(bool custom_audio, bool custom_video, string json_extension, NIMVChatOptHandler cb)
Namespace: NIM
Class: DeviceAPI
C
void nim_vchat_set_custom_data(bool custom_audio, bool custom_video, const char json_extension, nim_vchat_opt_cb_func cb, const void user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
custom_audio | bool | 是否使用自定义音频数据 |
custom_video | bool | 是否使用自定义视频数据 |
json_extension | string | 无效扩展 |
cb | function | 结果回调 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void DeviceStatusCb(nim::NIMDeviceType type, UINT status, const char* path, const char *json, const void *) { } void foo() { nim::VChat::AddDeviceStatusCb(nim::kNIMDeviceTypeVideo, &DeviceStatusCb); }
C#
void foo() { NIM.DeviceAPI.AddDeviceStatusCb(NIM.NIMDeviceType.kNIMDeviceTypeVideo, (type, status, devicePath) => { }); }
C
void DeviceStatusCb(nim::NIMDeviceType type, UINT status, const char* path, const char *json, const void *) { } typedef void(*nim_vchat_add_device_status_cb)(nim::NIMDeviceType type, nim_vchat_device_status_cb_func cb, const void *user_data); void foo() { nim_vchat_add_device_status_cb func = (nim_vchat_add_device_status_cb) GetProcAddress(hInst, "nim_vchat_add_device_status_cb"); fun(nim::kNIMDeviceTypeVideo, &DeviceStatusCb); }
监听音频数据
API介绍
监听音频数据(可以不监听,通过启动设备kNIMDeviceTypeAudioOut和kNIMDeviceTypeAudioOutChat由底层播放)。
API原型
C++
static void SetAudioDataCb(bool capture, nim_vchat_audio_data_cb_func cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetAudioCaptureDataCb(AudioDataHandler handler, NIMVChatCustomAudioJsonEx audioJsonEx)
static void SetAudioReceiveDataCb(AudioDataHandler handler, NIMVChatCustomAudioJsonEx audioJsonEx)
Namespace: NIM
Class: DeviceAPI
C
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(C/C++) | bool | true表示监听麦克风采集数据,false表示监听通话中对方音频数据。 |
cb(C/C++)/handler(C#) | function | 结果回调,见nim_device_def.h。 |
json_extension(C) | string | 扩展Json string:kNIMDeviceSampleRate(要求返回的音频数据为指定的采样频,缺省为0使用默认采样频)。 |
audioJsonEx(C#) | object | C接口json_extension的封装类。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void SetDataCb(unsigned __int64 time, const char *data, unsigned int size, const char *json_extension, const void *user_data) { } void foo() { nim::VChat::SetAudioDataCb(true, &SetDataCb); }
C#
void AudioDataCaptureHandler(UInt64 time, IntPtr data, uint size, int rate) { } void foo() { NIM.DeviceAPI.SetAudioCaptureDataCb(AudioDataCaptureHandler); }
C
void SetDataCb(unsigned __int64 time, const char *data, unsigned int size, const char *json_extension, const void *user_data) { } typedef void(*nim_vchat_set_audio_data_cb)(bool capture, const char* json_extension, nim_vchat_audio_data_cb_func cb, const void *user_data); void foo() { nim_vchat_set_audio_data_cb func = (nim_vchat_set_audio_data_cb) GetProcAddress(hInst, "nim_vchat_set_audio_data_cb"); fun(true, "", &SetDataCb, nullptr); }
监听音频伴音数据
API介绍
监听扩展音频数据。主要返回伴音、声卡采集音等数据。监听后的数据发送情况见NIMAudioDataCbType的定义。
API原型
C++
暂无
C#
static void SetAudioDataCbEx(NIMAudioDataCbType type, string json_extension, AudioDataExHandler handler)
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API void nim_vchat_set_audio_data_cb_ex(int type, const char *json_extension, nim_vchat_audio_data_cb_func_ex cb, const void *user_data)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 指定NIMAudioDataCbType,监听伴音数据时,一旦监听,底层将不再混音。 |
json_extension | string | json扩展字段,参考NIMAudioDataCbType的说明。 |
cb(C)/handler(C#) | function | 结果回调,见nim_device_def.h。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
- NIMAudioDataCbType
枚举定义 | 值 | 说明 |
---|---|---|
kNIMAudioDataCbTypeHook | 1 | 实时返回伴音数据,伴音数据保留原始的格式,但伴音不再混音到通话数据中 |
kNIMAudioDataCbTypeHookAndMic | 2 | 定时返回伴音和麦克风、声卡的混音数据(伴音或声卡必须工作,麦克风可以不工作),允许重采样(json中带kNIMDeviceSampleRate和kNIMVolumeWork),返回单声道数据 |
返回值说明
无返回值。
示例
C++
C#
void Handler(ulong time, IntPtr data, uint size,int channels, int rate, int volume, string json_extension) { } void foo() { NIM.DeviceAPI.SetAudioDataCbEx(NIM.NIMAudioDataCbType.kNIMAudioDataCbTypeHook, "", Handler); }
C
void SetDataExCb(uint64_t time, const char *data, uint32_t size, int channels, int rate, int volume, const char *json_extension, const void *user_data) { } typedef void(*nim_vchat_set_audio_data_cb_ex)(int type, const char *json_extension, nim_vchat_audio_data_cb_func_ex cb, const void *user_data); void foo() { nim_vchat_set_audio_data_cb_ex func = (nim_vchat_set_audio_data_cb_ex) GetProcAddress(hInst, "nim_vchat_set_audio_data_cb_ex"); fun(1, "", &SetDataCb, nullptr); }
监听远端音频数据
API介绍
通话中设置监听远端音频数据扩展接口,成员进入后才能设置,成员退出后设置失效。该接口数据回调为同步回调,不允许在回调中做耗时操作。由于数据回调需要长期保存,为了接口的通用性,c++接口与c接口实现有所区别。
API原型
C++
static void SetRemoteAudioDataCb(RemoteAudioDataCallback cb)
static void AddRemoteAudioDataCb(const std::string& uid, OptCallback cb)
static void RemoveRemoteAudioDataCb(const std::string& uid, OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API void nim_vchat_set_remote_audio_data_cb(const char *uid, nim_vchat_remote_audio_data_cb_func remote_data_cb, const void *remote_data_cb_user_data, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
c接口
参数 | 类型 | 说明 |
---|---|---|
uid | string | 对端accid |
remote_data_cb | function | 数据回调 |
remote_data_cb_user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数remote_data_cb,不做任何处理! |
json_extension | string | json扩展字段,参考NIMAudioDataCbType的说明。 |
cb | function | 结果回调,该回调返回本次操作接口。 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
c++接口中通过SetRemoteAudioDataCb封装,设置统一的数据回调cb来实现数据接口,并由AddRemoteAudioDataCb和RemoveRemoteAudioDataCb来实现回调添加逻辑。回调cb的有效性由SetRemoteAudioDataCb决定,但是回调是否执行由RemoveRemoteAudioDataCb移除,或者成员退出及通话结束时,该成员的数据回调不再执行。
而c接口中nim_vchat_set_remote_audio_data_cb通过该接口来设置回调逻辑,回调remote_data_cb的有效期由接口设置及通话中成员进出来决定。当设置回调为空,或者成员退出及通话结束时,回调失效。
返回值说明
无返回值。
示例
C++
C
void SetRemoteAudioDataOptCallback(bool ret, int code, const char *json_extension, const void *user_data) { if (!ret) { //fail } } void RemoteAudioDataCallback(unsigned __int64 time, const char *data, unsigned int size, int channels, int rate, const char *json_extension, const void *user_data) { //data process } typedef void(*nim_vchat_set_remote_audio_data_cb)(const char *uid, nim_vchat_remote_audio_data_cb_func remote_data_cb, const void *remote_data_cb_user_data, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_set_remote_audio_data_cb func = (nim_vchat_set_remote_audio_data_cb) GetProcAddress(hInst, "nim_vchat_set_remote_audio_data_cb"); fun("accid", &RemoteAudioDataCallback, nullptr, "", &SetRemoteAudioDataOptCallback, nullptr); }
监听视频数据
API介绍
监听视频数据,如果是辅助摄像头数据,在回调中会返回辅助摄像头的id。
API原型
C++
static void SetVideoDataCb(bool capture, nim_vchat_video_data_cb_func cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetVideoCaptureDataCb(VideoDataHandler handler, NIMVChatCustomVideoJsonEx videoJsonEx)
static void SetVideoReceiveDataCb(VideoDataHandler handler, string json_extension = "")
Namespace: NIM
Class: DeviceAPI
C
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(C/C++) | bool | true表示监听采集数据(包括辅助摄像头数据),false表示监听通话中对方视频数据。 |
cb(C/C++)/handler(C#) | function | 结果回调 |
json_extension(C/C#) | string | 扩展Json string:kNIMVideoSubType(缺省为kNIMVideoSubTypeARGB)。 |
videoJsonEx(C#) | object | C接口中json_extension的封装类。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
- NIMVideoSubType 视频格式类型
枚举定义 | 值 | 说明 |
---|---|---|
kNIMVideoSubTypeARGB | 0 | 32位位图格式 存储 (B,G,R,A)... |
kNIMVideoSubTypeRGB | 1 | 24位位图格式 存储 (B,G,R)... |
kNIMVideoSubTypeI420 | 2 | YUV格式,存储 yyyyyyyy...uu...vv... |
返回值说明
无返回值。
示例
C++
void SetDataCb(unsigned __int64 time, const char *data, unsigned int size, unsigned int width, unsigned int height, const char *json_extension, const void *user_data) { } void foo() { nim::VChat::SetVideoDataCb(true, &SetDataCb); }
C#
void VideoDataCaptureHandler(UInt64 time, IntPtr data, UInt32 size, UInt32 width, UInt32 height, string json_extension, IntPtr user_data) { } void foo() { JObject jo = new JObject(); jo.Add(new JProperty("subtype", NIMVideoSubType.kNIMVideoSubTypeI420)); string json_extention = jo.ToString(); NIM.DeviceAPI.SetVideoCaptureDataCb(VideoDataCaptureHandler,json_extention); }
C
void SetDataCb(unsigned __int64 time, const char *data, unsigned int size, unsigned int width, unsigned int height, const char *json_extension, const void *user_data) { } typedef void(*nim_vchat_set_video_data_cb)(bool capture, const char* json_extension, nim_vchat_video_data_cb_func cb, const void *user_data); void foo() { nim_vchat_set_video_data_cb func = (nim_vchat_set_video_data_cb) GetProcAddress(hInst, "nim_vchat_set_video_data_cb"); Json::FastWriter fs; Json::Value value; value[nim::kNIMVideoSubType] = kNIMVideoSubTypeI420; std::string json_value = fs.write(value); func(true, json_value.c_str(), &SetDataCb, nullptr); }
自定义音频数据输入
API介绍
自定义音频数据接口, 采样位深只支持16或32,如果是浮点型数据先转成整型。kNIMDeviceSampleRate支持8000,16000,32000,44100。
API原型
C++
暂无
C#
static bool CustomAudioData(ulong time, IntPtr data, uint size, NIMCustomAudioDataInfo info)
Namespace: NIM
Class: DeviceAPI
C
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(C) | string | 扩展Json string:kNIMDeviceSampleRate采样频和kNIMDeviceSampleBit采样位深,默认如{"sample_rate":16000, "sample_bit":16}。 |
info(C#) | object | C接口中json_extension的封装类。 |
返回值说明
调用成功返回true,调用失败返回false。
示例
C++
C#
void foo(ulong time, IntPtr data, uint size) { NIM.DeviceAPI.CustomAudioData(time, data, size, null); }
C
typedef void(*nim_vchat_custom_audio_data)(uint64_t time, const char *data, uint32_t size, const char *json_extension); void foo(uint64_t time, const char* data, int size) { nim_vchat_custom_audio_data func = (nim_vchat_custom_audio_data) GetProcAddress(hInst, "nim_vchat_custom_audio_data"); Json::FastWriter fs; Json::Value value; value[nim::kNIMDeviceSampleRate] = 44100; std::string json_value = fs.write(value); func(time, data, size, json_value.c_str()); }
自定义伴音数据输入
API介绍
自定义伴音数据接口, 采样位深只支持16,如果是浮点型数据先转成整型。该接口不依赖自定义数据模式,允许用户外部输入多路伴音数据,在通话中混音发送。传入的数据必须是10ms的整数倍。
API原型
C++
static bool AccompanyingSound(unsigned char id, uint64_t time, const char *data, unsigned int size, unsigned int rate, unsigned int channels, const char *json_extension)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static bool NimVchatAccompanyingSound(Byte id, UInt64 time, IntPtr data, UInt32 size, UInt32 rate, UInt32 channels,string json_extension)
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API bool nim_vchat_accompanying_sound(unsigned char id, unsigned uint64_t time, const char *data, unsigned int size, unsigned int rate, unsigned int channels, const char *json_extension)
File: nim_device.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
id | Byte | id |
time | unsigned long long | 时间,毫秒级。 |
data | void* | 音频数据,pcm格式。 |
size | unsigned int | data的数据长度。 |
rate | unsigned int | 音频采样频。 |
channels | unsigned int | 音频采样通道。 |
json_extension(C) | string | 无效扩展 |
返回值说明
调用成功返回true,调用失败返回false。
示例
C++
void foo(uint64_t time, const char* data, int size) { nim::VChat::AccompanyingSound(1, time, data, size, 44100, 1, ""); }
C#
void foo(ulong time, IntPtr data, uint size) { NIM.DeviceAPI.NimVchatAccompanyingSound(1, time, data, size, 44100, 1, null); }
C
typedef bool(*nim_vchat_accompanying_sound)(unsigned char id, unsigned __int64 time, const char *data, unsigned int size, unsigned int rate, unsigned int channels, const char *json_extension); void foo(uint64_t time, const char* data, int size) { nim_vchat_accompanying_sound func = (nim_vchat_accompanying_sound) GetProcAddress(hInst, "nim_vchat_accompanying_sound"); func(1, time, data, size, 44100, 1, ""); }
自定义视频数据输入
API介绍
自定义视频数据
API原型
C++
static bool CustomVideoData(uint64_t time, const char *data, unsigned int size, unsigned int width, unsigned int height, const char *json_extension)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static bool CustomVideoData(ulong time, IntPtr data, uint size, uint width, uint height, NIMCustomVideoDataInfo info)
Namespace: NIM
Class: DeviceAPI
C
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(C/C++) | string | 扩展Json string,kNIMVideoSubType视频数据格式(缺省为kNIMVideoSubTypeI420)。 |
info(C#) | object | C接口中json_extension的封装类。 |
返回值说明
调用成功返回true,调用失败返回false。
示例
C++
void foo() { static int64_t timestamp = 0; std::string data; data.resize(1280 * 720 * 4); int32_t w, h; w = 0; h = 0; bool ret = nim_comp::VideoManager::GetInstance()->video_frame_mng_.GetVideoFrame("", timestamp, (char*)data.c_str(), w, h, false, false); if (ret) { int32_t width = w; int32_t height = h; int32_t wxh = width*height; int32_t data_size = wxh * 3 / 2; //均方差滤波 std::string beauty_src_data; beauty_src_data.resize(wxh * 4); nim_comp::YUV420ToARGB((char*)data.c_str(), (char*)beauty_src_data.c_str(), width, height); //采用色彩平衡算法进行美白 nim_comp::colorbalance_rgb_u8((unsigned char*)beauty_src_data.c_str(), wxh, (size_t)(wxh * 2 / 100), (size_t)(wxh * 8 / 100), 4); nim_comp::ARGBToYUV420((char*)beauty_src_data.c_str(), (char*)data.c_str(), width, height); //采用均方差滤波进行磨皮 nim_comp::smooth_process((uint8_t*)data.c_str(), width, height, 10, 0, 200); //保存用于预览 std::string json; video_frame_mng_.AddVideoFrame(true, 0, data.c_str(), data_size, w, h, json, nim_comp::VideoFrameMng::Ft_I420); //发送 nim::VChat::CustomVideoData(0, data.c_str(), data_size, w, h, nullptr); } }
C#
void foo(object sender, VideoEventAgrs e) { uint size=Convert.ToUInt32(e.Frame.Width*e.Frame.Height*3/2); //处理数据 byte[] i420=NIMDemo.LivingStreamSDK.YUVHelper.ARGBToI420(e.Frame.Data,e.Frame.Width,e.Frame.Height); Beauty.Smooth.smooth_process(i420,e.Frame.Width,e.Frame.Height,10,0,200); e.Frame.Data = NIMDemo.LivingStreamSDK.YUVHelper.I420ToARGB(i420, e.Frame.Width, e.Frame.Height); //发送自定义数据 TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); ulong time = Convert.ToUInt64(ts.TotalMilliseconds); NIMDemo.LivingStreamSDK.YUVHelper.i420Revert(ref i420,e.Frame.Width,e.Frame.Height); IntPtr unmanagedPointer = Marshal.AllocHGlobal(i420.Length); Marshal.Copy(i420, 0, unmanagedPointer, i420.Length); NIM.DeviceAPI.CustomVideoData(time, unmanagedPointer, size, (uint)e.Frame.Width, (uint)e.Frame.Height); Marshal.FreeHGlobal(unmanagedPointer); }
C
typedef bool(*nim_vchat_custom_video_data)(unsigned __int64 time, const char *data, unsigned int size, unsigned int width, unsigned int height, const char *json_extension); void foo() { nim_vchat_custom_video_data func = (nim_vchat_custom_video_data) GetProcAddress(hInst, "nim_vchat_custom_video_data"); func(time, data, size, width, height, ""); }
音视处理
本章节主要介绍网易云信提供的各种音频前处理功能。前处理介于采集和编码之间,音频前处理包括降噪、回音消除、人声检测等。 同时,网易云信还提供了音视频采集数据的回调功能,所以除了SDK自带的一些音视频的前处理功能,开发者可以利用音视频采集数据的回调功能,实现自定义的音视频数据前处理,包括接入第三方变声、美颜算法。
音频音量设置
API介绍
设置音量,默认255,且音量均由软件换算得出,设置麦克风音量自动调节后麦克风音量参数无效。
获取设置的音量。
设置麦克风音量自动调节。
获取是否自动调节麦克风音量。
API原型
C++
static void SetAudioVolumn(unsigned char volumn, bool capture)
static unsigned char GetAudioVolumn(bool capture);
static void SetAudioInputAutoVolumn(bool auto_volumn)
static bool GetAudioInputAutoVolumn()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
public static byte AudioCaptureVolumn
{
get { return DeviceNativeMethods.nim_vchat_get_audio_volumn(true); }
set { DeviceNativeMethods.nim_vchat_set_audio_volumn(value, true); }
}
public static byte AudioPlayVolumn
{
get { return DeviceNativeMethods.nim_vchat_get_audio_volumn(false); }
set { DeviceNativeMethods.nim_vchat_set_audio_volumn(value, false); }
}
public static bool AudioCaptureAutoVolumn
{
get { return DeviceNativeMethods.nim_vchat_get_audio_input_auto_volumn(); }
set { DeviceNativeMethods.nim_vchat_set_audio_input_auto_volumn(value); }
}
Namespace: NIM
Class: DeviceAPI
C
NIM_SDK_DLL_API void nim_vchat_set_audio_volumn(unsigned char volumn, bool capture)
NIM_SDK_DLL_API unsigned char nim_vchat_get_audio_volumn(bool capture)
NIM_SDK_DLL_API void nim_vchat_set_audio_input_auto_volumn(bool auto_volumn)
NIM_SDK_DLL_API bool nim_vchat_get_audio_input_auto_volumn()
File: nim_device.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
volumn | unsigned char | SetAudioVolumn(C++) AudioCaptureVolumn.get(C#) nim_vchat_set_audio_volumn(C) |
要设置的音量大小。 |
capture | bool | SetAudioVolumn / GetAudioVolumn(C++) nim_vchat_set_audio_volumn / nim_vchat_get_audio_volumn(C) |
true表示设置麦克风音量,false表示设置播放音量。C#是以两个不同的类来区分。 |
auto_volumn | bool | SetAudioInputAutoVolumn(C++) nim_vchat_set_audio_input_auto_volumn(C) |
true表示麦克风音量自动调节,false表示麦克风音量不自动调节,这时nim_vchat_set_audio_volumn中麦克风音量参数生效。 |
返回值说明
Set函数无返回值。
Get函数返回设置的音量或者是否自动调节音量。
示例
C++
void foo() { nim::VChat::SetAudioVolumn(255, true); //设置麦克风音量 int output_audio_volume = nim::VChat::SetAudioVolumn(false); //获取音频播放音量 nim::VChat::SetAudioInputAutoVolumn(true); //设置自动调节麦克风音量 }
C#
void foo() { NIM.DeviceAPI.AudioCaptureVolumn = 200; //设置麦克风音量 NIM.DeviceAPI.AudioPlayVolumn = 128; //设置音频播放音量 byte output_audio_volume = NIM.DeviceAPI.AudioPlayVolumn; //获取音频播放音量 NIM.DeviceAPI.AudioCaptureAutoVolumn = false; //设置不自动调节麦克风音量 }
C
typedef void(*nim_vchat_set_audio_volumn)(unsigned char volumn, bool capture); typedef unsigned char(*nim_vchat_get_audio_volumn)(bool capture); typedef void(*nim_vchat_set_audio_input_auto_volumn)(bool auto_volumn); typedef bool(*nim_vchat_get_audio_input_auto_volumn)(); void foo() { nim_vchat_set_audio_volumn func1 = (nim_vchat_set_audio_volumn) GetProcAddress(hInst, "nim_vchat_set_audio_volumn"); nim_vchat_get_audio_volumn func2 = (nim_vchat_get_audio_volumn) GetProcAddress(hInst, "nim_vchat_get_audio_volumn"); nim_vchat_set_audio_input_auto_volumn func3 = (nim_vchat_set_audio_volumn) GetProcAddress(hInst, "nim_vchat_set_audio_input_auto_volumn"); nim_vchat_get_audio_input_auto_volumn func4 = (nim_vchat_set_audio_volumn) GetProcAddress(hInst, "nim_vchat_get_audio_input_auto_volumn"); func1(255, true); //设置麦克风音量 int output_audio_volume = func2(false); //获取音频播放音量 func3(true); //设置自动调节麦克风音量 }
音频前处理开关
API介绍
设置底层针对麦克风采集数据处理开关接口,默认全开(此接口是全局接口,在sdk初始化后设置一直有效)。
API原型
C++
static void SetAudioProcess(bool aec, bool ns, bool vad)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetAudioProcessInfo(bool aec, bool ns, bool vad)
Namespace: NIM
Class: DeviceAPI
C
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表示关闭。 |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::SetAudioProcess(false, false, false); }
C#
void foo() { NIM.DeviceAPI.SetAudioProcessInfo(bool aec,bool ns,bool vid) }
C
typedef bool(*nim_vchat_set_audio_process_info)(bool aec, bool ns, bool vid); void foo() { nim_vchat_set_audio_process_info func = (nim_vchat_set_audio_process_info) GetProcAddress(hInst, "nim_vchat_set_audio_process_info"); func(false, false, false); }
音视频编解码
设置视频最大编码码率
API介绍
通话中修改视频码率,有效区间[100kb,2000kb],如果设置video_bitrate为0则取默认码率。
API原型
C++
static void SetVideoBitrate(int video_bitrate)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
暂无
C
NIM_SDK_DLL_API void nim_vchat_set_video_bitrate(int video_bitrate, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File:nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
video_bitrate | int | 视频码率值 |
json_extension(C) | string | 无效扩展字段 |
cb(C) | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::SetVideoBitrate(1000); }
C#
C
typedef void(*nim_vchat_set_video_bitrate)(int video_bitrate, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_set_video_bitrate func = (nim_vchat_set_video_bitrate) GetProcAddress(hInst, "nim_vchat_set_video_bitrate"); func(1000, "", nullptr, nullptr); }
切换视频质量
API介绍
通话中修改发送画面分辨率,发送的分辨率限制只对上限限制,如果数据源小于发送分辨率,不会进行放大。
API原型
C++
static void SetVideoQuality(int video_quality)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetVideoQuality(NIMVChatVideoQuality video_quality, string json_extension, nim_vchat_opt_cb_func cb)
Namespace: NIM
Class:VChatAPI
C
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_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
video_quality | int | 分辨率模式 见NIMVChatVideoQuality定义。 |
json_extension | string | 无效扩展字段。 |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。 |
user_data | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::SetVideoQuality(nim::kNIMVChatVideoQuality720p); }
C#
void foo() { nim::VChat::SetVideoQuality(nim::kNIMVChatVideoQuality720p); }
C
typedef void(*nim_vchat_set_video_bitrate)(int video_bitrate, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_set_video_bitrate func = (nim_vchat_set_video_bitrate) GetProcAddress(hInst, "nim_vchat_set_video_bitrate"); func(1000, "", nullptr, nullptr); }
切换视频帧率
API介绍
实时设置视频发送帧率上限。
API原型
C++
static void SetFrameRate(NIMVChatVideoFrameRate frame_rate)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetFrameRate(NIMVChatVideoFrameRate frame_rate, string json_extension, NIMVChatOptHandler cb)
Namespace: NIM
Class:VChatAPI
C
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(C/C#) | string | 无效备用。 |
cb(C/C#) | function | 结果回调,见nim_vchat_def.h。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::SetFrameRate(nim::kNIMVChatVideoFrameRateNormal); }
C#
void foo() { NIM.VChatAPI.SetFrameRate(NIMVChatVideoFrameRate.kNIMVChatVideoFrameRateNormal, "", null, IntPtr.Zero); }
C
typedef void(*nim_vchat_set_frame_rate)(NIMVChatVideoFrameRate frame_rate, const char* json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_set_frame_rate func = (nim_vchat_set_frame_rate) GetProcAddress(hInst, "nim_vchat_set_frame_rate"); func(nim::kNIMVChatVideoFrameRateNormal, "", nullptr, nullptr); }
切换视频裁剪模式
API介绍
设置发送时视频画面的长宽比例裁剪模式,裁剪的时候不改变横竖屏(重新发起时也生效)。
获取视频画面的裁剪模式。
API原型
C++
static void SetVideoFrameScaleType(NIMVChatVideoFrameScaleType type)
static int GetVideoFrameScaleType()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetVideoFrameScale(NIMVChatVideoFrameScaleType type)
static NIMVChatVideoFrameScaleType GetVideoFrameScale()
Namespace: NIM
Class:VChatAPI
C
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 | SetVideoFrameScaleType(C++) SetVideoFrameScale(C#) nim_vchat_set_video_frame_scale(C) |
裁剪模式,见NIMVChatVideoFrameScaleType。 |
返回值说明
Set函数无返回值。
Get函数返回当前的裁剪模式,见NIMVChatVideoFrameScaleType。
示例
C++
void foo() { nim::VChat::SetVideoFrameScaleType(kNIMVChatVideoFrameScale16x9); bool type = nim::VChat::GetVideoFrameScaleType(); }
C#
void foo() { NIM.VChatAPI.SetVideoFrameScale(kNIMVChatVideoFrameScale16x9); bool type = NIM.VChatAPI.GetVideoFrameScale(); }
C
typedef void(*nim_vchat_set_video_frame_scale)(enum NIMVChatVideoFrameScaleType type); typedef int(*nim_vchat_get_video_frame_scale_type)(); void foo() { nim_vchat_set_video_frame_scale func1 = (nim_vchat_set_video_frame_scale) GetProcAddress(hInst, "nim_vchat_set_video_frame_scale"); nim_vchat_get_video_frame_scale_type func2 = (nim_vchat_get_video_frame_scale_type) GetProcAddress(hInst, "nim_vchat_get_video_frame_scale_type"); func1(kNIMVChatVideoFrameScale16x9); int type = func2(); }
切换视频编码模式
API介绍
在通话过程中动态设置视频编码模式
API原型
C++
static void SelectVideoAdaptiveStrategy(NIMVChatVideoEncodeMode mode, const std::string& json_extension, Opt2Callback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void NIMVChatSelectVideoAdaptiveStrategy(NIMVChatVideoEncodeMode mode, string json_extension, NIMVChatOptHandler cb)
Namespace: NIM
Class:VChatAPI
C
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 | string | 无效扩展 |
cb | function | 结果回调 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::SelectVideoAdaptiveStrategy(kNIMVChatVEModeScreen, "", Opt2Callback()); }
C#
void foo() { NIM.VChatAPI.NIMVChatSelectVideoAdaptiveStrategy(kNIMVChatVEModeScreen, "", null); }
C
typedef void(*nim_vchat_select_video_adaptive_strategy)(NIMVChatVideoEncodeMode mode, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_select_video_adaptive_strategy func = (nim_vchat_select_video_adaptive_strategy) GetProcAddress(hInst, "nim_vchat_select_video_adaptive_strategy"); func(kNIMVChatVEModeScreen, "", NULL, NULL); }
音效管理
加载音效
API介绍
预加载音效文件(空路径时为移除),音效个数限制5个,时长限制10秒;暂时只支持wav和mp3格式。建议使用通用的采样频的文件,如16000、32000、44100、48000等,不建议使用22050及11025的采样率。
API原型
C++
static void PreloadEffect(int id, const std::string& path, EffectOptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
暂无
C
NIM_SDK_DLL_API void nim_vchat_preload_effect(int id, const char *path, const char *json_extension, nim_vchat_audio_effect_opt_cb_func cb, const void *user_data)
File:nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
id | int | 音效id,重复时覆盖 |
path | string | 音效文件的本地路径,如果填空为移除音效 |
json_extension(C) | string | 无效扩展字段 |
cb(C) | function | 结果回调,见nim_device_def.h,返回的json_extension无效。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::PreloadEffect(1, "d:\\1.mp3", EffectOptCallback()); }
C#
C
typedef void(*nim_vchat_preload_effect)(int id, const char *path, const char *json_extension, nim_vchat_audio_effect_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_preload_effect func = (nim_vchat_preload_effect) GetProcAddress(hInst, "nim_vchat_preload_effect"); func(1, "d:\\1.mp3", "", nullptr, nullptr); }
播放音效
API介绍
播放音效,由kNIMDeviceTypeAudioOutChat设备播放。异步回调操作结果,成功则在播放结束后回调;当音效未加载或者前一次同一个id的音效未播放完成,则失败。
API原型
C++
static void PlayEffect(int id, int loop_count, EffectOptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
暂无
C
NIM_SDK_DLL_API void nim_vchat_play_effect(int id, int loop_count, const char *json_extension, nim_vchat_audio_effect_opt_cb_func cb, const void *user_data)
File:nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
id | int | 音效id |
loop_count | int | 播放次数,0无效,小于零无限循环 |
json_extension(C) | string | 无效扩展字段 |
cb(C) | function | 结果回调,见nim_device_def.h,返回的json_extension无效。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::PlayEffect(1, 2, EffectOptCallback()); }
C#
C
typedef void(*nim_vchat_play_effect)(int id, int loop_count, const char *json_extension, nim_vchat_audio_effect_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_play_effect func = (nim_vchat_play_effect) GetProcAddress(hInst, "nim_vchat_play_effect"); func(1, 2, "", nullptr, nullptr); }
结束播放音效
API介绍
结束播放音效。正在播放的音效会触发其播放回调。
API原型
C++
static void StopEffect(int id, EffectOptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
暂无
C
NIM_SDK_DLL_API void nim_vchat_stop_effect(int id, const char *json_extension, nim_vchat_audio_effect_opt_cb_func cb, const void *user_data)
File:nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
id | int | 音效id |
json_extension(C) | string | 无效扩展字段 |
cb(C) | function | 结果回调,见nim_device_def.h,返回的json_extension无效。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void foo() { nim::VChat::StopEffect(1, EffectOptCallback()); }
C#
C
typedef void(*nim_vchat_stop_effect)(int id, const char *json_extension, nim_vchat_audio_effect_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_stop_effect func = (nim_vchat_stop_effect) GetProcAddress(hInst, "nim_vchat_stop_effect"); func(1, "", nullptr, nullptr); }