123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- using System;
- using UnityEngine;
- using UnityEngine.TestTools;
- using NUnit.Framework;
- using System.Linq;
- using System.Collections;
- using Object = UnityEngine.Object;
- namespace Unity.WebRTC.RuntimeTest
- {
- class MediaStreamTrackTest
- {
- [SetUp]
- public void SetUp()
- {
- WebRTC.Initialize(true);
- }
- [TearDown]
- public void TearDown()
- {
- WebRTC.Dispose();
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void Constructor()
- {
- var width = 256;
- var height = 256;
- var format = WebRTC.GetSupportedRenderTextureFormat(SystemInfo.graphicsDeviceType);
- var rt = new RenderTexture(width, height, 0, format);
- rt.Create();
- var track = new VideoStreamTrack(rt);
- Assert.That(track, Is.Not.Null);
- track.Dispose();
- Object.DestroyImmediate(rt);
- }
- [Test]
- public void ConstructorThrowException()
- {
- if(VideoStreamTrack.IsSupported(Application.platform, SystemInfo.graphicsDeviceType))
- Assert.Ignore();
- var width = 256;
- var height = 256;
- var format = WebRTC.GetSupportedRenderTextureFormat(SystemInfo.graphicsDeviceType);
- var rt = new RenderTexture(width, height, 0, format);
- rt.Create();
- Assert.That(() => { var track = new VideoStreamTrack(rt); }, Throws.TypeOf<NotSupportedException>());
- Object.DestroyImmediate(rt);
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void EqualIdWithAudioTrack()
- {
- var guid = Guid.NewGuid().ToString();
- var source = new AudioTrackSource();
- var track = new AudioStreamTrack(WebRTC.Context.CreateAudioTrack(guid, source.self));
- Assert.That(track, Is.Not.Null);
- Assert.That(track.Id, Is.EqualTo(guid));
- track.Dispose();
- source.Dispose();
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void EqualIdWithVideoTrack()
- {
- var guid = Guid.NewGuid().ToString();
- var source = new VideoTrackSource();
- var track = new VideoStreamTrack(WebRTC.Context.CreateVideoTrack(guid, source.self));
- Assert.That(track, Is.Not.Null);
- Assert.That(track.Id, Is.EqualTo(guid));
- track.Dispose();
- source.Dispose();
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void AccessAfterDisposed()
- {
- var width = 256;
- var height = 256;
- var format = WebRTC.GetSupportedRenderTextureFormat(SystemInfo.graphicsDeviceType);
- var rt = new RenderTexture(width, height, 0, format);
- rt.Create();
- var track = new VideoStreamTrack(rt);
- Assert.That(track, Is.Not.Null);
- track.Dispose();
- Assert.That(() => { var id = track.Id; }, Throws.TypeOf<ObjectDisposedException>());
- Object.DestroyImmediate(rt);
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void ConstructorThrowsExceptionWhenInvalidGraphicsFormat()
- {
- var width = 256;
- var height = 256;
- var format = RenderTextureFormat.R8;
- var rt = new RenderTexture(width, height, 0, format);
- rt.Create();
- Assert.That(() => { new VideoStreamTrack(rt); }, Throws.TypeOf<ArgumentException>());
- Object.DestroyImmediate(rt);
- }
- [Test]
- [UnityPlatform(RuntimePlatform.Android)]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void ConstructThrowsExceptionWhenSmallTexture()
- {
- var width = 50;
- var height = 50;
- var format = WebRTC.GetSupportedRenderTextureFormat(SystemInfo.graphicsDeviceType);
- var rt = new RenderTexture(width, height, 0, format);
- rt.Create();
- Assert.That(() => { new VideoStreamTrack(rt); }, Throws.TypeOf<ArgumentException>());
- Object.DestroyImmediate(rt);
- }
-
- [UnityTest]
- [Timeout(5000)]
- [UnityPlatform(exclude = new[] { RuntimePlatform.LinuxPlayer, RuntimePlatform.WindowsPlayer })]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public IEnumerator VideoStreamTrackEnabled()
- {
- var width = 256;
- var height = 256;
- var format = WebRTC.GetSupportedRenderTextureFormat(SystemInfo.graphicsDeviceType);
- var rt = new RenderTexture(width, height, 0, format);
- rt.Create();
- var track = new VideoStreamTrack(rt);
- Assert.NotNull(track);
-
- yield return 0;
-
-
-
- Assert.True(track.Enabled);
- track.Enabled = false;
- Assert.False(track.Enabled);
-
- Assert.That(track.ReadyState, Is.EqualTo(TrackState.Live));
- track.Dispose();
-
- yield return 0;
- Object.DestroyImmediate(rt);
- }
-
- [UnityTest]
- [Timeout(5000)]
- [UnityPlatform(exclude = new[] { RuntimePlatform.LinuxPlayer })]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public IEnumerator CaptureStreamTrack()
- {
- var camObj = new GameObject("Camera");
- var cam = camObj.AddComponent<Camera>();
- var track = cam.CaptureStreamTrack(1280, 720);
- Assert.That(track, Is.Not.Null);
- yield return new WaitForSeconds(0.1f);
- track.Dispose();
-
- yield return 0;
- Object.DestroyImmediate(camObj);
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void CaptureStreamTrackThrowExeption()
- {
- var camObj = new GameObject("Camera");
- var cam = camObj.AddComponent<Camera>();
- Assert.That(() => cam.CaptureStreamTrack(0, 0), Throws.ArgumentException);
- Object.DestroyImmediate(camObj);
- }
- [Test]
- public void AddAndRemoveAudioStreamTrack()
- {
- GameObject obj = new GameObject("audio");
- AudioSource source = obj.AddComponent<AudioSource>();
- source.clip = AudioClip.Create("test", 480, 2, 48000, false);
- var stream = new MediaStream();
- var track = new AudioStreamTrack(source);
- Assert.AreEqual(TrackKind.Audio, track.Kind);
- Assert.AreEqual(0, stream.GetAudioTracks().Count());
- Assert.True(stream.AddTrack(track));
- Assert.AreEqual(1, stream.GetAudioTracks().Count());
- Assert.NotNull(stream.GetAudioTracks().First());
- Assert.True(stream.RemoveTrack(track));
- Assert.AreEqual(0, stream.GetAudioTracks().Count());
- track.Dispose();
- stream.Dispose();
- Object.DestroyImmediate(source.clip);
- Object.DestroyImmediate(obj);
- }
- [Test]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public void VideoStreamTrackDisposeImmediately()
- {
- var width = 256;
- var height = 256;
- var format = WebRTC.GetSupportedRenderTextureFormat(UnityEngine.SystemInfo.graphicsDeviceType);
- var rt = new UnityEngine.RenderTexture(width, height, 0, format);
- rt.Create();
- var track = new VideoStreamTrack(rt);
- track.Dispose();
- Object.DestroyImmediate(rt);
- }
- [UnityTest, LongRunning]
- [Timeout(5000)]
- [UnityPlatform(exclude = new[] { RuntimePlatform.LinuxPlayer })]
- [ConditionalIgnore(ConditionalIgnore.UnsupportedPlatformOpenGL, "Not support VideoStreamTrack for OpenGL")]
- public IEnumerator VideoStreamTrackInstantiateMultiple()
- {
- var width = 256;
- var height = 256;
- var format = WebRTC.GetSupportedRenderTextureFormat(UnityEngine.SystemInfo.graphicsDeviceType);
- var rt1 = new UnityEngine.RenderTexture(width, height, 0, format);
- rt1.Create();
- var track1 = new VideoStreamTrack(rt1);
- var rt2 = new UnityEngine.RenderTexture(width, height, 0, format);
- rt2.Create();
- var track2 = new VideoStreamTrack(rt2);
-
- yield return new WaitForSeconds(0.1f);
- track1.Dispose();
- track2.Dispose();
- Object.DestroyImmediate(rt1);
- Object.DestroyImmediate(rt2);
- }
- }
- }
|