示例#1
0
        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";
        }
示例#2
0
        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;
        }