Esempio n. 1
0
        private void CloseInternal()
        {
            if (_factory != null && _parameters.AecDump)
            {
                _factory.StopAecDump();
            }

            _logger.Debug(TAG, "Closing peer connection.");
            if (_rtcEventLog != null)
            {
                // RtcEventLog should stop before the peer connection is disposed.
                _rtcEventLog.Stop();
                _rtcEventLog = null;
            }

            _logger.Debug(TAG, "Closing audio source.");
            if (_audioSource != null)
            {
                _audioSource.Dispose();
                _audioSource = null;
            }

            _logger.Debug(TAG, "Stopping capturer.");
            if (_videoCapturer != null)
            {
                _videoCapturer.StopCapture();
                _videoCapturer.Dispose();
                _videoCapturerStopped = true;
                _videoCapturer        = null;
            }

            _logger.Debug(TAG, "Closing video source.");
            if (_videoSource != null)
            {
                _videoSource.Dispose();
                _videoSource = null;
            }

            _localRenderer  = null;
            _remoteRenderer = null;
            _logger.Debug(TAG, "Closing peer connection factory.");
            if (_factory != null)
            {
                _factory.Dispose();
                _factory = null;
            }

            _logger.Debug(TAG, "Closing peer connection done.");
            _peerConnectionEvents.OnPeerConnectionClosed();
            PeerConnectionFactory.StopInternalTracingCapture();
            PeerConnectionFactory.ShutdownInternalTracer();

            _executor.Release();
        }
Esempio n. 2
0
        private IVideoTrack CreateVideoTrack()
        {
            _videoSource   = _factory.CreateVideoSource(_parameters.IsScreencast);
            _videoCapturer = _peerConnectionEvents.CreateVideoCapturer(_factory, _videoSource);

            _videoCapturer.StartCapture(_videoWidth, _videoHeight, _fps);
            _localVideoTrack = _factory.CreateVideoTrack(VideoTrackId, _videoSource);

            _localVideoTrack.IsEnabled = _renderVideo;
            _localVideoTrack.AddRenderer(_localRenderer);
            return(_localVideoTrack);
        }
Esempio n. 3
0
        void Peer_OnAddLocalVideoTrack(IVideoCapturer capturer, IMediaStreamTrack track)
        {
            Logger.Debug("MediaChannel", "@peer:local_video_track:add");

            if (localVideoTrack == null)
            {
                localVideoTrack = track;
            }

            RunOnUiThread(() => {
                OnAddLocalVideoTrack?.Invoke(capturer, track);
            });
        }
Esempio n. 4
0
        private VideoTrack CreateVideoTrack(IVideoCapturer videoCapturer)
        {
            _surfaceTextureHelper = SurfaceTextureHelper.Create("CaptureThread", _eglBase.EglBaseContext);

            _videoSource = _factory.CreateVideoSource(true);
            videoCapturer.Initialize(_surfaceTextureHelper, _context, _videoSource.CapturerObserver);
            videoCapturer.StartCapture(VideoWidth, VideoHeight, 30);

            _localVideoTrack = _factory.CreateVideoTrack("ARDAMSv0", _videoSource);
            _localVideoTrack.SetEnabled(true);
            _localVideoTrack.AddSink(_localVideoSink);
            return(_localVideoTrack);
        }
Esempio n. 5
0
        void Channel_OnAddLocalVideoTrack(
            IVideoCapturer capturer, IMediaStreamTrack track)
        {
            Sora.Logger.Debug("ViewModel", "Channel_OnAddLocalVideo");

            if (localVideoTrack != null)
            {
                Debug.WriteLine("local video track already exists");
                return;
            }

            localVideoTrack         = track;
            localVideoTrack.Enabled = true;
            localVideoTrack.Element =
                MediaElementMaker.Bind(LocalVideoView);
        }
Esempio n. 6
0
        public void CreatePeerConnection(IVideoSink localVideoSink, IVideoSink remoteVideoSink,
                                         IVideoCapturer videoCapturer)
        {
            _localVideoSink  = localVideoSink;
            _removeVideoSink = remoteVideoSink;

            _videoCapturer = videoCapturer;

            Executor.Execute(new Runnable(() =>
            {
                try
                {
                    CreateMediaConstraintsInternal();
                    CreatePeerConnectionInternal();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine($"Failed to create peer connection:{ex.Message}");
                }
            }));
        }
 public PlatformVideoCapturer(Context context, VideoSource videoSource, IVideoCapturer videoCapturer, IEglBaseContext eglBaseContext) : base(videoCapturer)
 {
     _videoCapturer        = videoCapturer;
     _surfaceTextureHelper = SurfaceTextureHelper.Create("VIDEO CAPTURE THREAD", eglBaseContext);
     _videoCapturer.Initialize(_surfaceTextureHelper, context, videoSource.CapturerObserver);
 }