public IEnumerator InitializeReceiver()
        {
            const int width  = 256;
            const int height = 256;

            var peer        = new RTCPeerConnection();
            var transceiver = peer.AddTransceiver(TrackKind.Video);

            Assert.That(transceiver, Is.Not.Null);
            RTCRtpReceiver receiver = transceiver.Receiver;

            Assert.That(receiver, Is.Not.Null);
            MediaStreamTrack track = receiver.Track;

            Assert.That(track, Is.Not.Null);
            Assert.AreEqual(TrackKind.Video, track.Kind);
            Assert.That(track.Kind, Is.EqualTo(TrackKind.Video));
            var videoTrack = track as VideoStreamTrack;

            Assert.That(videoTrack, Is.Not.Null);
            var rt = videoTrack.InitializeReceiver(width, height);

            Assert.That(videoTrack.IsDecoderInitialized, Is.True);
            videoTrack.Dispose();
            // wait for disposing video track.
            yield return(0);

            peer.Dispose();
            Object.DestroyImmediate(rt);
        }
示例#2
0
        public IEnumerator InitializeReceiver()
        {
            var peer        = new RTCPeerConnection();
            var transceiver = peer.AddTransceiver(TrackKind.Video);

            Assert.NotNull(transceiver);
            RTCRtpReceiver receiver = transceiver.Receiver;

            Assert.NotNull(receiver);
            MediaStreamTrack track = receiver.Track;

            Assert.NotNull(track);
            Assert.AreEqual(TrackKind.Video, track.Kind);
            var videoTrack = track as VideoStreamTrack;

            Assert.NotNull(videoTrack);
            var rt = videoTrack.InitializeReceiver(640, 320);

            Assert.True(videoTrack.IsDecoderInitialized);
            videoTrack.Dispose();
            // wait for disposing video track.
            yield return(0);

            peer.Dispose();
            Object.DestroyImmediate(rt);
        }
示例#3
0
        private void OnAddReceiver(string connectionId, RTCRtpReceiver receiver)
        {
            var data = new SignalingEventData(EventSystem.current)
            {
                connectionId = connectionId,
                receiver     = receiver
            };

            ExecuteEventToAllTargets(data, ExecuteSignalingEvents.addReceiverHandler);
        }
示例#4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="track"></param>
 public virtual void SetReceiver(string connectionId, RTCRtpReceiver receiver)
 {
     m_receiver = receiver;
     Track      = m_receiver?.Track;
     if (m_receiver == null)
     {
         OnStoppedStream?.Invoke(connectionId);
     }
     else
     {
         OnStartedStream?.Invoke(connectionId);
     }
 }
示例#5
0
        static bool CheckVideoCodecCapabilities()
        {
            var capabilitiesSender = RTCRtpSender.GetCapabilities(TrackKind.Video);

            if (!capabilitiesSender.codecs.Any())
            {
                return(false);
            }
            var capabilitiesReceiver = RTCRtpReceiver.GetCapabilities(TrackKind.Video);

            if (!capabilitiesReceiver.codecs.Any())
            {
                return(false);
            }
            return(true);
        }
示例#6
0
        public static bool CheckVideoSendRecvCodecSupport(EncoderType encoderType)
        {
            WebRTC.Initialize(encoderType);
            var capabilitiesSenderCodec = RTCRtpSender.GetCapabilities(TrackKind.Video)
                                          .codecs
                                          .Select(x => x.mimeType)
                                          .Except(excludeCodecMimeType);
            var capabilitiesReceiverCodec = RTCRtpReceiver.GetCapabilities(TrackKind.Video)
                                            .codecs
                                            .Select(x => x.mimeType)
                                            .Except(excludeCodecMimeType);
            var isSupported = capabilitiesSenderCodec.Any(x => capabilitiesReceiverCodec.Contains(x));

            WebRTC.Dispose();
            return(isSupported);
        }
示例#7
0
        public void AddTransceiverTrackKindVideo()
        {
            var peer        = new RTCPeerConnection();
            var transceiver = peer.AddTransceiver(TrackKind.Video);

            Assert.NotNull(transceiver);
            Assert.IsNull(transceiver.CurrentDirection);
            RTCRtpReceiver receiver = transceiver.Receiver;

            Assert.NotNull(receiver);
            MediaStreamTrack track = receiver.Track;

            Assert.NotNull(track);
            Assert.AreEqual(TrackKind.Video, track.Kind);
            Assert.True(track is VideoStreamTrack);

            Assert.AreEqual(1, peer.GetTransceivers().Count());
            Assert.NotNull(peer.GetTransceivers().First());
        }
