Exemplo n.º 1
0
        private async Task StartSdkAsync()
        {
            if (!_sdkService.IsServerStarted)
            {
                _sdkService.SetSdkServerPath(Path.Combine(Environment.CurrentDirectory, "sdk"));

                IVisualizeShell visualizeShellService =
                    IoC.Get <IVisualizeShell>();

                visualizeShellService.StartingSdk();

                UserInfo userInfo = IoC.Get <UserInfo>();

                AsyncCallbackMsg startResult = await _sdkService.StartServerViaAppKey(userInfo.AppKey, userInfo.OpenId,
                                                                                      userInfo.GetNube(), "http://xmeeting.butel.com/nps_x1");

                if (startResult.Status != 0)
                {
                    visualizeShellService.FinishStartingSdk(false, startResult.Message);
                }
                else
                {
                    visualizeShellService.FinishStartingSdk(true, Messages.InfoMeetingSdkStarted);
                    AsyncCallbackMsg setFillModeResult = _sdkService.SetFillMode(0);

                    HasErrorMsg(setFillModeResult.Status.ToString(), Messages.WarningSetFillModeFailed);
                }

                //Thread.Sleep(1000);
            }
        }
Exemplo n.º 2
0
        private async Task JoinMeetingAsync()
        {
            uint mId;

            if (!uint.TryParse(MeetingId, out mId))
            {
                HasErrorMsg("-1", Messages.WarningInvalidMeetingNo);
                return;
            }


            int meetingId = (int)mId;

            if (meetingId == 0)
            {
                HasErrorMsg("-1", Messages.WarningInvalidMeetingNo);
                return;
            }

            AsyncCallbackMsg result = await _sdkService.VerifyMeetingExist(meetingId);

            if (result.Status == 6)
            {
                result.Message = Messages.WarningMeetingNoDoesNotExist;
            }

            if (HasErrorMsg(result.Status.ToString(), result.Message))
            {
                return;
            }

            _sdkService.MeetingId = meetingId;

            await GotoMeetingViewAsync();
        }
        private async Task ParticipateOrWatchAsync()
        {
            ResponseResult meetingResult = await _bmsService.GetMeetingByLessonId(CurLessonDetail.Id.ToString());


            Log.Logger.Debug(
                $"【get meetingId by lessonId result】:result={meetingResult.Status}, msg={meetingResult.Message}, data={meetingResult.Data}");

            if (HasErrorMsg(meetingResult.Status, meetingResult.Message))
            {
                return;
            }

            if (meetingResult.Data == null)
            {
                HasErrorMsg("-1", Messages.WarningNullDataFromServer);
                return;
            }

            switch (meetingResult.Data.ToString())
            {
            case "-1":
                HasErrorMsg("-1", Messages.WarningYouNeedCreateAMeeting);

                //create a meeting and update to database
                AsyncCallbackMsg createMeetingResult = await _sdkService.CreateInstantMeeting(new Participant[0]);

                Log.Logger.Debug(
                    $"【create meeting result】:result={createMeetingResult.Status}, msg={createMeetingResult.Message}");

                if (
                    !HasErrorMsg(createMeetingResult.Status.ToString(),
                                 createMeetingResult.Message))
                {
                    ResponseResult updateResult =
                        await _bmsService.UpdateMeetingId(CurLessonDetail.Id, _sdkService.MeetingId);

                    if (!HasErrorMsg(updateResult.Status, updateResult.Message))
                    {
                        await GotoMeeting(_sdkService.MeetingId);
                    }
                }

                break;

            case "0":
                //someone is creating a meeting, just wait
                HasErrorMsg("-1", Messages.WarningSomeoneIsCreatingAMeeting);

                break;

            default:
                int meetingId = int.Parse(meetingResult.Data.ToString());

                await GotoMeeting(meetingId);

                break;
            }
        }
