private void InitializeCaptureSource() { if (_captureSource != null) { return; } // Setup the capture source (for recording audio) _captureSource = new CaptureSource(); _captureSource.AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice(); if (_captureSource.AudioCaptureDevice != null) { MediaDeviceConfig.SelectBestAudioFormat(_captureSource.AudioCaptureDevice); if (_captureSource.AudioCaptureDevice.DesiredFormat != null) { var mediaStats = new MediaStatistics(); var mediaEnvironment = new MediaEnvironment(mediaStats); _captureSource.AudioCaptureDevice.AudioFrameSize = AudioFormat.Default.MillisecondsPerFrame; // 20 milliseconds _audioSinkAdapter = new MultipleControllerAudioSinkAdapter(GetMediaConfig(), _captureSource, 2000); _mediaStreamSource = new MultipleControllerAudioMediaStreamSource(2000); ClientLogger.Debug("CaptureSource initialized."); } else { ClientLogger.Debug("No suitable audio format was found."); } } else { // Do something more here eventually, once we figure out what the user experience should be. ClientLogger.Debug("No audio capture device was found."); } }
public MediaServerViewModel(MediaConfig mediaConfig, AudioFormat audioFormat, MediaStatistics mediaStatistics, MediaEnvironment mediaEnvironment, IMediaConnection mediaConnection, IVideoQualityController videoQualityController, string roomId) { MediaController = new MediaController(mediaConfig, audioFormat, mediaStatistics, mediaEnvironment, mediaConnection, videoQualityController); RoomId = roomId; MediaServerKpis = new ObservableCollection <MediaServerKpi>(); MediaController.MediaStats.Counters.CollectionChanged += Counters_CollectionChanged; }
public SourceMediaController(MediaConfig mediaConfig, MediaStatistics mediaStatistics, MediaEnvironment mediaEnvironment, IMediaConnection mediaConnection, IVideoQualityController videoQualityController) : base(mediaConfig, AudioFormat.Default, mediaStatistics, mediaEnvironment, mediaConnection, videoQualityController) { }
private void btnStart_Click(object sender, RoutedEventArgs e) { try { if (!(CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())) { MessageBox.Show("Unable to capture microphone"); return; } _audioSinkAdapter.UseGeneratedTone = chkUseGeneratedTone.IsChecked ?? true; _mediaStreamSource.UseGeneratedTone = chkUseGeneratedTone.IsChecked ?? true; // Create the context factory. var rootMediaConfig = GetMediaConfig(); var connectionSelection = (ComboBoxItem)cboConnection.SelectedItem; var connectionType = (MediaConnectionType)Enum.Parse(typeof(MediaConnectionType), (string)connectionSelection.Content, true); var formatSelection = (ComboBoxItem)cboAudioFormat.SelectedItem; var audioFormat = new AudioFormat(int.Parse((string)formatSelection.Content)); var enhancerSelection = (ComboBoxItem)cboEnhancer.SelectedValue; var enhancerType = (SpeechEnhancementStack)Enum.Parse(typeof(SpeechEnhancementStack), (string)enhancerSelection.Content, true); var encoderSelection = (ComboBoxItem)cboEncoder.SelectedValue; var encoderType = (AudioCodecType)Enum.Parse(typeof(AudioCodecType), (string)encoderSelection.Content, true); var ctxFactory = new TestAudioContextFactory(rootMediaConfig, _audioSinkAdapter.RawAudioFormat, audioFormat, enhancerType, encoderType); _audioSinkAdapter.RootAudioContext = ctxFactory.GetAudioContext(); _mediaServerVms.Clear(); _audioSinkAdapter.AudioControllers.Clear(); _audioSinkAdapter.AudioContexts.Clear(); _mediaStreamSource.AudioControllers.Clear(); var connections = (int)txtConnections.Value; var rooms = (int)txtRooms.Value; _audioSinkAdapter.Rooms = rooms; _audioSinkAdapter.ConnectionsPerRoom = connections; for (int room = 0; room < rooms; room++) { string roomId = string.Format("__alantaTestRoom{0}__", room); var mediaStats = new MediaStatistics(); var mediaEnvironment = new MediaEnvironment(mediaStats); // Register each room on the remote server. for (int connection = 0; connection < connections; connection++) { var connectionMediaConfig = GetMediaConfig(); IMediaConnection mediaConnection; if (connectionType == MediaConnectionType.MediaServer) { mediaConnection = new RtpMediaConnection(connectionMediaConfig, mediaStats); } else { mediaConnection = new LoopbackMediaConnection(connectionMediaConfig.LocalSsrcId); } var vqc = new VideoQualityController(connectionMediaConfig.LocalSsrcId); var vm = new MediaServerViewModel(connectionMediaConfig, AudioFormat.Default, mediaStats, mediaEnvironment, mediaConnection, vqc, roomId); _audioSinkAdapter.AudioControllers.Add(vm.MediaController); _audioSinkAdapter.AudioContexts.Add(ctxFactory.GetAudioContext()); _mediaStreamSource.AudioControllers.Add(new AudioControllerEntry(vm.MediaController)); _mediaServerVms.Add(vm); vm.Connect(); } // Make sure each session knows about all the others in the same room. var localVms = _mediaServerVms.Where(x => x.RoomId == roomId).ToList(); foreach (var localVm in localVms) { var vm = localVm; var remoteVms = localVms.Where(x => x.SsrcId != vm.SsrcId).ToList(); foreach (var remoteVm in remoteVms) { vm.MediaController.RegisterRemoteSession(remoteVm.SsrcId); } } } if (mediaElement.CurrentState == MediaElementState.Closed) { mediaElement.SetSource(_mediaStreamSource); } _captureSource.Start(); mediaElement.Play(); btnStop.IsEnabled = true; btnStart.IsEnabled = false; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public SourceRoomController(IViewModelFactory viewModelFactory, IRoomInfo roomInfo, IConfigurationService configurationService, MediaTest roomPage) : base(viewModelFactory, roomInfo, configurationService) { // Set the roomViewModel initial values. var rnd = new Random(); var sourceSsrcId = (ushort)rnd.Next(ushort.MinValue, ushort.MaxValue); var sourceConfig = new MediaConfig { MediaServerHost = DataGlobals.MediaServerHost, MediaServerControlPort = Constants.DefaultMediaServerControlPort, MediaServerStreamingPort = Constants.DefaultMediaServerStreamingPort, LocalSsrcId = sourceSsrcId, CodecFactory = new CodecFactory(AudioFormat.Default), ExpectedAudioLatency = 250 }; var sourceMediaStats = new MediaStatistics(); var sourceMediaEnvironment = new MediaEnvironment(sourceMediaStats); var sourceMediaConnection = new RtpMediaConnection(sourceConfig, sourceMediaStats); var vqc = new VideoQualityController(sourceConfig.LocalSsrcId); _sourceMediaController = new SourceMediaController(sourceConfig, sourceMediaStats, sourceMediaEnvironment, sourceMediaConnection, vqc); RoomVm.RoomName = Constants.DefaultRoomName; RoomVm.MediaController = _sourceMediaController; _sourceMediaController.InputAudioVisualizer = roomPage.audioVisualizer; // Setup the local session. var room = new Room { Name = Constants.DefaultRoomName, Sessions = new ObservableCollection <Session>() }; var user = new RegisteredUser { UserId = Guid.NewGuid(), UserTag = "smithkl42", UserName = "******" }; var session = new Session { SessionId = Guid.NewGuid(), SsrcId = _sourceMediaController.LocalSsrcId, User = user }; var sessionViewModel = viewModelFactory.GetViewModel <SessionViewModel>(vm => vm.Model.SessionId == session.SessionId); sessionViewModel.Model = session; _sessionCollectionViewModel = viewModelFactory.GetViewModel <SessionCollectionViewModel>(); RoomVm.SessionVm = sessionViewModel; _sessionCollectionViewModel.ViewModels.Add(sessionViewModel); RoomVm.SessionId = RoomVm.SessionVm.Model.SessionId; var owner = user; owner.SharedFiles = new ObservableCollection <SharedFile>(); room.SharedFiles = owner.SharedFiles; room.User = owner; RoomVm.UserTag = owner.UserTag; room.UserId = owner.UserId; RoomVm.Model = room; LocalUserVm.Model = owner; LocalUserVm.UserId = owner.UserId; // Add the destination sessions. var codecFactory = new DestinationCodecFactory(); for (int i = 0; i < RemoteSessionCount; i++) { var destinationSsrcId = (ushort)rnd.Next(ushort.MinValue, ushort.MaxValue); var config = new MediaConfig { MediaServerHost = DataGlobals.MediaServerHost, MediaServerControlPort = Constants.DefaultMediaServerControlPort, MediaServerStreamingPort = Constants.DefaultMediaServerStreamingPort, LocalSsrcId = destinationSsrcId, CodecFactory = codecFactory, ExpectedAudioLatency = 250 }; var mediaStatistics = new MediaStatistics(); var mediaEnvironment = new MediaEnvironment(mediaStatistics); var mediaConnection = new RtpMediaConnection(config, mediaStatistics); var destinationVqc = new VideoQualityController(config.LocalSsrcId); var destinationMediaController = new DestinationMediaController(config, mediaStatistics, mediaEnvironment, mediaConnection, destinationVqc); var remoteSession = new Session { SessionId = Guid.NewGuid(), SsrcId = destinationMediaController.LocalSsrcId }; //todo: create sessionViewModel, add it to SessionCollectionViewModel _sourceMediaController.RegisterRemoteSession((ushort)(remoteSession.SsrcId)); remoteSession.User = new RegisteredUser { UserId = Guid.NewGuid(), UserTag = "smithkl42", UserName = "******" }; room.Sessions.Add(remoteSession); var destinationRoomPage = new DestinationRoomPage(); destinationMediaController.OutputAudioVisualizer = destinationRoomPage.audioVisualizer; // var newViewModelFactory = new ViewModelFactory(RoomService, MessageService, ViewLocator); var destinationController = new DestinationRoomController(destinationMediaController, viewModelFactory, new TestRoomInfo(), configurationService, RoomVm, remoteSession.SessionId); destinationMediaController.Connect(RoomVm.Model.RoomId.ToString()); // Store references to the created objects. _destinationMediaControllers[remoteSession.SessionId] = destinationMediaController; _destinationRoomPages[remoteSession.SessionId] = destinationRoomPage; _destinationRoomControllers[remoteSession.SessionId] = destinationController; } // We have to wait until all the sessions have been created before we can register them with their media controllers and initialize their pages. foreach (Guid sessionId in _destinationRoomControllers.Keys) { var destinationRoomController = _destinationRoomControllers[sessionId]; var destinationPage = _destinationRoomPages[sessionId]; destinationPage.Initialize(destinationRoomController); } }
// ReSharper restore NotAccessedField.Local public DestinationMediaController(MediaConfig mediaConfig, MediaStatistics mediaStatistics, MediaEnvironment mediaEnvironment, IMediaConnection mediaConnection, IVideoQualityController videoQualityController) : base(mediaConfig, AudioFormat.Default, mediaStatistics, mediaEnvironment, mediaConnection, videoQualityController) { _audioTimer = new Timer(audioTimer_Tick, null, 20, 20); }
public PlaylistManager() { _mediaEnvironment = new MediaEnvironment(); _mediaEnvironment.RegisterDefaultCodecs(); Initialize(); }