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; })); }
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"); } }
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); }; } }
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); }
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; } } }