public override SubscribeVideoModel GetSubscribeVideoModel()
        {
            SubscribeVideoModel subscribeVideoModel = new SubscribeVideoModel()
            {
                AvSyncGroupId = Helper.GetCurrentTimeTotalMilliseconds(),
                MediaType     = MediaType.VideoCaptureCard,
                ResourceId    = 0,
                StreamType    = StreamType.VideoRecv,
                UserId        = string.Empty,
                TransModel    = new TransModel()
                {
                    CheckRetransSendCount = CheckRetransSendCount,
                    CheckSendCount        = CheckSendCount,
                    DataResendCount       = DataResendCount,
                    DataRetransSendCount  = DataRetransSendCount,
                    DataSendCount         = DataSendCount,
                    DelayTimeWinsize      = DelayTimeWinsize,
                    FecCheckCount         = FecCheckCount,
                    FecDataCount          = FecDataCount,
                },
                VideoRecvModel = new VideoRecvModel()
                {
                    DisplayFillMode = DisplayFillMode.RawWithBlack,
                    DisplayWindow   = IntPtr.Zero,
                },
            };

            return(subscribeVideoModel);
        }
Exemple #2
0
        internal static MEETINGMANAGE_subscribeVideoParam ToStruct(this SubscribeVideoModel model)
        {
            MEETINGMANAGE_subscribeVideoParam subscribeVideoParam = new MEETINGMANAGE_subscribeVideoParam();

            subscribeVideoParam.AVSynGroupID = model.AvSyncGroupId;
            subscribeVideoParam.mediaType    = (MEETINGMANAGE_MediaType)model.MediaType;
            subscribeVideoParam.resourceID   = model.ResourceId;


            subscribeVideoParam.sParam.vrParam.displayWindow = model.VideoRecvModel.DisplayWindow;

            subscribeVideoParam.sParam.vrParam.fillMode =
                (MEETINGMANAGE_DisplayFillMode)model.VideoRecvModel.DisplayFillMode;

            subscribeVideoParam.sType  = (MEETINGMANAGE_StreamType)model.StreamType;
            subscribeVideoParam.userid = model.UserId;

            subscribeVideoParam.transParam.checkRetransSendCount = model.TransModel.CheckRetransSendCount;
            subscribeVideoParam.transParam.checkSendCount        = model.TransModel.CheckSendCount;
            subscribeVideoParam.transParam.dataResendCount       = model.TransModel.DataResendCount;
            subscribeVideoParam.transParam.dataRetransSendCount  = model.TransModel.DataRetransSendCount;
            subscribeVideoParam.transParam.dataSendCount         = model.TransModel.DataSendCount;
            subscribeVideoParam.transParam.delayTimeWinsize      = model.TransModel.DelayTimeWinsize;
            subscribeVideoParam.transParam.fecCheckCount         = model.TransModel.FecCheckCount;
            subscribeVideoParam.transParam.fecDataCount          = model.TransModel.FecDataCount;

            return(subscribeVideoParam);
        }
        public MeetingResult Subscribe(int accountId, int resourceId, MediaType mediaType)
        {
            MeetingResult result = new MeetingResult();

            Participant participant = null;

            switch (mediaType)
            {
            case MediaType.Camera:

                var cameraParam = StreamParameterProviders.GetParameter <SubscribeCameraStreamParameter>(string.Empty);
                if (_participants.TryGetValue(accountId, out participant))
                {
                    StreamResource <IStreamParameter> streamResource =
                        participant.Resources.SingleOrDefault(res => res.ResourceId == resourceId);

                    if (streamResource == null)
                    {
                        throw new NullReferenceException("流缓存不存在。");
                    }

                    SubscribeVideoModel subscribeCameraModel = cameraParam.GetSubscribeVideoModel();
                    //subscribeCameraModel.AvSyncGroupId = (uint)streamResource.SyncId;
                    subscribeCameraModel.ResourceId = resourceId;
                    subscribeCameraModel.UserId     = accountId.ToString();

                    VideoBox videoBox;
                    if (VideoBoxManager.TryGet(participant.Account, VideoBoxType.None, mediaType, out videoBox))
                    {
                        subscribeCameraModel.VideoRecvModel.DisplayWindow = videoBox.Handle;
                        videoBox.AccountResource.ResourceId = resourceId;
                        videoBox.AccountResource.MediaType  = mediaType;
                    }

                    MeetingResult subscribeCameraResult = _meetingSdkWrapper.SubscribeVideo(subscribeCameraModel);

                    if (subscribeCameraResult.StatusCode == 0)
                    {
                        _eventAggregator.GetEvent <VideoBoxAddedEvent>().Publish(videoBox);

                        streamResource.IsUsed = true;
                        if (videoBox != null)
                        {
                            //await _meetingSdkWrapper.StartRemoteVideoRender(accountId, resourceId, videoBox.Handle,
                            //    (int)videoBox.Host.ActualWidth,
                            //    (int)videoBox.Host.ActualHeight);
                        }
                    }

                    result = subscribeCameraResult;
                }

                break;

            case MediaType.Microphone:

                var micParam = StreamParameterProviders.GetParameter <SubscribeMicStreamParameter>(string.Empty);
                if (_participants.TryGetValue(accountId, out participant))
                {
                    var streamResource =
                        participant.Resources.SingleOrDefault(res => res.ResourceId == resourceId);

                    if (streamResource == null)
                    {
                        throw new NullReferenceException("流缓存不存在。");
                    }

                    SubscribeAudioModel subscribeMicModel = micParam.GetSubscribeAudioModel();

                    subscribeMicModel.UserId = accountId.ToString();
                    //subscribeMicModel.AvSyncGroupId = (uint)streamResource.SyncId;
                    subscribeMicModel.ResourceId = resourceId;
                    string audioOutputDeviceName;
                    if (!_deviceNameAccessor.TryGetSingleName(DeviceName.Speaker, out audioOutputDeviceName))
                    {
                        throw new Exception("扬声器未设置!");
                    }
                    subscribeMicModel.AudioRecvModel.SourceName = audioOutputDeviceName;

                    var subscribeMicResult = _meetingSdkWrapper.SubscribeAudio(subscribeMicModel);
                    if (subscribeMicResult.StatusCode == 0)
                    {
                        streamResource.IsUsed = true;
                    }

                    result = subscribeMicResult;
                }


                break;

            case MediaType.VideoDoc:

                var winCapParam = StreamParameterProviders.GetParameter <SubscribeDataCardStreamParameter>(string.Empty);
                if (_participants.TryGetValue(accountId, out participant))
                {
                    var streamResource =
                        participant.Resources.SingleOrDefault(res => res.ResourceId == resourceId);

                    if (streamResource == null)
                    {
                        throw new NullReferenceException("流缓存不存在。");
                    }

                    SubscribeVideoModel subscribeWinCapModel = winCapParam.GetSubscribeVideoModel();
                    //subscribeWinCapModel.AvSyncGroupId = (uint)streamResource.SyncId;
                    subscribeWinCapModel.ResourceId = resourceId;
                    subscribeWinCapModel.UserId     = accountId.ToString();

                    VideoBox videoBox;
                    var      user = Participants.FirstOrDefault(p => p.Account.AccountId == accountId);

                    if (VideoBoxManager.TryGet(user.Account, VideoBoxType.DataCard, mediaType, out videoBox))
                    {
                        subscribeWinCapModel.VideoRecvModel.DisplayWindow = videoBox.Handle;
                        videoBox.AccountResource.ResourceId = resourceId;
                        videoBox.AccountResource.MediaType  = mediaType;
                    }

                    MeetingResult subscribeWinCapResult = _meetingSdkWrapper.SubscribeVideo(subscribeWinCapModel);

                    if (subscribeWinCapResult.StatusCode == 0)
                    {
                        _eventAggregator.GetEvent <VideoBoxAddedEvent>().Publish(videoBox);

                        streamResource.IsUsed = true;
                        if (videoBox != null)
                        {
                            //await _meetingSdkWrapper.StartRemoteVideoRender(accountId, resourceId, videoBox.Handle,
                            //    (int)videoBox.Host.ActualWidth,
                            //    (int)videoBox.Host.ActualHeight);
                        }
                    }

                    result = subscribeWinCapResult;
                }


                break;

            case MediaType.AudioDoc:
            case MediaType.AudioCaptureCard:

                var docMicParam = StreamParameterProviders.GetParameter <SubscribeMicStreamParameter>(string.Empty);
                if (_participants.TryGetValue(accountId, out participant))
                {
                    var streamResource =
                        participant.Resources.SingleOrDefault(res => res.ResourceId == resourceId);

                    if (streamResource == null)
                    {
                        throw new NullReferenceException("流缓存不存在。");
                    }

                    SubscribeAudioModel subscribeMicModel = docMicParam.GetSubscribeAudioModel();

                    subscribeMicModel.UserId = accountId.ToString();
                    //subscribeMicModel.AvSyncGroupId = (uint)streamResource.SyncId;
                    subscribeMicModel.ResourceId = resourceId;
                    string audioOutputDeviceName;
                    if (!_deviceNameAccessor.TryGetSingleName(DeviceName.Speaker, out audioOutputDeviceName))
                    {
                        throw new Exception("扬声器未设置!");
                    }
                    subscribeMicModel.AudioRecvModel.SourceName = audioOutputDeviceName;

                    var subscribeMicResult = _meetingSdkWrapper.SubscribeAudio(subscribeMicModel);
                    if (subscribeMicResult.StatusCode == 0)
                    {
                        streamResource.IsUsed = true;
                    }

                    result = subscribeMicResult;
                }

                break;

            case MediaType.VideoCaptureCard:

                var dataCardParam = StreamParameterProviders.GetParameter <SubscribeWinCaptureStreamParameter>(string.Empty);
                if (_participants.TryGetValue(accountId, out participant))
                {
                    var streamResource =
                        participant.Resources.SingleOrDefault(res => res.ResourceId == resourceId);

                    if (streamResource == null)
                    {
                        throw new NullReferenceException("流缓存不存在。");
                    }

                    SubscribeVideoModel subscribeDataCardModel = dataCardParam.GetSubscribeVideoModel();
                    //subscribeDataCardModel.AvSyncGroupId = (uint)streamResource.SyncId;
                    subscribeDataCardModel.ResourceId = resourceId;
                    subscribeDataCardModel.UserId     = accountId.ToString();

                    VideoBox    videoBox;
                    Participant user = Participants.FirstOrDefault(p => p.Account.AccountId == accountId);

                    if (VideoBoxManager.TryGet(user.Account, VideoBoxType.WinCapture, mediaType, out videoBox))
                    {
                        subscribeDataCardModel.VideoRecvModel.DisplayWindow = videoBox.Handle;
                        videoBox.AccountResource.ResourceId = resourceId;
                        videoBox.AccountResource.MediaType  = mediaType;
                    }

                    MeetingResult subscribeCameraResult =
                        _meetingSdkWrapper.SubscribeVideo(subscribeDataCardModel);

                    if (subscribeCameraResult.StatusCode == 0)
                    {
                        _eventAggregator.GetEvent <VideoBoxAddedEvent>().Publish(videoBox);

                        streamResource.IsUsed = true;
                        if (videoBox != null)
                        {
                            //await _meetingSdkWrapper.StartRemoteVideoRender(accountId, resourceId, videoBox.Handle,
                            //    (int)videoBox.Host.ActualWidth,
                            //    (int)videoBox.Host.ActualHeight);
                        }
                    }

                    result = subscribeCameraResult;
                }

                break;

            case MediaType.StreamMedia:
                break;

            case MediaType.File:
                break;

            case MediaType.WhiteBoard:
                break;

            case MediaType.RemoteControl:
                break;

            case MediaType.MediaTypeMax:
                break;
            }
            LayoutChanged(mediaType);
            return(result);
        }