Пример #1
0
    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()
        {
            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)); };
        }
Пример #3
0
    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;
            }
        };
    }
Пример #4
0
    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)); };
    }
Пример #5
0
    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;
            }
        };
    }
Пример #6
0
    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());
    }
Пример #7
0
        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)); };
        }
Пример #8
0
    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)); };
    }
Пример #11
0
        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}";
        }
Пример #12
0
        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());
        }
Пример #13
0
    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";
        }
    }
Пример #14
0
 public static extern void PeerConnectionRegisterOnRenegotiationNeeded(IntPtr ptr, DelegateOnNegotiationNeeded callback);