diff --git a/Demo.Common/Converters/VolumeToScaleConverter.cs b/Demo.Common/Converters/VolumeToScaleConverter.cs new file mode 100644 index 0000000..951e471 --- /dev/null +++ b/Demo.Common/Converters/VolumeToScaleConverter.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; + +namespace Demo.Common.Converters +{ + public class VolumeToScaleConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value != null && double.TryParse(value.ToString(), out double volume)) + { + return Math.Max(0, Math.Min(1, volume / 255.0)); + } + return 0; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Demo.Common/Helpers/AgoraHelper.cs b/Demo.Common/Helpers/AgoraHelper.cs index 6f48fc2..54bc6af 100644 --- a/Demo.Common/Helpers/AgoraHelper.cs +++ b/Demo.Common/Helpers/AgoraHelper.cs @@ -11,7 +11,7 @@ namespace Demo.Common.Helpers { public class AgoraHelper : IRtcEngineEventHandler { - private static uint _localUId; + public static uint _localUId; public static IRtcEngine _RtcEngineInstance; public static int Init(string appId, uint localUid = 0) { @@ -26,6 +26,8 @@ namespace Demo.Common.Helpers ret = _RtcEngineInstance.InitEventHandler(new RtcEngineEventHandler()); _localUId = localUid; + + _RtcEngineInstance.EnableAudioVolumeIndication(200, 3, false); return ret; } @@ -116,7 +118,7 @@ namespace Demo.Common.Helpers if (delUid > 0) { ClearUserVideo(delUid, controlHandle); - } + } return SetupUserVideo(uid, controlHandle); } } diff --git a/Demo.Common/Helpers/RtcEngineEventHandler.cs b/Demo.Common/Helpers/RtcEngineEventHandler.cs index f75435d..63856c7 100644 --- a/Demo.Common/Helpers/RtcEngineEventHandler.cs +++ b/Demo.Common/Helpers/RtcEngineEventHandler.cs @@ -50,8 +50,18 @@ namespace Demo.Common.Helpers public override void OnAudioVolumeIndication(RtcConnection connection, AudioVolumeInfo[] speakers, uint speakerNumber, int totalVolume) { + if (speakers.Length <= 0) + { + return; + } + speakers.ForEach(sp => + { + sp.uid = sp.uid == 0 ? AgoraHelper._localUId : sp.uid; + + + aggregator.GetEvent().Publish(sp); + }); - //aggregator.GetEvent().Publish(); } } diff --git a/Meeting.V2.Demo/Meeting.V2.Demo/Assets/mico.svg b/Meeting.V2.Demo/Meeting.V2.Demo/Assets/mico.svg new file mode 100644 index 0000000..bfaa593 --- /dev/null +++ b/Meeting.V2.Demo/Meeting.V2.Demo/Assets/mico.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Meeting.V2.Demo/Meeting.V2.Demo/Meeting.V2.Demo.csproj b/Meeting.V2.Demo/Meeting.V2.Demo/Meeting.V2.Demo.csproj index e09d979..cbfca6c 100644 --- a/Meeting.V2.Demo/Meeting.V2.Demo/Meeting.V2.Demo.csproj +++ b/Meeting.V2.Demo/Meeting.V2.Demo/Meeting.V2.Demo.csproj @@ -1,6 +1,6 @@  - WinExe + Exe net6.0-windows true True @@ -28,5 +28,6 @@ PreserveNewest + \ No newline at end of file diff --git a/Meeting.V2.Demo/Meeting.V2.Demo/ViewModels/VideoViewModel.cs b/Meeting.V2.Demo/Meeting.V2.Demo/ViewModels/VideoViewModel.cs index 820e1fe..37814d4 100644 --- a/Meeting.V2.Demo/Meeting.V2.Demo/ViewModels/VideoViewModel.cs +++ b/Meeting.V2.Demo/Meeting.V2.Demo/ViewModels/VideoViewModel.cs @@ -18,9 +18,13 @@ namespace Meeting.V2.Demo.ViewModels private VideoView _view; - public VideoViewModel() + public VideoViewModel(IEventAggregator aggregator) { - //aggregator.GetEvent().Subscribe(RenderVideoView); + aggregator.GetEvent().Subscribe(SetUserVolume, + arg => + { + return UserInfo != null && UserInfo.Id > 0 && arg.uid > 0 && arg.uid == UserInfo.Id; + }); } public DelegateCommand LoadedCommand => new DelegateCommand((u) => @@ -28,7 +32,7 @@ namespace Meeting.V2.Demo.ViewModels if (u == null) return; Console.WriteLine($@"LoadedCoommand 被执行了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - this._view = u; + this._view = u; RenderVideoView(); }); @@ -51,6 +55,24 @@ namespace Meeting.V2.Demo.ViewModels } } + private uint microphoneVolume; + /// + /// 用户麦克风音量 + /// + public uint MicrophoneVolume + { + get { return microphoneVolume; } + set { SetProperty(ref microphoneVolume, value); } + } + + private void SetUserVolume(AudioVolumeInfo volumeInfo) + { + MicrophoneVolume = volumeInfo.volume; + } + + + + public DelegateCommand OperClickCommand => new DelegateCommand(() => diff --git a/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml b/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml index fcc57e9..3a70866 100644 --- a/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml +++ b/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml @@ -29,6 +29,7 @@ + @@ -42,8 +43,8 @@ x:Name="pic_frame" BackColor="#000000" Dock="Fill" - MouseEnter="pic_frame_MouseEnter" MouseDoubleClick="pic_frame_MouseDoubleClick" + MouseEnter="pic_frame_MouseEnter" MouseLeave="pic_frame_MouseLeave" SizeMode="StretchImage" /> @@ -75,18 +76,52 @@ - + + + + + + + + + + + + + + + + + + + + diff --git a/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml.cs b/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml.cs index df5e616..ad98daa 100644 --- a/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml.cs +++ b/Meeting.V2.Demo/Meeting.V2.Demo/Views/VideoView.xaml.cs @@ -21,7 +21,7 @@ namespace Meeting.V2.Demo.Views InitializeComponent(); } - + public User UserInfo { get { return (User)GetValue(UserInfoProperty); } @@ -34,24 +34,25 @@ namespace Meeting.V2.Demo.Views private static void OnUserInfoPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { - if (d is VideoView videoView ) + if (d is VideoView videoView) { var viewDataContext = videoView.DataContext as VideoViewModel; viewDataContext.UserInfo = e.NewValue as User; } } - + #region 控制右上角操作按钮显示与消失 /// /// 控制操作按钮显示 /// - private bool IsOperVisible = false; + private bool IsOperVisible = false; private void pic_frame_MouseEnter(object sender, EventArgs e) { btn_oper.Visibility = Visibility.Visible; + } private async void pic_frame_MouseLeave(object sender, EventArgs e) @@ -79,10 +80,11 @@ namespace Meeting.V2.Demo.Views private async void btn_oper_MouseLeave(object sender, MouseEventArgs e) { - await Task.Delay(50).ConfigureAwait(false); + //await Task.Delay(50).ConfigureAwait(false); + - IsOperVisible = false; + } #endregion @@ -117,7 +119,7 @@ namespace Meeting.V2.Demo.Views private void pic_frame_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) { ExcuteCommand(); - } + } #endregion