private void Start() { pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; bandwidthSelector.interactable = false; scaleResolutionDownSelector.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { receiveStream.AddTrack(e.Track); }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; receiveStream.OnAddTrack = e => { if (e.Track is VideoStreamTrack track) { track.OnVideoReceived += OnVideoReceived; } }; }
private void Start() { pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; codecSelector.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { receiveStream.AddTrack(e.Track); }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; receiveStream.OnAddTrack = e => { if (e.Track is VideoStreamTrack track) { track.OnVideoReceived += tex => { receiveImage.texture = tex; receiveImage.color = Color.white; }; } }; }
private void Start() { receiveStreamList = new List <MediaStream>(); videoStreamTrackList = new List <VideoStreamTrack>(); callButton.interactable = true; hangUpButton.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { if (e.Track.Kind == TrackKind.Video) { receiveStreamList[videoIndex % MaxVideoIndexLength].AddTrack(e.Track); videoIndex++; } if (videoIndex >= MaxVideoIndexLength) { addTracksButton.interactable = false; } }; pc2OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc2)); }; }
private void Start() { audioStreamTrackList = new List <AudioStreamTrack>(); sendingSenderList = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; dropdownAudioclip.options = sourceAudioClips.Select(clip => new Dropdown.OptionData(clip.name)).ToList(); pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { if (e.Track is AudioStreamTrack track) { var outputAudioSource = receiveObjectList[audioIndex]; track.OnAudioReceived += clip => { outputAudioSource.clip = clip; outputAudioSource.loop = true; outputAudioSource.Play(); }; audioIndex++; } }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; pc2OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc2)); }; }
private void Start() { pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; bandwidthSelector.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { Debug.LogWarning("Receiver OnTrack"); receiveStream.AddTrack(e.Track); }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; receiveStream.OnAddTrack = e => { Debug.LogWarning("receiveStream"); if (e.Track is VideoStreamTrack track) { receiveImage.texture = track.InitializeReceiver(width, height); receiveImage.color = Color.white; } }; }
private void Start() { // This sample uses Compute Shader. if (!SystemInfo.supportsComputeShaders) { throw new System.NotSupportedException("Compute shader is not supported on this device"); } vSyncCount = QualitySettings.vSyncCount; targetFrameRate = Application.targetFrameRate; callButton.interactable = false; hangUpButton.interactable = false; dropDownResolution.interactable = true; dropDownResolution.options = listResolution.Select(_ => new Dropdown.OptionData($"{_.x}x{_.y}")).ToList(); dropDownResolution.value = 3; dropDownFramerate.interactable = true; dropDownFramerate.options = listFramerate.Select(_ => new Dropdown.OptionData($"{_}")).ToList(); dropDownFramerate.value = 1; dropDownFramerate.onValueChanged.AddListener(OnFramerateChanged); pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { receiveStream.AddTrack(e.Track); }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; StartCoroutine(WebRTC.Update()); }
private void Start() { videoStreamTrackList = new List <VideoStreamTrack>(); sendingSenderList = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { if (e.Track is VideoStreamTrack track) { track.OnVideoReceived += tex => { receiveImages[videoIndex].texture = tex; videoIndex++; }; } }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; pc2OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc2)); }; }
private void Start() { pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { receiveStream.AddTrack(e.Track); }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; }
private void Start() { trackInfos = new StringBuilder(); pc1Senders = new List <RTCRtpSender>(); pc2Senders = new List <RTCRtpSender>(); callButton.interactable = true; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { OnTrack(_pc2, e); }; pc1OnNegotiationNeeded = () => { StartCoroutine(Pc1OnNegotiationNeeded()); }; infoText.text = !WebRTC.SupportHardwareEncoder ? "Current GPU doesn't support encoder" : "Current GPU supports encoder"; }
private void Start() { pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { if (e.Track is VideoStreamTrack video) { receiveImage.texture = video.InitializeReceiver(1280, 720); } }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; }
private void Start() { trackInfos = new StringBuilder(); pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { OnTrack(_pc2, e); }; pc1OnNegotiationNeeded = () => { StartCoroutine(PcOnNegotiationNeeded(_pc1)); }; var codecName = WebRTCSettings.UseVideoCodec == null ? "Default" : $"{WebRTCSettings.UseVideoCodec.mimeType} {WebRTCSettings.UseVideoCodec.sdpFmtpLine}"; infoText.text = $"Currently selected video codec is {codecName}"; }
private void Start() { pc1Senders = new List <RTCRtpSender>(); callButton.interactable = true; hangUpButton.interactable = false; pc1OnIceConnectionChange = state => { OnIceConnectionChange(_pc1, state); }; pc2OnIceConnectionChange = state => { OnIceConnectionChange(_pc2, state); }; pc1OnIceCandidate = candidate => { OnIceCandidate(_pc1, candidate); }; pc2OnIceCandidate = candidate => { OnIceCandidate(_pc2, candidate); }; pc2Ontrack = e => { if (e.Track is VideoStreamTrack video && !video.IsDecoderInitialized) { receiveImage.texture = video.InitializeReceiver(streamSize.x, streamSize.y); receiveVideoStream = e.Streams.First(); receiveVideoStream.OnRemoveTrack = ev => { receiveImage.texture = null; ev.Track.Dispose(); }; } if (e.Track is AudioStreamTrack audioTrack) { audioTrack.OnAudioReceived += clip => { receiveAudio.clip = clip; receiveAudio.loop = true; receiveAudio.Play(); }; receiveAudioStream = e.Streams.First(); receiveAudioStream.OnRemoveTrack = ev => { receiveAudio.Stop(); receiveAudio.clip = null; ev.Track.Dispose(); }; } }; pc1OnNegotiationNeeded = () => { StartCoroutine(PeerNegotiationNeeded(_pc1)); }; StartCoroutine(WebRTC.Update()); }
private void Start() { trackInfos = new StringBuilder(); pc1Senders = new List <RTCRtpSender>(); pc2Senders = new List <RTCRtpSender>(); callButton.interactable = true; pc1OnIceConnectionChange = new DelegateOnIceConnectionChange(state => { OnIceConnectionChange(pc1, state); }); pc2OnIceConnectionChange = new DelegateOnIceConnectionChange(state => { OnIceConnectionChange(pc2, state); }); pc1OnIceCandidate = new DelegateOnIceCandidate(candidate => { OnIceCandidate(pc1, candidate); }); pc2OnIceCandidate = new DelegateOnIceCandidate(candidate => { OnIceCandidate(pc1, candidate); }); pc2Ontrack = new DelegateOnTrack(e => { OnTrack(pc2, e); }); pc1OnNegotiationNeeded = new DelegateOnNegotiationNeeded(() => { StartCoroutine(Pc1OnNegotiationNeeded()); }); if (!WebRTC.HWEncoderSupport) { addTracksButton.interactable = false; callButton.interactable = false; infoText.text = "Current GPU doesn't support Nvidia Encoder"; } else { infoText.text = "Current GPU supports Nvidia Encoder"; } }