Exemplo n.º 4
0
        //command handlers
        private async Task CreateMeetingAsync()
        {
            AsyncCallbackMsg createMeetingResult = await _sdkService.CreateInstantMeeting(new Participant[0]);

            if (HasErrorMsg(createMeetingResult.Status.ToString(), createMeetingResult.Message))
            {
                return;
            }

            await GotoMeetingViewAsync();
        }
Exemplo n.º 5
0
        private async Task StartPushLiveStreamAutomatically()
        {
            _serverPushLiveService.GetLiveParam();

            UserInfo userInfo = IoC.Get <UserInfo>();

            AsyncCallbackMsg result =
                await
                _serverPushLiveService.StartPushLiveStream(
                    GetStreamLayout(_serverPushLiveService.LiveParam.Width,
                                    _serverPushLiveService.LiveParam.Height), userInfo.PushStreamUrl);
        }
        public async Task <AsyncCallbackMsg> StopRecord()
        {
            if (RecordId != 0)
            {
                Log.Logger.Debug($"【local record live stop begins】:liveId={RecordId}");
                AsyncCallbackMsg stopAsynCallResult = await _sdkService.StopRecord();

                RecordId = 0;

                Log.Logger.Debug(
                    $"【local record live stop result】:result={stopAsynCallResult.Status}, msg={stopAsynCallResult.Message}");
                return(stopAsynCallResult);
            }

            return(AsyncCallbackMsg.GenerateMsg(Messages.WarningNoLiveToStop));
        }
        public async Task <AsyncCallbackMsg> StopPushLiveStream()
        {
            if (LiveId != 0)
            {
                Log.Logger.Debug($"【local push live stop begins】:liveId={LiveId}");
                AsyncCallbackMsg stopAsynCallResult = await _sdkService.StopLiveStream(LiveId);

                LiveId = 0;

                Log.Logger.Debug(
                    $"【local push live stop result】:result={stopAsynCallResult}, msg={stopAsynCallResult.Message}");
                return(stopAsynCallResult);
            }

            return(AsyncCallbackMsg.GenerateMsg(Messages.WarningNoLiveToStop));
        }
        public async Task <AsyncCallbackMsg> StartRecord(List <LiveVideoStream> liveVideoStreamInfos)
        {
            if (string.IsNullOrEmpty(RecordDirectory))
            {
                return(AsyncCallbackMsg.GenerateMsg(Messages.WarningRecordDirectoryNotSet));
            }


            if (RecordParam.Width == 0 || RecordParam.Height == 0 || RecordParam.VideoBitrate == 0)
            {
                return(AsyncCallbackMsg.GenerateMsg(Messages.WarningRecordResolutionNotSet));
            }

            AsyncCallbackMsg result = await _sdkService.SetRecordDirectory(RecordDirectory);

            AsyncCallbackMsg setRecordParamResult = await _sdkService.SetRecordParameter(RecordParam);

            string recordFileName = $"{DateTime.Now:yyyy_MM_dd_HH_mm_ss}.mp4";

            Log.Logger.Debug(
                $"【local record live begins】:width={RecordParam.Width}, height={RecordParam.Height}, bitrate={RecordParam.VideoBitrate}, path={Path.Combine(RecordDirectory, recordFileName)}, videos={liveVideoStreamInfos.Count}");

            for (int i = 0; i < liveVideoStreamInfos.Count; i++)
            {
                Log.Logger.Debug(
                    $"video{i + 1}:x={liveVideoStreamInfos[i].X}, y={liveVideoStreamInfos[i].Y}, width={liveVideoStreamInfos[i].Width}, height={liveVideoStreamInfos[i].Height}");
            }

            AsyncCallbackMsg localRecordResult =
                await
                _sdkService.StartRecord(recordFileName, liveVideoStreamInfos.ToArray(), liveVideoStreamInfos.Count);

            if (localRecordResult.Status == 0)
            {
                RecordId = int.Parse(localRecordResult.Data.ToString());

                Log.Logger.Debug($"【local record live succeeded】:liveId={RecordId}");
            }
            else
            {
                Log.Logger.Error($"【local record live failed】:{localRecordResult.Message}");
            }

            return(localRecordResult);
        }
