public void Start() { if (mediaChannel != null) { Debug.WriteLine("media channel is already running"); return; } var metadata = new Sora.Signaling.Metadata() { SignalingKey = Config.SoraLaboSignalingKey, Recording = _recordingEnabled }; var channelId = $"{Config.SoraLaboUsername}@{ChannelId}"; mediaOption.SpeakerDevice = _audioDownstreamEnabled ? _selectedSpeakerDevice : null; mediaOption.MicrophoneDevice = _audioUpstreamEnabled ? _selectedMicrophoneDevice : null; mediaOption.VideoCaptureCapability = _videoUpstreamEnabled ? _selectedVideoCaptureCapability : null; mediaOption.EnableMediaTrace = false; mediaChannel = new Sora.MediaChannel( Config.SoraLaboEndpoint, channelId, metadata, mediaOption // TODO コピーして渡すようにする ); mediaChannel.OnConnect += Channel_OnConnect; mediaChannel.OnDisconnect += Channel_OnDisconnect; mediaChannel.OnError += Channel_OnError; mediaChannel.OnAddRemoteAudioTrack += Channel_OnAddRemoteAudioTrack; mediaChannel.OnRemoveRemoteAudioTrack += Channel_OnRemoveRemoteAudioTrack; mediaChannel.OnAddRemoteVideoTrack += Channel_OnAddRemoteVideoTrack; mediaChannel.OnRemoveRemoteVideoTrack += Channel_OnRemoveRemoteVideoTrack; mediaChannel.OnAddLocalVideoTrack += Channel_OnAddLocalVideoTrack; mediaChannel.OnAddLocalAudioTrack += Channel_OnAddLocalAudioTrack; mediaChannel.Connect(); IsRunning = true; IsNotRunning = false; StateText = "CONNECTING"; }
public void Stop() { if (mediaChannel == null) { Debug.WriteLine("media channel is already stopped"); return; } mediaChannel.OnConnect -= Channel_OnConnect; mediaChannel.OnDisconnect -= Channel_OnDisconnect; mediaChannel.OnError -= Channel_OnError; mediaChannel.OnAddRemoteAudioTrack -= Channel_OnAddRemoteAudioTrack; mediaChannel.OnRemoveRemoteAudioTrack -= Channel_OnRemoveRemoteAudioTrack; mediaChannel.OnAddRemoteVideoTrack -= Channel_OnAddRemoteVideoTrack; mediaChannel.OnRemoveRemoteVideoTrack -= Channel_OnRemoveRemoteVideoTrack; mediaChannel.OnAddLocalVideoTrack -= Channel_OnAddLocalVideoTrack; mediaChannel.OnAddLocalAudioTrack -= Channel_OnAddLocalAudioTrack; localAudioTrack = null; remoteAudioTrack = null; if (localVideoTrack != null) { localVideoTrack.Element = null; localVideoTrack = null; } if (remoteVideoTrack != null) { remoteVideoTrack.Element = null; remoteVideoTrack = null; } mediaChannel.Disconnect(); mediaChannel = null; StateText = "OFFLINE"; IsRunning = false; IsNotRunning = true; }