public void RTCRtpSendParametersCreateAndDeletePtr() { RTCRtpSendParametersInternal parametersInternal = new RTCRtpSendParametersInternal(); int encodingsLength = 2; RTCRtpEncodingParametersInternal[] encodings = new RTCRtpEncodingParametersInternal[encodingsLength]; for (int i = 0; i < encodingsLength; i++) { encodings[i].active = true; encodings[i].hasValueMaxBitrate = true; encodings[i].maxBitrate = 10000000; encodings[i].hasValueMaxFramerate = true; encodings[i].maxFramerate = 30; encodings[i].hasValueScaleResolutionDownBy = true; encodings[i].scaleResolutionDownBy = 1.0; encodings[i].rid = Marshal.StringToCoTaskMemAnsi(string.Empty); } parametersInternal.transactionId = Marshal.StringToCoTaskMemAnsi(string.Empty); parametersInternal.encodingsLength = encodingsLength; parametersInternal.encodings = IntPtrExtension.ToPtr(encodings); RTCRtpSendParameters parameter = new RTCRtpSendParameters(parametersInternal); IntPtr ptr = parameter.CreatePtr(); RTCRtpSendParameters.DeletePtr(ptr); }
private void ChangeBandwitdh(int index) { if (_pc1 == null || _pc2 == null) { return; } ulong? bandwidth = bandwidthOptions.Values.ElementAt(index); RTCRtpSender sender = _pc1.GetSenders().First(); RTCRtpSendParameters parameters = sender.GetParameters(); if (bandwidth == null) { parameters.Encodings[0].maxBitrate = null; parameters.Encodings[0].minBitrate = null; } else { parameters.Encodings[0].maxBitrate = bandwidth * 1000; parameters.Encodings[0].minBitrate = bandwidth * 1000; } RTCErrorType error = sender.SetParameters(parameters); if (error != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpSender.SetParameters failed {0}", error); } }
private void ChangeBandwitdh(int index) { if (_pc1 == null || _pc2 == null) { return; } ulong? bandwidth = bandwidthOptions.Values.ElementAt(index); RTCRtpSender sender = _pc1.GetSenders().First(); RTCRtpSendParameters parameters = sender.GetParameters(); if (bandwidth == null) { parameters.encodings[0].maxBitrate = null; parameters.encodings[0].minBitrate = null; } else { parameters.encodings[0].maxBitrate = bandwidth * 1000; parameters.encodings[0].minBitrate = bandwidth * 1000; } RTCError error = sender.SetParameters(parameters); if (error.errorType != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpSender.SetParameters failed {0}", error.errorType); statsField.text += $"Failed change bandwidth to {bandwidth * 1000}{Environment.NewLine}"; bandwidthSelector.value = 0; } }
public void AddTrack() { var peer = new RTCPeerConnection(); 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); var sender = peer.AddTrack(track); Assert.That(sender, Is.Not.Null); Assert.That(track, Is.EqualTo(sender.Track)); RTCRtpSendParameters parameters = sender.GetParameters(); Assert.That(parameters, Is.Not.Null); Assert.That(parameters.encodings, Is.Empty); track.Dispose(); peer.Dispose(); Object.DestroyImmediate(rt); }
public void AddTransceiver() { var peer = new RTCPeerConnection(); var stream = Audio.CaptureStream(); var track = stream.GetAudioTracks().First(); Assert.AreEqual(0, peer.GetTransceivers().Count()); var transceiver = peer.AddTransceiver(track); Assert.NotNull(transceiver); Assert.IsNull(transceiver.CurrentDirection); RTCRtpSender sender = transceiver.Sender; Assert.NotNull(sender); Assert.AreEqual(track, sender.Track); RTCRtpSendParameters parameters = sender.GetParameters(); Assert.NotNull(parameters); Assert.NotNull(parameters.encodings); foreach (var encoding in parameters.encodings) { Assert.True(encoding.active); Assert.Null(encoding.maxBitrate); Assert.Null(encoding.minBitrate); Assert.Null(encoding.maxFramerate); Assert.Null(encoding.scaleResolutionDownBy); Assert.IsNotEmpty(encoding.rid); } Assert.IsNotEmpty(parameters.transactionId); Assert.AreEqual(1, peer.GetTransceivers().Count()); Assert.NotNull(peer.GetTransceivers().First()); Assert.NotNull(parameters.codecs); foreach (var codec in parameters.codecs) { Assert.NotNull(codec); Assert.NotZero(codec.payloadType); Assert.IsNotEmpty(codec.mimeType); Assert.IsNotEmpty(codec.sdpFmtpLine); Assert.Null(codec.clockRate); Assert.Null(codec.channels); } Assert.NotNull(parameters.rtcp); Assert.NotNull(parameters.headerExtensions); foreach (var extension in parameters.headerExtensions) { Assert.NotNull(extension); Assert.IsNotEmpty(extension.uri); Assert.NotZero(extension.id); } track.Dispose(); stream.Dispose(); peer.Dispose(); }
private void ChangeFramerate(RTCRtpSender sender, uint framerate) { RTCRtpSendParameters parameters = sender.GetParameters(); parameters.encodings[0].maxFramerate = framerate; RTCError error = sender.SetParameters(parameters); if (error.errorType != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpSender.SetParameters failed {0}", error.errorType); } }
public void AddTransceiver() { var peer = new RTCPeerConnection(); 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); Assert.That(peer.GetTransceivers(), Is.Empty); var transceiver = peer.AddTransceiver(track); Assert.That(transceiver, Is.Not.Null); Assert.That(transceiver.Mid, Is.Null); Assert.That(transceiver.CurrentDirection, Is.Null); RTCRtpSender sender = transceiver.Sender; Assert.That(sender, Is.Not.Null); Assert.That(track, Is.EqualTo(sender.Track)); RTCRtpSendParameters parameters = sender.GetParameters(); Assert.That(parameters, Is.Not.Null); Assert.That(parameters.encodings, Is.Empty); Assert.That(parameters.transactionId, Is.Not.Empty); Assert.That(peer.GetTransceivers(), Has.Count.EqualTo(1)); Assert.That(peer.GetTransceivers().First(), Is.Not.Null); Assert.That(parameters.codecs, Is.Empty); Assert.That(parameters.rtcp, Is.Not.Null); // Some platforms return an empty list Assert.That(parameters.headerExtensions, Is.Not.Null); foreach (var extension in parameters.headerExtensions) { Assert.That(extension, Is.Not.Null); Assert.That(extension.uri, Is.Not.Empty); } track.Dispose(); peer.Dispose(); Object.DestroyImmediate(rt); }
public void ChangeVideoParameters(VideoStreamTrack track, ulong?bitrate, uint?framerate) { foreach (var sender in m_mapTrackAndSenderList[track]) { RTCRtpSendParameters parameters = sender.GetParameters(); foreach (var encoding in parameters.Encodings) { if (bitrate != null) { encoding.maxBitrate = bitrate; } if (framerate != null) { encoding.maxFramerate = framerate; } } sender.SetParameters(parameters); } }
/// <summary> /// /// </summary> /// <param name="connectionId"></param> /// <param name="bitrate"></param> /// <param name="framerate"></param> public void ChangeVideoParameters(string connectionId, ulong?bitrate, uint?framerate) { if (!Senders.TryGetValue(connectionId, out var sender)) { return; } RTCRtpSendParameters parameters = sender.GetParameters(); foreach (var encoding in parameters.encodings) { if (bitrate != null) { encoding.maxBitrate = bitrate; } if (framerate != null) { encoding.maxFramerate = framerate; } } sender.SetParameters(parameters); }
private void ChangeFramerate(int index) { if (_pc1 == null || _pc2 == null) { return; } uint? framerate = framerateOptions.Values.ElementAt(index); RTCRtpSender sender = _pc1.GetSenders().First(); RTCRtpSendParameters parameters = sender.GetParameters(); parameters.encodings[0].maxFramerate = framerate; RTCError error = sender.SetParameters(parameters); if (error.errorType != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpSender.SetParameters failed {0}", error.errorType); statsField.text += $"Failed maxFramerate to " + $"{framerate}{Environment.NewLine}"; framerateSelector.value = 0; } }
private void ChangeScaleResolutionDown(int index) { if (_pc1 == null || _pc2 == null) { return; } double scale = scaleResolutionDownOptions.Values.ElementAt(index); RTCRtpSender sender = _pc1.GetSenders().First(); RTCRtpSendParameters parameters = sender.GetParameters(); parameters.encodings[0].scaleResolutionDownBy = scale; RTCError error = sender.SetParameters(parameters); if (error.errorType != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpSender.SetParameters failed {0}", error.errorType); statsField.text += $"Failed scale down video resolution to " + $"{(int)(width / scale)}x{(int)(height / scale)}{Environment.NewLine}"; scaleResolutionDownSelector.value = 0; } }
public void AddTransceiver() { var peer = new RTCPeerConnection(); var stream = Audio.CaptureStream(); var track = stream.GetAudioTracks().First(); Assert.AreEqual(0, peer.GetTransceivers().Count()); var transceiver = peer.AddTransceiver(track); Assert.NotNull(transceiver); Assert.That(() => Assert.NotNull(transceiver.CurrentDirection), Throws.InvalidOperationException); RTCRtpSender sender = transceiver.Sender; Assert.NotNull(sender); Assert.AreEqual(track, sender.Track); RTCRtpSendParameters parameters = sender.GetParameters(); Assert.NotNull(parameters); Assert.IsNotEmpty(parameters.TransactionId); Assert.AreEqual(1, peer.GetTransceivers().Count()); Assert.NotNull(peer.GetTransceivers().First()); }
public void AddTransceiver() { var peer = new RTCPeerConnection(); var stream = Audio.CaptureStream(); var track = stream.GetAudioTracks().First(); Assert.AreEqual(0, peer.GetTransceivers().Count()); var transceiver = peer.AddTransceiver(track); Assert.NotNull(transceiver); Assert.IsNull(transceiver.CurrentDirection); RTCRtpSender sender = transceiver.Sender; Assert.NotNull(sender); Assert.AreEqual(track, sender.Track); RTCRtpSendParameters parameters = sender.GetParameters(); Assert.NotNull(parameters); Assert.NotNull(parameters.Encodings); foreach (var encoding in parameters.Encodings) { Assert.True(encoding.active); Assert.Null(encoding.maxBitrate); Assert.Null(encoding.minBitrate); Assert.Null(encoding.maxFramerate); Assert.Null(encoding.scaleResolutionDownBy); Assert.IsNotEmpty(encoding.rid); } Assert.IsNotEmpty(parameters.TransactionId); Assert.AreEqual(1, peer.GetTransceivers().Count()); Assert.NotNull(peer.GetTransceivers().First()); track.Dispose(); stream.Dispose(); peer.Dispose(); }
public void RTCRtpSendParametersCreateAndDeletePtr() { RTCRtpSendParametersInternal parametersInternal = default; int encodingsLength = 2; RTCRtpEncodingParametersInternal[] encodings = new RTCRtpEncodingParametersInternal[encodingsLength]; for (int i = 0; i < encodingsLength; i++) { encodings[i].active = true; encodings[i].maxBitrate = 10000000; encodings[i].minBitrate = 10000000; encodings[i].maxFramerate = 30; encodings[i].scaleResolutionDownBy = 1.0; encodings[i].rid = Marshal.StringToCoTaskMemAnsi(string.Empty); } parametersInternal.transactionId = Marshal.StringToCoTaskMemAnsi(string.Empty); parametersInternal.encodings = encodings; RTCRtpSendParameters parameter = new RTCRtpSendParameters(ref parametersInternal); parameter.CreateInstance(out var instance); instance.Dispose(); }
public Task SetParameters(RTCRtpSendParameters parameters) => JsRuntime.CallJsMethodVoidAsync(NativeObject, "setParameters", parameters).AsTask();
public Task SetParameters(RTCRtpSendParameters parameters) { throw new NotImplementedException(); }