Exemplo n.º 9
0
        public async Task <AsyncCallbackMsg> StartPushLiveStream(List <LiveVideoStream> liveVideoStreamInfos,
                                                                 string pushLiveUrl)
        {
            if (string.IsNullOrEmpty(pushLiveUrl))
            {
                return(AsyncCallbackMsg.GenerateMsg(Messages.WarningLivePushLiveUrlNotSet));
            }

            LiveVideoParameter liveParam = LiveParam;

            liveParam.Url1 = pushLiveUrl;

            if (liveParam.Width == 0 || liveParam.Height == 0 || liveParam.VideoBitrate == 0)
            {
                return(AsyncCallbackMsg.GenerateMsg(Messages.WarningLiveResolutionNotSet));
            }

            Log.Logger.Debug(
                $"【server push live begins】:width={liveParam.Width}, height={liveParam.Height}, bitrate={liveParam.VideoBitrate}, url={liveParam.Url1}, videos={liveVideoStreamInfos.Count}");

            for (int i = 0; i < liveVideoStreamInfos.Count; i++)
            {
                Log.Logger.Debug(
                    $"video{i + 1}:x={liveVideoStreamInfos[i].X}, y={liveVideoStreamInfos[i].Y}, width={liveVideoStreamInfos[i].Width}, height={liveVideoStreamInfos[i].Height}");
            }

            AsyncCallbackMsg startLiveStreamResult =
                await _sdkService.StartLiveStream(liveParam, liveVideoStreamInfos.ToArray(), liveVideoStreamInfos.Count);

            if (startLiveStreamResult.Status == 0)
            {
                LiveId = int.Parse(startLiveStreamResult.Data.ToString());

                HasPushLiveSuccessfully = true;
                Log.Logger.Debug($"【server push live succeeded】:liveId={LiveId}");
            }
            else
            {
                HasPushLiveSuccessfully = false;
                Log.Logger.Error($"【server push live failed】:{startLiveStreamResult.Message}");
            }

            return(startLiveStreamResult);
        }
Exemplo n.º 10
0
        public AsyncCallbackMsg RefreshLiveStream(List <LiveVideoStream> openedStreamInfos)
        {
            if (LiveId != 0)
            {
                Log.Logger.Debug($"【server refresh live begins】:liveId={LiveId}, videos={openedStreamInfos.Count}");
                for (int i = 0; i < openedStreamInfos.Count; i++)
                {
                    Log.Logger.Debug(
                        $"video{i + 1}:x={openedStreamInfos[i].X}, y={openedStreamInfos[i].Y}, width={openedStreamInfos[i].Width}, height={openedStreamInfos[i].Height}");
                }

                AsyncCallbackMsg updateAsynCallResult = _sdkService.UpdateLiveVideoStreams(LiveId,
                                                                                           openedStreamInfos.ToArray(), openedStreamInfos.Count);
                Log.Logger.Debug(
                    $"【server refresh live result】:result={updateAsynCallResult.Status}, msg={updateAsynCallResult.Message}");
                return(updateAsynCallResult);
            }
            return(AsyncCallbackMsg.GenerateMsg(Messages.WarningNoLiveToRefresh));
        }
