public PeerConnection(PeerConnectionOptions options) { Name = options.Name ?? $"PC#{Interlocked.Increment(ref g_LastId)}"; _nativePtr = Native.CreatePeerConnection( options.TurnServers.ToArray(), options.TurnServers.Count, options.StunServers.ToArray(), options.StunServers.Count, options.UserName, options.PassWord, options.CanReceiveAudio, options.CanReceiveVideo, options.IsDtlsSrtpEnabled); Native.Check(_nativePtr != IntPtr.Zero); RegisterCallback(out _localDataChannelReadyDelegate, Native.RegisterOnLocalDataChannelReady, RaiseLocalDataChannelReady); RegisterCallback(out _dataAvailableDelegate, Native.RegisterOnDataFromDataChannelReady, RaiseDataAvailable); RegisterCallback(out _failureMessageDelegate, Native.RegisterOnFailure, RaiseFailureMessage); RegisterCallback(out _audioBusReadyDelegate, Native.RegisterOnAudioBusReady, RaiseAudioBusReady); RegisterCallback(out _localVideoFrameDelegate, Native.RegisterLocalVideoFrameReady, RaiseLocalVideoFrameReady); RegisterCallback(out _remoteVideoFrameDelegate, Native.RegisterRemoteVideoFrameReceived, RaiseRemoteVideoFrameReady); RegisterCallback(out _localSdpReadyToSendDelegate, Native.RegisterOnLocalSdpReadyToSend, RaiseLocalSdpReadyToSend); RegisterCallback(out _iceCandidateReadyToSendDelegate, Native.RegisterOnIceCandidateReadyToSend, RaiseIceCandidateReadyToSend); RegisterCallback(out _signalingStateChangedCallback, Native.RegisterSignalingStateChanged, RaiseSignalingStateChange); RegisterCallback(out _connectionStateChangedCallback, Native.RegisterConnectionStateChanged, RaiseConnectionStateChange); RegisterCallback(out _videoFrameProcessedCallback, Native.RegisterVideoFrameProcessed, RaiseVideoFrameProcessedDelegate); RegisterCallback(out _remoteTrackChangedCallback, Native.RegisterRemoteTrackChanged, RaiseRemoteTrackChanged); }
/// <summary> /// Configures all peer connections. Must be called before the first peer connection is created. /// </summary> public static void Configure(GlobalOptions options) { Native.Check(Native.Configure( options.UseSignalingThread, options.UseWorkerThread, options.ForceSoftwareVideoEncoder, options.AutoShutdown, options.UseFakeEncoders, options.UseFakeDecoders, options.LogToStandardError, options.LogToDebugOutput, options.MinimumLogLevel != TraceLevel.Off ? OnMessageLogged : null, 4 - (int)(options.MinimumLogLevel) )); }
/// <summary> /// This shuts down the global webrtc module. /// </summary> /// <remarks> /// Only needed when you disabled auto-shutdown in the <seealso cref="Configure(GlobalOptions)"/> call />, /// and can then only be called after all <see cref="PeerConnection"/> instances are disposed. /// </remarks> public static void Shutdown() { Native.Check(Native.Shutdown()); }
public void CreateAnswer() { Native.Check(Native.CreateAnswer(_nativePtr)); }
public void RemoveDataChannel(string label) { Native.Check(Native.RemoveDataChannel(_nativePtr, label)); }
public void AddDataChannel(DataChannelOptions options) { Native.Check(Native.AddDataChannel(_nativePtr, options.Label, options.IsOrdered, options.IsReliable)); }
internal int AddVideoTrack(VideoEncoderOptions options) { var id = Native.AddVideoTrack(_nativePtr, options.Label, options.MinBitsPerSecond, options.MaxBitsPerSecond, options.MaxFramesPerSecond); return(Native.Check(id)); }