/// <summary> /// /// </summary> /// <param name="unmanagedPointer"></param> /// <param name="observer">Keep ref only, does not own observer</param> internal PeerConnection(IntPtr unmanagedPointer, PeerConnectionObserver observer, RtcThread signallingThread) { _handle = new PeerConnectionSafeHandle(unmanagedPointer); _signallingThread = signallingThread ?? throw new ArgumentNullException(nameof(signallingThread)); Observer = observer; Id = Guid.NewGuid(); if (Debugger.IsAttached) { var index = Interlocked.Increment(ref _debugIdPtr); if (index < _debugIds.Count) { Id = _debugIds[index]; } } }
public static extern IntPtr AddTrack(PeerConnectionSafeHandle handle, MediaStreamTrackSafeHandle mediaStreamTrackSafeHandle, string streamId);
public static extern void RemoveTrack(PeerConnectionSafeHandle handle, RtpSenderSafeHandle rtpSender);
public static extern void FreeGetTransceiversResult(PeerConnectionSafeHandle handle, IntPtr outputArray);
public static extern IntPtr AddTransceiver(PeerConnectionSafeHandle handle, [MarshalAs(UnmanagedType.I1)] bool isAudioTransceiver, RtpTransceiverDirection direction);
public static extern void GetTransceivers(PeerConnectionSafeHandle handle, out IntPtr outputArray, out int outputArraySize);
public static extern bool AddIceCandidate(PeerConnectionSafeHandle handle, string sdpMid, int mLineIndex, string sdp);
public static extern void SetLocalSessionDescription(PeerConnectionSafeHandle handle, string type, string sdp, SetSessionDescriptionCallback callback, IntPtr userData);
public static extern void Close(PeerConnectionSafeHandle native);
public static extern void CreateOffer(PeerConnectionSafeHandle peerConnectionSafeHandle, CreateSdpResultCallback callback, IntPtr userData);