public async Task JoinGroup(Guid groupID) { Logger.Debug("Setting up local video"); var camera = _deviceManager .Cameras.First(c => c.CameraFacing == ACSCameraFacing.Front); _localVideoStream = new ACSLocalVideoStream(camera); _localVideoStreamRenderer = new ACSVideoStreamRenderer(_localVideoStream, out var rendererError); ThrowIfError(rendererError); var renderingOptions = new ACSCreateViewOptions(ACSScalingMode.Crop); var nativeView = _localVideoStreamRenderer.CreateViewWithOptions(renderingOptions, out var viewError); ThrowIfError(viewError); var formsView = nativeView.ToView(); LocalVideoAdded?.Invoke(this, formsView); var groupCallLocator = new ACSGroupCallLocator(new NSUuid(groupID.ToString())); var callOptions = new ACSJoinCallOptions { AudioOptions = new ACSAudioOptions(), VideoOptions = new ACSVideoOptions(new [] { _localVideoStream }) }; Logger.Debug("Joining group"); //callOptions.AudioOptions.Muted = true; _callAgent.JoinWithMeetingLocator(groupCallLocator, callOptions, callCompleted); }
public void Hangup() { _call?.HangUp(new ACSHangUpOptions(), OnVideoHangup); _localVideoStreamRenderer?.Dispose(); _localVideoStream?.Dispose(); _localVideoStream = null; _remoteVideoStreams.Clear(); _call?.Dispose(); }
public void Hangup() { Logger.Debug("Hanging up"); _call?.HangUp(new ACSHangUpOptions(), OnVideoHangup); _localVideoStreamRenderer?.Dispose(); _localVideoStream?.Dispose(); _localVideoStream = null; _remoteVideoStreams.Clear(); _call?.Dispose(); Logger.Debug("Finished hanging up"); }
public void CallEchoService() { var callOptions = new ACSStartCallOptions(); var camera = _deviceManager.Cameras.First(c => c.CameraFacing == ACSCameraFacing.Front); callOptions.AudioOptions = new ACSAudioOptions(); //callOptions.AudioOptions.Muted = true; var localVideoStream = new ACSLocalVideoStream(camera); callOptions.VideoOptions = new ACSVideoOptions(localVideoStream); var receivers = new CommunicationIdentifier[] { new CommunicationUserIdentifier("8:echo123") }; _callAgent.StartCall(receivers, callOptions); }
public async Task JoinGroup(Guid groupID) { var camera = _deviceManager .Cameras.First(c => c.CameraFacing == ACSCameraFacing.Front); _localVideoStream = new ACSLocalVideoStream(camera); _localVideoStreamRenderer = new ACSVideoStreamRenderer(_localVideoStream, out var rendererError); ThrowIfError(rendererError); var renderingOptions = new ACSRenderingOptions(ACSScalingMode.Crop); var nativeView = _localVideoStreamRenderer.CreateViewWithOptions(renderingOptions, out var viewError); ThrowIfError(viewError); var formsView = nativeView.ToView(); LocalVideoAdded?.Invoke(this, formsView); var groupCallLocator = new ACSGroupCallLocator(new NSUuid(groupID.ToString())); var callOptions = new ACSJoinCallOptions { AudioOptions = new ACSAudioOptions(), VideoOptions = new ACSVideoOptions(_localVideoStream) }; //callOptions.AudioOptions.Muted = true; _call = _callAgent.JoinWithMeetingLocator(groupCallLocator, callOptions); // Respond to changes _call.Delegate = new CallDelegate(_videoCallbackManager); // Setup initial streams. This is clumsy and probably an API flaw... // IMHO delegate should be called after setting it on existing state... foreach (var remoteParticipant in _call.RemoteParticipants) { remoteParticipant.Delegate = new RemoteParticipantDelegate(_videoCallbackManager); foreach (var remoteVideoStream in remoteParticipant.VideoStreams) { RemoteVideoStreamAdded(remoteVideoStream); } } _call.StartVideo(_localVideoStream, OnVideoStarted); }