示例#1
0
 internal static extern IntPtr PeerConnectionObserver_new(WebrtcUnityStateCallback SignalingChange,
                                                          WebrtcUnityResultCallback DataChannel,
                                                          WebrtcUnityCallback RenegotiationNeeded,
                                                          WebrtcUnityStateCallback IceConnectionChange,
                                                          WebrtcUnityStateCallback StandardizedIceConnectionChange,
                                                          WebrtcUnityStateCallback ConnectionChange,
                                                          WebrtcUnityStateCallback IceGatheringChange,
                                                          WebrtcUnityResultCallback IceCandidate,
                                                          WebrtcUnityResultCallback IceCandidatesRemoved,
                                                          WebrtcUnityStateCallback IceConnectionReceivingChange,
                                                          WebrtcUnityResultCallback AddTrack,
                                                          WebrtcUnityResultCallback RemoveTrack,
                                                          WebrtcUnityStateCallback InterestingUsage);
示例#2
0
        /// <summary>
        /// 持有一个数据接收器
        /// </summary>
        /// <param name="handler">数据接收器指针</param>
        internal protected RtpReceiver(IntPtr handler, IDispatcher dispatcher) : base(handler)
        {
            IntPtr track = default;

            dispatcher.Invoke(() =>
            {
                WebrtcObject_AddRef(handler);
                track = RtpReceiver_GetMediaStreamTrack(handler);
            });
            Dispatcher = dispatcher;
            if (track == IntPtr.Zero)
            {
                throw new Exception("无法获取媒体轨道");
            }
            IntPtr proxyPtr = default;

            dispatcher.Invoke(() => proxyPtr = MediaStreamTrack.MediaStreamTrack_GetKind(track));
            if (proxyPtr == IntPtr.Zero)
            {
                throw new Exception("无法获取媒体类型");
            }
            var buffer = new PointerArray(proxyPtr);

            unsafe
            {
                byte **pointer = (byte **)buffer.GetBuffer();
                var    kind    = new string((sbyte *)*pointer);
                if (kind == "video")
                {
                    Track = new VideoTrack(track, dispatcher);
                }
                else if (kind == "audio")
                {
                    Track = new AudioTrack(track, dispatcher);
                }
                else
                {
                    var unkown = new UnkownMediaStreamTrack(track, dispatcher);
                    unkown.SetKind(kind);
                    Track = unkown;
                }
            }
            NativeFirstPacketReceived = state => FirstPacketReceived?.Invoke((MediaType)state);
            dispatcher.Invoke(() => RtpReceiver_SetFirstPacketReceivedObserve(handler, NativeFirstPacketReceived));
        }
示例#3
0
 /// <summary>
 /// C++ API:设置首次接到数据包的回调
 /// </summary>
 /// <param name="ptr">接收器指针</param>
 /// <param name="FirstPacketReceived">首次接到数据包的回调</param>
 [DllImport(UnityPluginDll)] internal static extern void RtpReceiver_SetFirstPacketReceivedObserve(IntPtr ptr, WebrtcUnityStateCallback FirstPacketReceived);