Exemple #1
0
        private void PeerConnection_OnTrack(IRTCTrackEvent Event)
        {
            if (Event.Track.Kind == "video")
            {
                _peerVideoTrack = Event.Track;

                if (_peerVideoTrack != null)
                {
                    _peerVideoTrack.Element = MediaElementMaker.Bind(Devices.Instance.PeerVideo);
                    ((MediaStreamTrack)_peerVideoTrack).OnFrameRateChanged += (float frameRate) =>
                    {
                        FramesPerSecondChanged?.Invoke("PEER", frameRate.ToString("0.0"));
                    };
                    ((MediaStreamTrack)_peerVideoTrack).OnResolutionChanged += (uint width, uint height) =>
                    {
                        ResolutionChanged?.Invoke("PEER", width, height);
                    };
                }
            }
            else if (Event.Track.Kind == "audio")
            {
                _peerAudioTrack = Event.Track;
            }

            OnAddRemoteTrack?.Invoke(Event.Track);
        }
        /// <summary>
        /// WebRTC Establishment: Builds the Peer Connection.
        /// </summary>
        /// <param name="mediaOptions"></param>
        /// <returns></returns>
        private async Task <RTCPeerConnection> BuildPeerConnection(MediaOptions mediaOptions)
        {
            return(await Task.Run(() =>
            {
                var factory = new WebRtcFactory(new WebRtcFactoryConfiguration());

                var peerConnection = new RTCPeerConnection(
                    new RTCConfiguration()
                {
                    Factory = factory,
                    BundlePolicy = RTCBundlePolicy.Balanced,
                    IceTransportPolicy = RTCIceTransportPolicy.All
                });

                peerConnection.OnTrack += this.OnTrack;
                peerConnection.OnRemoveTrack += this.OnRemoveTrack;

                if ((mediaOptions.SendVideo || mediaOptions.LocalLoopback) && this.LocalVideoTrack == null)
                {
                    if (mediaOptions.SendVideo || mediaOptions.LocalLoopback)
                    {
                        this.LocalVideoTrack = this.GetLocalVideo(factory);
                    }
                }

                if (mediaOptions.SendAudio && this.LocalAudioTrack == null)
                {
                    if (mediaOptions.SendAudio)
                    {
                        this.LocalAudioTrack = this.GetLocalAudio(factory);
                    }
                }

                if (mediaOptions.SendVideo)
                {
                    peerConnection.AddTrack(this.LocalVideoTrack);
                }
                if (mediaOptions.SendAudio)
                {
                    peerConnection.AddTrack(this.LocalAudioTrack);
                }

                if (mediaOptions.LocalLoopback)
                {
                    this.LocalVideoTrack.Element = MediaElementMaker.Bind(this.LocalVideo);
                }

                return peerConnection;
            }));
        }
Exemple #3
0
        void Channel_OnAddRemoteVideoTrack(IMediaStreamTrack track)
        {
            Sora.Logger.Debug("ViewModel", "Channel_OnAddRemoteVideo");

            // TODO check trackId
            if (remoteVideoTrack == null)
            {
                Sora.Logger.Debug("ViewModel", "try to bind video to view");
                remoteVideoTrack         = track;
                remoteVideoTrack.Element =
                    MediaElementMaker.Bind(RemoteVideoView);
                Sora.Logger.Debug("ViewModel", "bound video to view");
            }
        }
Exemple #4
0
 private void BindSelfVideo()
 {
     if (_selfVideoTrack != null)
     {
         _selfVideoTrack.Element = MediaElementMaker.Bind(Devices.Instance.SelfVideo);
         ((MediaStreamTrack)_selfVideoTrack).OnFrameRateChanged += (float frameRate) =>
         {
             FramesPerSecondChanged?.Invoke("SELF", frameRate.ToString("0.0"));
         };
         ((MediaStreamTrack)_selfVideoTrack).OnResolutionChanged += (uint width, uint height) =>
         {
             ResolutionChanged?.Invoke("SELF", width, height);
         };
     }
 }
Exemple #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);
        }
Exemple #6
0
 private void peerConnection_OnTrack(IRTCTrackEvent ev)
 {
     if (ev.Track.Kind == "video")
     {
         this.remoteVideoTrack = ev.Track;
         if (this.mediaOptions.ReceiveVideo)
         {
             this.remoteVideoTrack.Element = MediaElementMaker.Bind(this.remoteVideo);
         }
     }
     else if (ev.Track.Kind == "audio")
     {
         if (this.mediaOptions.ReceiveAudio)
         {
             this.remoteAudioTrack = ev.Track;
         }
     }
 }
 /// <summary>
 /// Peer Connection Handler: On Track Added
 /// </summary>
 /// <param name="ev"></param>
 private void OnTrack(IRTCTrackEvent ev)
 {
     // client only.
     if (ev.Track.Kind == "video")
     {
         this.RemoteVideoTrack = ev.Track;
         if (this.MediaOpts.ReceiveVideo)
         {
             this.RemoteVideoTrack.Element = MediaElementMaker.Bind(this.RemoteVideo);
             this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
             {
                 this.RemoteVideo.Visibility = Visibility.Visible;
             });
         }
     }
     else if (ev.Track.Kind == "audio")
     {
         if (this.MediaOpts.ReceiveAudio)
         {
             this.RemoteAudioTrack = ev.Track;
         }
     }
 }