Exemplo n.º 11
0
        private async Task StartPushLiveStreamAutomatically()
        {
            _serverPushLiveService.GetLiveParam();

            UserInfo userInfo = DependencyResolver.Current.GetService <UserInfo>();

            AsyncCallbackMsg result =
                await
                _serverPushLiveService.StartPushLiveStream(
                    GetStreamLayout(_serverPushLiveService.LiveParam.Width,
                                    _serverPushLiveService.LiveParam.Height), userInfo.PushStreamUrl);

            if (result.Status == 0)
            {
                await
                _serverPushLiveService.RefreshLiveStream(
                    GetStreamLayout(_serverPushLiveService.LiveParam.Width,
                                    _serverPushLiveService.LiveParam.Height));
            }
            else
            {
                //log error msg
            }
        }
        private void LoadedAsync()
        {
            var participants = _sdkService.GetParticipants();

            participants.ForEach(view =>
            {
                AttendeeItems.Add(new AttendeeItem()
                {
                    Text =
                        view.PhoneId == _sdkService.SelfPhoneId
                            ? "我"
                            : _userInfos.FirstOrDefault(user => user.GetNube() == view.PhoneId)?.Name,
                    Content       = view.IsSpeaking ? CancelSpeaking : SetSpeaking,
                    Id            = view.PhoneId,
                    ButtonCommand = view.PhoneId == _sdkService.SelfPhoneId
                        ? new DelegateCommand <AttendeeItem>(async(self) =>
                    {
                        switch (self.Content)
                        {
                        case CancelSpeaking:
                            AsyncCallbackMsg stopSpeakMsg = await _sdkService.StopSpeak();
                            if (stopSpeakMsg.HasError)
                            {
                                self.Content = CancelSpeaking;
                                MessageQueueManager.Instance.AddInfo(stopSpeakMsg.Message);
                            }
                            else
                            {
                                self.Content = SetSpeaking;
                            }
                            break;

                        case SetSpeaking:
                            AsyncCallbackMsg startSpeakMsg = await _sdkService.ApplyToSpeak();
                            if (startSpeakMsg.HasError)
                            {
                                self.Content = SetSpeaking;
                                MessageQueueManager.Instance.AddInfo(startSpeakMsg.Message);
                            }
                            else
                            {
                                self.Content = CancelSpeaking;
                            }
                            break;
                        }
                    })
                        : new DelegateCommand <AttendeeItem>((attendeeItem) =>
                    {
                        switch (attendeeItem.Content)
                        {
                        case CancelSpeaking:

                            //AsyncCallbackMsg stopCallbackMsg = _sdkService.RequireUserStopSpeak(attendeeItem.Id);
                            int stopSpeakCmd = (int)UiMessage.BannedToSpeak;
                            AsyncCallbackMsg sendStopSpeakMsg = _sdkService.SendMessage(stopSpeakCmd,
                                                                                        stopSpeakCmd.ToString(), stopSpeakCmd.ToString().Length, attendeeItem.Id);

                            if (sendStopSpeakMsg.HasError)
                            {
                                attendeeItem.Content = CancelSpeaking;
                                MessageQueueManager.Instance.AddInfo(sendStopSpeakMsg.Message);
                            }
                            else
                            {
                                attendeeItem.Content = SetSpeaking;
                            }

                            break;

                        case SetSpeaking:
                            //AsyncCallbackMsg startCallbackMsg = _sdkService.RequireUserSpeak(attendeeItem.Id);

                            int startSpeakCmd = (int)UiMessage.AllowToSpeak;
                            AsyncCallbackMsg sendStartSpeakMsg = _sdkService.SendMessage(startSpeakCmd,
                                                                                         startSpeakCmd.ToString(), startSpeakCmd.ToString().Length, attendeeItem.Id);


                            if (sendStartSpeakMsg.HasError)
                            {
                                attendeeItem.Content = SetSpeaking;
                                MessageQueueManager.Instance.AddInfo(sendStartSpeakMsg.Message);
                            }
                            else
                            {
                                attendeeItem.Content = CancelSpeaking;
                            }

                            break;
                        }
                    })
                });
            });

            //InputSimulatorManager.Instance.Simulator.Keyboard.KeyPress(VirtualKeyCode.TAB);
            InputSimulatorManager.Instance.Simulator.Keyboard.KeyPress(VirtualKeyCode.TAB);
        }