diff --git a/JianGongYun/TRTC/LiveClassroom.cs b/JianGongYun/TRTC/LiveClassroom.cs index ed30a0c..333ddf5 100644 --- a/JianGongYun/TRTC/LiveClassroom.cs +++ b/JianGongYun/TRTC/LiveClassroom.cs @@ -392,10 +392,6 @@ namespace JianGongYun.TRTC /// public static void ResetVideoMain() { } /// - /// 重设主视频(摄像头)网络 - /// - public static void ResetVideoMainQos() { } - /// /// 重设副视频(录屏) /// public static void ResetVideoSub() { } diff --git a/JianGongYun/TRTC/ViewModels/SettingWindowViewModel.cs b/JianGongYun/TRTC/ViewModels/SettingWindowViewModel.cs index 095e695..2800b30 100644 --- a/JianGongYun/TRTC/ViewModels/SettingWindowViewModel.cs +++ b/JianGongYun/TRTC/ViewModels/SettingWindowViewModel.cs @@ -34,15 +34,28 @@ namespace JianGongYun.TRTC.ViewModels /// /// 直播主窗口viewmodel /// - private LiveWindowViewModel LiveWindowViewModel + //private LiveWindowViewModel LiveWindowViewModel + //{ + // get + // { + // return LiveClassroom.CurrentLiveWindow.DataContext == null ? null : LiveClassroom.CurrentLiveWindow.DataContext as LiveWindowViewModel; + // } + //} + + #region 设备属性 + private List LoadDeviceList(TRTCDeviceType deviceType) { - get + var devices = LiveClassroom.lTXDeviceManager.getDevicesList(deviceType); + List devicesList = new List(); + var count = devices.getCount(); + for (uint i = 0; i < count; i++) { - return LiveClassroom.CurrentLiveWindow.DataContext == null ? null : LiveClassroom.CurrentLiveWindow.DataContext as LiveWindowViewModel; + var temp = new ComboBoxEntity { Id = devices.getDevicePID(i), Text = devices.getDeviceName(i) }; + devicesList.Add(temp); } + return devicesList; } - #region 音频属性 /// /// 集合,实时获取 /// @@ -50,15 +63,7 @@ namespace JianGongYun.TRTC.ViewModels { get { - var mics = LiveClassroom.lTXDeviceManager.getDevicesList(ManageLiteAV.TRTCDeviceType.TXMediaDeviceTypeMic); - List micList = new List(); - var count = mics.getCount(); - for (uint i = 0; i < count; i++) - { - var temp = new ComboBoxEntity { Id = mics.getDevicePID(i), Text = mics.getDeviceName(i) }; - micList.Add(temp); - } - return micList; + return LoadDeviceList(TRTCDeviceType.TXMediaDeviceTypeMic); } } @@ -242,6 +247,63 @@ namespace JianGongYun.TRTC.ViewModels } + /// + /// 集合,实时获取 + /// + public List CameraList + { + get + { + return LoadDeviceList(TRTCDeviceType.TXMediaDeviceTypeCamera); + } + } + + /// + /// 当前 + /// + private string _CurrentCamera; + public string CurrentCamera + { + get + { + var tempList = this.CameraList; + if (tempList.Count == 0) + { + return null; + } + if (string.IsNullOrEmpty(_CurrentCamera) || !tempList.Any(a => a.Id == _CurrentCamera))//第一次取或者设备发生变动找不到上次的选择 + { + var localCamera = storage.GetValue(INI_ROOT_KEY, INI_KEY_CHOOSE_CAMERA);//本地缓存 + if (string.IsNullOrEmpty(localCamera))//本地没有就取第一个 + { + _CurrentCamera = tempList.First().Id; + storage.SetValue(INI_ROOT_KEY, INI_KEY_CHOOSE_CAMERA, _CurrentCamera);//生成初始数据 + } + else + { + _CurrentCamera = localCamera; + var temp = tempList.Where(a => a.Id == localCamera).FirstOrDefault(); + if (temp == null)//找不到上次缓存的设备就取第一个 + { + _CurrentCamera = tempList.First().Id; + storage.SetValue(INI_ROOT_KEY, INI_KEY_CHOOSE_CAMERA, _CurrentCamera);//生成初始数据 + } + } + } + return _CurrentCamera; + } + set + { + _CurrentCamera = value; + storage.SetValue(INI_ROOT_KEY, INI_KEY_CHOOSE_CAMERA, value);//生成保存本地 + LiveClassroom.lTXDeviceManager.setCurrentDevice(ManageLiteAV.TRTCDeviceType.TXMediaDeviceTypeCamera, _CurrentCamera);//设置麦克 + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs("CurrentCamera")); + } + } + } + #endregion #region 录屏属性 @@ -435,7 +497,7 @@ namespace JianGongYun.TRTC.ViewModels /// /// 音频质量 /// - private TRTCAudioQuality _LiveAudioLevel = TRTCAudioQuality.TRTCAudioQualityDefault; + private TRTCAudioQuality _LiveAudioLevel = TRTCAudioQuality.TRTCAudioQualityMusic; public TRTCAudioQuality LiveAudioLevel { get @@ -455,70 +517,41 @@ namespace JianGongYun.TRTC.ViewModels { _LiveAudioLevel = value; storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_AUDIO_LEVEL, value.ToString());//生成保存本地 - LiveClassroom.RestartAudio();//重启音频 + //LiveClassroom.RestartAudio();//重启音频 if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("LiveAudioLevel")); } } } + /// /// 摄像画面帧率 /// - private uint _LiveMainFps = 24; - public uint LiveMainFps + private uint _LiveFps = 24; + public uint LiveFps { get { - var liveMainFps = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS);//本地缓存 - if (string.IsNullOrEmpty(liveMainFps)) + var liveFps = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_FPS);//本地缓存 + if (string.IsNullOrEmpty(liveFps)) { - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS, _LiveMainFps.ToString());//生成初始数据 + storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS, _LiveFps.ToString());//生成初始数据 } else { - _LiveMainFps = uint.Parse(liveMainFps); + _LiveFps = uint.Parse(liveFps); } - return _LiveMainFps; + return _LiveFps; } set { - _LiveMainFps = value; - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS, value.ToString());//生成保存本地 + _LiveFps = value; + storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_FPS, value.ToString());//生成保存本地 LiveClassroom.ResetVideoMain();//重设参数 if (PropertyChanged != null) { - PropertyChanged(this, new PropertyChangedEventArgs("LiveMainFps")); - } - } - } - /// - /// 摄像画面码率 - /// - private uint _LiveMainBitrate = 1600; - public uint LiveMainBitrate - { - get - { - var liveMainBitrate = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_BITTRATE);//本地缓存 - if (string.IsNullOrEmpty(liveMainBitrate)) - { - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_BITTRATE, _LiveMainBitrate.ToString());//生成初始数据 - } - else - { - _LiveMainBitrate = uint.Parse(liveMainBitrate); - } - return _LiveMainBitrate; - } - set - { - _LiveMainBitrate = value; - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_BITTRATE, value.ToString());//生成保存本地 - LiveClassroom.ResetVideoMain();//重设参数 - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs("LiveMainBitrate")); + PropertyChanged(this, new PropertyChangedEventArgs("LiveFps")); } } } @@ -545,73 +578,136 @@ namespace JianGongYun.TRTC.ViewModels { _LiveMainLevel = value; storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_LEVEL, value.ToString());//生成保存本地 - LiveClassroom.ResetVideoMainQos();//重设参数 + var pars = QosParams; + LiveClassroom.lTRTCCloud.setNetworkQosParam(ref pars);//重设参数 if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("LiveMainLevel")); } } } - /// - /// 屏幕分享帧率 - /// - private uint _LiveSubFps = 24; - public uint LiveSubFps - { - get - { - var liveSubFps = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_FPS);//本地缓存 - if (string.IsNullOrEmpty(liveSubFps)) - { - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_FPS, _LiveSubFps.ToString());//生成初始数据 - } - else - { - _LiveSubFps = uint.Parse(liveSubFps); - } - return _LiveSubFps; - } - set - { - _LiveSubFps = value; - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_FPS, value.ToString());//生成保存本地 - LiveClassroom.ResetVideoSub();//重新设置副画面参数 - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs("LiveSubFps")); - } - } - } - /// - /// 屏幕分享码率 - /// - private uint _LiveSubBitrate = 2000; - public uint LiveSubBitrate - { - get - { - var liveSubBitrate = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_BITTRATE);//本地缓存 - if (string.IsNullOrEmpty(liveSubBitrate)) - { - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_BITTRATE, _LiveSubBitrate.ToString());//生成初始数据 - } - else - { - _LiveSubBitrate = uint.Parse(liveSubBitrate); - } - return _LiveSubBitrate; - } - set - { - _LiveSubBitrate = value; - storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_BITTRATE, value.ToString());//生成保存本地 - LiveClassroom.ResetVideoSub();//重启音频 - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs("LiveSubBitrate")); - } - } - } + + ///// + ///// 摄像画面帧率 + ///// + //private uint _LiveMainFps = 24; + //public uint LiveMainFps + //{ + // get + // { + // var liveMainFps = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS);//本地缓存 + // if (string.IsNullOrEmpty(liveMainFps)) + // { + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS, _LiveMainFps.ToString());//生成初始数据 + // } + // else + // { + // _LiveMainFps = uint.Parse(liveMainFps); + // } + // return _LiveMainFps; + // } + // set + // { + // _LiveMainFps = value; + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_FPS, value.ToString());//生成保存本地 + // LiveClassroom.ResetVideoMain();//重设参数 + // if (PropertyChanged != null) + // { + // PropertyChanged(this, new PropertyChangedEventArgs("LiveMainFps")); + // } + // } + //} + ///// + ///// 摄像画面码率 + ///// + //private uint _LiveMainBitrate = 1600; + //public uint LiveMainBitrate + //{ + // get + // { + // var liveMainBitrate = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_BITTRATE);//本地缓存 + // if (string.IsNullOrEmpty(liveMainBitrate)) + // { + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_BITTRATE, _LiveMainBitrate.ToString());//生成初始数据 + // } + // else + // { + // _LiveMainBitrate = uint.Parse(liveMainBitrate); + // } + // return _LiveMainBitrate; + // } + // set + // { + // _LiveMainBitrate = value; + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_MAIN_BITTRATE, value.ToString());//生成保存本地 + // LiveClassroom.ResetVideoMain();//重设参数 + // if (PropertyChanged != null) + // { + // PropertyChanged(this, new PropertyChangedEventArgs("LiveMainBitrate")); + // } + // } + //} + + ///// + ///// 屏幕分享帧率 + ///// + //private uint _LiveSubFps = 24; + //public uint LiveSubFps + //{ + // get + // { + // var liveSubFps = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_FPS);//本地缓存 + // if (string.IsNullOrEmpty(liveSubFps)) + // { + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_FPS, _LiveSubFps.ToString());//生成初始数据 + // } + // else + // { + // _LiveSubFps = uint.Parse(liveSubFps); + // } + // return _LiveSubFps; + // } + // set + // { + // _LiveSubFps = value; + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_FPS, value.ToString());//生成保存本地 + // LiveClassroom.ResetVideoSub();//重新设置副画面参数 + // if (PropertyChanged != null) + // { + // PropertyChanged(this, new PropertyChangedEventArgs("LiveSubFps")); + // } + // } + //} + ///// + ///// 屏幕分享码率 + ///// + //private uint _LiveSubBitrate = 2000; + //public uint LiveSubBitrate + //{ + // get + // { + // var liveSubBitrate = storage.GetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_BITTRATE);//本地缓存 + // if (string.IsNullOrEmpty(liveSubBitrate)) + // { + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_BITTRATE, _LiveSubBitrate.ToString());//生成初始数据 + // } + // else + // { + // _LiveSubBitrate = uint.Parse(liveSubBitrate); + // } + // return _LiveSubBitrate; + // } + // set + // { + // _LiveSubBitrate = value; + // storage.SetValue(INI_ROOT_KEY, INI_KEY_LIVE_SUB_BITTRATE, value.ToString());//生成保存本地 + // LiveClassroom.ResetVideoSub();//重启音频 + // if (PropertyChanged != null) + // { + // PropertyChanged(this, new PropertyChangedEventArgs("LiveSubBitrate")); + // } + // } + //} #endregion #region 参数 @@ -688,8 +784,9 @@ namespace JianGongYun.TRTC.ViewModels private string sPath = ".\\TRTCConfig.ini"; //根节点 private const string INI_ROOT_KEY = "TRTCLOCALCONFIG"; - //音频 + //设备 private const string INI_KEY_CHOOSE_MIC = "INI_KEY_CHOOSE_MIC";//当前麦克风 + private const string INI_KEY_CHOOSE_CAMERA = "INI_KEY_CHOOSE_CAMERA";//当前摄像头 private const string INI_KEY_AUDIO_MIC_VOLUME = "INI_KEY_AUDIO_MIC_VOLUME";//麦克风音量 private const string INI_KEY_AUDIO_SPEAKER_VOLUME = "INI_KEY_AUDIO_SOURCE";//播放音量 private const string INI_KEY_AUDIO_SOURCE = "INI_KEY_AUDIO_SOURCE";//音频来源 @@ -703,6 +800,7 @@ namespace JianGongYun.TRTC.ViewModels private const string INI_KEY_SCREEN_RECORDING_DIR = "INI_KEY_SCREEN_RECORDING_DIR";//录制保存路径 //直播 private const string INI_KEY_LIVE_AUDIO_LEVEL = "INI_KEY_LIVE_AUDIO_LEVEL";//直播音频等级 + private const string INI_KEY_LIVE_FPS = "INI_KEY_LIVE_FPS";//直播帧率 private const string INI_KEY_LIVE_MAIN_FPS = "INI_KEY_LIVE_MAIN_FPS";//直播主帧率 private const string INI_KEY_LIVE_MAIN_BITTRATE = "INI_KEY_LIVE_MAIN_BITTRATE";//直播主码率 private const string INI_KEY_LIVE_MAIN_LEVEL = "INI_KEY_LIVE_MAIN_LEVEL";//主画面级别 diff --git a/JianGongYun/TRTC/Windows/SettingWindow.xaml b/JianGongYun/TRTC/Windows/SettingWindow.xaml index ad04db3..a5d2380 100644 --- a/JianGongYun/TRTC/Windows/SettingWindow.xaml +++ b/JianGongYun/TRTC/Windows/SettingWindow.xaml @@ -11,7 +11,7 @@ - 音频设置 + 设备设置 录屏设置 @@ -26,8 +26,12 @@ IndicatorSelectedIndex="0" IndicatorPlacement="Left"> - + + + 摄像头 + + 麦克风 @@ -52,7 +56,7 @@ - + 录制倒计时 @@ -129,6 +133,23 @@ + 帧率(fps) + + + + + + + + + + 网络调控策略 + + + + + +