示例#8
0
        public void AddTransceiverTrackKindAudio()
        {
            var peer        = new RTCPeerConnection();
            var transceiver = peer.AddTransceiver(TrackKind.Audio);

            Assert.NotNull(transceiver);
            Assert.That(() => Assert.NotNull(transceiver.CurrentDirection), Throws.InvalidOperationException);
            RTCRtpReceiver receiver = transceiver.Receiver;

            Assert.NotNull(receiver);
            MediaStreamTrack track = receiver.Track;

            Assert.NotNull(track);
            Assert.AreEqual(TrackKind.Audio, track.Kind);
            Assert.True(track is AudioStreamTrack);

            Assert.AreEqual(1, peer.GetTransceivers().Count());
            Assert.NotNull(peer.GetTransceivers().First());
        }
示例#9
0
        public void ReceiverGetAudioCapabilities()
        {
            RTCRtpCapabilities capabilities = RTCRtpReceiver.GetCapabilities(TrackKind.Audio);

            Assert.NotNull(capabilities);
            Assert.NotNull(capabilities.codecs);
            Assert.IsNotEmpty(capabilities.codecs);
            Assert.NotNull(capabilities.headerExtensions);
            Assert.IsNotEmpty(capabilities.headerExtensions);

            foreach (var codec in capabilities.codecs)
            {
                Assert.NotNull(codec);
                Assert.IsNotEmpty(codec.mimeType);
            }
            foreach (var extensions in capabilities.headerExtensions)
            {
                Assert.NotNull(extensions);
                Assert.IsNotEmpty(extensions.uri);
            }
        }
示例#10
0
        public void AddTransceiverTrackKindVideo()
        {
            var peer        = new RTCPeerConnection();
            var transceiver = peer.AddTransceiver(TrackKind.Video);

            Assert.That(transceiver, Is.Not.Null);
            Assert.That(transceiver.CurrentDirection, Is.Null);
            RTCRtpReceiver receiver = transceiver.Receiver;

            Assert.That(receiver, Is.Not.Null);
            MediaStreamTrack track = receiver.Track;

            Assert.That(track, Is.Not.Null);
            Assert.That(track.Kind, Is.EqualTo(TrackKind.Video));
            Assert.That(track, Is.TypeOf <VideoStreamTrack>());
            Assert.That(receiver.Streams, Has.Count.EqualTo(0));

            Assert.That(peer.GetTransceivers(), Has.Count.EqualTo(1));
            Assert.That(peer.GetTransceivers(), Has.All.Not.Null);

            peer.Dispose();
        }
示例#11
0
        public void ReceiverGetTrackReturnsAudioTrack()
        {
            var peer        = new RTCPeerConnection();
            var transceiver = peer.AddTransceiver(TrackKind.Audio);

            Assert.That(transceiver, Is.Not.Null);
            Assert.That(transceiver.CurrentDirection, Is.Null);

            // The receiver has a audio track
            RTCRtpReceiver receiver = transceiver.Receiver;

            Assert.That(receiver, Is.Not.Null);
            Assert.That(receiver.Track, Is.Not.Null);
            Assert.That(receiver.Track, Is.TypeOf <AudioStreamTrack>());

            // The receiver has no track
            RTCRtpSender sender = transceiver.Sender;

            Assert.That(sender, Is.Not.Null);
            Assert.That(sender.Track, Is.Null);

            peer.Dispose();
        }
示例#12
0
        public static bool CheckVideoSendRecvCodecSupport(EncoderType encoderType)
        {
            // hardware encoder is not supported
            if (encoderType == EncoderType.Hardware &&
                !NativeMethods.GetHardwareEncoderSupport())
            {
                return(false);
            }

            WebRTC.Initialize(encoderType);
            var capabilitiesSenderCodec = RTCRtpSender.GetCapabilities(TrackKind.Video)
                                          .codecs
                                          .Select(x => x.mimeType)
                                          .Except(excludeCodecMimeType);
            var capabilitiesReceiverCodec = RTCRtpReceiver.GetCapabilities(TrackKind.Video)
                                            .codecs
                                            .Select(x => x.mimeType)
                                            .Except(excludeCodecMimeType);
            var isSupported = capabilitiesSenderCodec.Any(x => capabilitiesReceiverCodec.Contains(x));

            WebRTC.Dispose();
            return(isSupported);
        }
示例#13
0
 public void RaiseOnAddReceiver(string connectionId, RTCRtpReceiver receiver)
 {
     onAddReceiver?.Invoke(connectionId, receiver);
 }