/// <summary> /// 批量设置属性 /// </summary> /// <param name="properties">属性集合</param> /// <param name="isPersistence">是否持久化保存</param> public void SetProperties(IDictionary <PropertyKey, string> properties, bool isPersistence) { if (null != properties && properties.Count > 0) { foreach (var propertyKV in properties) { SetProperty(propertyKV.Key, propertyKV.Value, false); } if (isPersistence) { var errno = PlcmProxy.UpdateConfig(); if (errno != ErrorNumber.OK) { var errMsg = string.Format("更新配置失败,err={0}", errno); log.Error(errMsg); throw new Exception(errMsg); } } } }
/// <summary> /// SDK初始化 /// </summary> /// <param name="config">配置信息</param> private void SDKInit(IDictionary <PropertyKey, string> config) { var errno = ErrorNumber.OK; //注册回调函数 errno = PlcmProxy.InstallCallback(addEventCallback, dispatchEventsCallback, addLogCallback, addDeviceCallback, displayMediaStatisticsCallback, displayCallStatisticsCallback, displayCodecCapabilities, addAppCallback); if (ErrorNumber.OK != errno) { var errMsg = "Register callback functions failed. Error number = " + errno; log.Error(errMsg); throw new Exception(errMsg); } //预初始化 errno = PlcmProxy.PreInitialize(); if (ErrorNumber.OK != errno) { var msg = "Pre-initialization failed. Error number = " + errno.ToString(); log.Error(msg); throw new Exception(msg); } var dispName = config[PropertyKey.PLCM_MFW_KVLIST_KEY_DisplayName]; if (!string.IsNullOrWhiteSpace(dispName)) { config[PropertyKey.PLCM_MFW_KVLIST_KEY_DisplayName] = string.Empty; } qlConfig.SetProperties(config, false); //初始化 errno = PlcmProxy.Initialize(); if (ErrorNumber.OK != errno) { var errMsg = "Initialize failed. Error number = " + errno; log.Error(errMsg); throw new Exception(errMsg); } var version = PlcmProxy.GetVersion(); log.Info("**********************************************************************"); log.Info(" PLCM QLSDK App Initialized Successful ( version: " + version + " )"); log.Info("**********************************************************************"); errno = PlcmProxy.UpdateConfig(); if (errno != ErrorNumber.OK) { var errMsg = string.Format("配置失败, Errno={0}", errno); log.Error(errMsg); throw new Exception(errMsg); } errno = PlcmProxy.RegisterClient(); if (errno != ErrorNumber.OK) { var errMsg = string.Format("Register failed, Errno={0}", errno); log.Error(errMsg); throw new Exception(errMsg); } if (!string.IsNullOrWhiteSpace(dispName)) { qlConfig.SetProperty(PropertyKey.PLCM_MFW_KVLIST_KEY_DisplayName, dispName, true); } //获取音频输入设备信息 var errNo = PlcmProxy.GetDevice(DeviceType.AUDIOINPUT); if (ErrorNumber.OK != errNo) { var errMsg = "Get audio input device failed. Error number = " + errNo; log.Error(errMsg); throw new Exception(errMsg); } //获取视频输入设备信息 errNo = PlcmProxy.GetDevice(DeviceType.VIDEOINPUT); if (ErrorNumber.OK != errNo) { var errMsg = "Get video input device failed. Error number = " + errNo; log.Error(errMsg); throw new Exception(errMsg); } //获取音频输出设备信息 errNo = PlcmProxy.GetDevice(DeviceType.AUDIOOUTPUT); if (ErrorNumber.OK != errNo) { var errMsg = "Get audio output device failed. Error number = " + errNo; log.Error(errMsg); throw new Exception(errMsg); } //获取显示器信息 errNo = PlcmProxy.GetDevice(DeviceType.MONITOR); if (ErrorNumber.OK != errNo) { var errMsg = "Get monitor device failed. Error number = " + errNo; log.Error(errMsg); throw new Exception(errMsg); } //设置呼叫数自动 errNo = PlcmProxy.SetRemoteVideoStreamNumber(-1, 0, 0); if (ErrorNumber.OK != errNo) { var errMsg = "SetRemoteVideoStreamNumber failed. Error number = " + errNo; log.Error(errMsg); throw new Exception(errMsg); } }
/// <summary> /// 设置属性 /// </summary> /// <param name="key">属性名</param> /// <param name="value">属性值</param> /// <param name="isPersistence">是否持久化保存</param> public void SetProperty(PropertyKey key, string value, bool isPersistence) { log.Info(string.Format(string.Format("SetProperty:{0}={1}", key, value))); properties[key] = value; if (key <= PropertyKey.PLCM_MFW_KVLIST_KEY_MAXSYS) { var errno = PlcmProxy.SetProperty(key, value); if (errno != ErrorNumber.OK) { var errMsg = string.Format("{0}设定失败,err={1}", key, errno); log.Error(errMsg); throw new Exception(errMsg); } if (isPersistence) { errno = PlcmProxy.UpdateConfig(); if (errno != ErrorNumber.OK) { var errMsg = string.Format("{0}更新配置失败,err={1}", key, errno); log.Error(errMsg); throw new Exception(errMsg); } } } else { switch (key) { case PropertyKey.LocalAddr: break; case PropertyKey.CalleeAddr: break; case PropertyKey.AUDIO_INPUT_DEVICE: { string audioOutput = null; if (properties.ContainsKey(PropertyKey.AUDIO_OUTPUT_DEVICE)) { audioOutput = properties[PropertyKey.AUDIO_OUTPUT_DEVICE]; } PlcmProxy.SetAudioDevice(value, audioOutput); } break; case PropertyKey.AUDIO_OUTPUT_DEVICE: { string audioInput = null; if (properties.ContainsKey(PropertyKey.AUDIO_INPUT_DEVICE)) { audioInput = properties[PropertyKey.AUDIO_INPUT_DEVICE]; } PlcmProxy.SetAudioDevice(audioInput, value); PlcmProxy.SetAudioDeviceForRingtone(value); } break; case PropertyKey.AUDIO_OUTPUT_DEVICE_FOR_RINGTONE: { } break; case PropertyKey.VIDEO_INPUT_DEVICE: { PlcmProxy.SetVideoDevice(value); } break; case PropertyKey.MONITOR_DEVICE: break; /*Sound Effects*/ case PropertyKey.SOUND_INCOMING: break; case PropertyKey.SOUND_CLOSED: break; case PropertyKey.SOUND_RINGING: break; case PropertyKey.SOUND_HOLD: break; //ICE token case PropertyKey.ICE_AUTH_TOKEN: break; case PropertyKey.StaticImage: { #region StaticImage if (!string.IsNullOrWhiteSpace(value)) { var filePath = Path.Combine(Application.StartupPath, value); if (File.Exists(filePath)) { var img = new Bitmap(filePath); if (null != img) { int w = img.Width; int h = img.Height; var buffer = new byte[w * h * 4]; var idx = 0; for (var row = 0; row < h; row++) { for (var col = 0; col < w; col++) { var color = img.GetPixel(col, row); //转换为RGBA模式 buffer[idx] = color.R; idx++; buffer[idx] = color.G; idx++; buffer[idx] = color.B; idx++; buffer[idx] = color.A; idx++; } } int length = buffer.Length; var intPtrBuffer = IntPtrHelper.IntPtrFromBytes(buffer); var errno = PlcmProxy.SetStaticImage(intPtrBuffer, length, w, h); if (ErrorNumber.OK != errno) { var errMsg = "setStaticImage failed,errno=" + errno; log.Error(errMsg); //throw new Exception(errMsg); } } } } #endregion } break; case PropertyKey.LayoutType: break; case PropertyKey.CryptoSuiteType: break; case PropertyKey.SRTPKey: break; case PropertyKey.AuthToken: break; } } }