public IEnumerator VideoReceive() { const int width = 256; const int height = 256; var config = new RTCConfiguration { iceServers = new[] { new RTCIceServer { urls = new[] { "stun:stun.l.google.com:19302" } } } }; var pc1 = new RTCPeerConnection(ref config); var pc2 = new RTCPeerConnection(ref config); VideoStreamTrack receiveVideoTrack = null; Texture receiveImage = null; pc2.OnTrack = e => { if (e.Track is VideoStreamTrack track && !track.IsDecoderInitialized) { receiveVideoTrack = track; receiveImage = track.InitializeReceiver(width, height); } }; var camObj = new GameObject("Camera"); var cam = camObj.AddComponent <Camera>(); cam.backgroundColor = Color.red; var sendVideoTrack = cam.CaptureStreamTrack(width, height, 1000000); yield return(new WaitForSeconds(0.1f)); pc1.AddTrack(sendVideoTrack); yield return(SignalingPeers(pc1, pc2)); yield return(new WaitUntil(() => receiveVideoTrack != null && receiveVideoTrack.IsDecoderInitialized)); Assert.That(receiveImage, Is.Not.Null); sendVideoTrack.Update(); yield return(new WaitForSeconds(0.1f)); receiveVideoTrack.UpdateReceiveTexture(); yield return(new WaitForSeconds(0.1f)); receiveVideoTrack.Dispose(); sendVideoTrack.Dispose(); yield return(0); pc2.Dispose(); pc1.Dispose(); Object.DestroyImmediate(camObj); }
public IEnumerator VideoReceive() { var config = new RTCConfiguration { iceServers = new[] { new RTCIceServer { urls = new[] { "stun:stun.l.google.com:19302" } } } }; var pc1 = new RTCPeerConnection(ref config); var pc2 = new RTCPeerConnection(ref config); var sendStream = new MediaStream(); var receiveStream = new MediaStream(); VideoStreamTrack receiveVideoTrack = null; RenderTexture receiveImage = null; receiveStream.OnAddTrack = e => { if (e.Track is VideoStreamTrack track) { receiveVideoTrack = track; receiveImage = receiveVideoTrack.InitializeReceiver(640, 320); } }; pc2.OnTrack = e => receiveStream.AddTrack(e.Track); var camObj = new GameObject("Camera"); var cam = camObj.AddComponent <Camera>(); cam.backgroundColor = Color.red; var sendVideoTrack = cam.CaptureStreamTrack(1280, 720, 1000000); yield return(new WaitForSeconds(0.1f)); pc1.AddTrack(sendVideoTrack, sendStream); pc2.AddTransceiver(TrackKind.Video); yield return(SignalingPeers(pc1, pc2)); yield return(new WaitUntil(() => receiveVideoTrack != null && receiveVideoTrack.IsDecoderInitialized)); Assert.NotNull(receiveImage); sendVideoTrack.Update(); yield return(new WaitForSeconds(0.1f)); receiveVideoTrack.UpdateReceiveTexture(); yield return(new WaitForSeconds(0.1f)); receiveVideoTrack.Dispose(); receiveStream.Dispose(); sendVideoTrack.Dispose(); sendStream.Dispose(); pc2.Dispose(); pc1.Dispose(); Object.DestroyImmediate(receiveImage); }