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); }
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); }