コード例 #1
0
        protected override void StartUpload(RecordVideoInfo info)
        {
            //TODO: 凭证失效时需要刷新凭证
            var uploadAddressInfo = GetUploadAddress(info);

            var ossClient = new OssClient(uploadAddressInfo.UploadAddressInfo.Endpoint, uploadAddressInfo.UploadAuth.AccessKeyId, uploadAddressInfo.UploadAuth.AccessKeySecret, uploadAddressInfo.UploadAuth.SecurityToken);

            using (var fs = File.Open(Path.Combine(info.FileSavePath, info.FileName), FileMode.Open))
            {
                var putObjectRequest = new PutObjectRequest(uploadAddressInfo.UploadAddressInfo.Bucket, uploadAddressInfo.UploadAddressInfo.FileName, fs);
                putObjectRequest.StreamTransferProgress += StreamTransferProgress;
                ossClient.PutObject(putObjectRequest);
            }

            var result = _serviceClient.GetResponse(
                _webPlatformApiFactory.CreateSaveAlibabaVodVideoIdRequest(
                    uploadTaskInfo.RecordInfo.ScheduleId,
                    uploadAddressInfo.CreateUploadVideoResponse.VideoId,
                    info.VideoType.ToString(),
                    uploadTaskInfo.RecordInfo.Index
                    )
                );

            //TODO:videoid 保存成功时才能标记为上传完成
            if (!result.Success)
            {
                uploadTaskInfo.UploadStatus = result.Message;
                return;
            }
            MarkFileUploadCompleted(info);
        }
コード例 #2
0
 private Tuple <bool, string> AppendFileContent(RecordVideoInfo info)
 {
     using (var fs = File.Open(Path.Combine(info.FileSavePath, info.FileName), FileMode.Open))
     {
         var appendFileContentRequest = _webPlatformApiFactory.CreateAppendFileContentRequest(_endpoint, info.TempFileID, fs);
         appendFileContentRequest.StreamTransferProgress += StreamTransferProgress;
         var rsp = _serviceClient.GetResponse(appendFileContentRequest);
         return(WarpperResult(rsp.Success, rsp.Message));
     }
 }
コード例 #3
0
        private CreateUploadVideoRequest CreateUploadVideoRequest(RecordVideoInfo info)
        {
            CreateUploadVideoRequest request = new CreateUploadVideoRequest
            {
                Title    = uploadTaskInfo.RecordInfo.Title + info.VideoType,
                FileName = info.FileName
            };

            return(request);
        }
コード例 #4
0
        private Tuple <bool, string> GetTempFileId(RecordVideoInfo info)
        {
            var rsp = _serviceClient.GetResponse(_webPlatformApiFactory.CreateTempFileRequest(_endpoint, info.FileName));

            if (!rsp.Success)
            {
                return(WarpperResult(rsp.Success, rsp.Message));
            }

            return(WarpperResult(rsp.Success, rsp.Value.TempFileId));
        }
コード例 #5
0
        private CreateUploadVideoResponseResult GetUploadAddress(RecordVideoInfo info)
        {
            DefaultAcsClient          client   = InitVodClient();
            CreateUploadVideoResponse response = client.GetAcsResponse(CreateUploadVideoRequest(info));

            return(new CreateUploadVideoResponseResult()
            {
                CreateUploadVideoResponse = response,
                UploadAddressInfo = JsonConvert.DeserializeObject <UploadAddressInfo>(Encoding.UTF8.GetString(Convert.FromBase64String(response.UploadAddress))),
                UploadAuth = JsonConvert.DeserializeObject <UploadAuth>(Encoding.UTF8.GetString(Convert.FromBase64String(response.UploadAuth)))
            });
        }
コード例 #6
0
        private Tuple <bool, string> _StartRecording()
        {
            lock (syncState)
            {
                int index = _config.VideoIndex;
                var state = _speechVideoLiveAndRecordProvider.RecordState;
                if (state == RecAndLiveState.NotStart)
                {
                    _speechVideoRecordingInfo  = CreateRecordingFileInfo(VideoType.VGA);
                    _teacherVideoRecordingInfo = CreateRecordingFileInfo(VideoType.Video1);
                    _recordInfo = new RecordInfo {
                        Index = index, ScheduleId = _liveInfo.ScheduleID, StartRecordingTime = DateTime.Now, Title = _liveInfo.Title
                    };
                    _recordInfo.VideoFiles.Add(_speechVideoRecordingInfo);
                    _recordInfo.VideoFiles.Add(_teacherVideoRecordingInfo);
                }
                Tuple <bool, string> result = _speechVideoLiveAndRecordProvider.StartRecording(_config.RecFileSavePath, _speechVideoRecordingInfo.FileName);
                if (!result.Item1)
                {
                    return(result);
                }

                result = _teacherVideoLiveAndRecordProvider.StartRecording(_config.RecFileSavePath, _teacherVideoRecordingInfo.FileName);

                if (!result.Item1)
                {
                    _speechVideoLiveAndRecordProvider.StopRecording();
                    return(result);
                }

                StartRecordingBtnIsEnable = false;
                StopRecordingBtnIsEnable  = PauseRecordingBtnIsEnable = true;

                if (state == RecAndLiveState.Pause)
                {
                    _eventAggregator.GetEvent <LiveAndRecordingOperateEvent>().Publish(new LiveAndRecordingOperateEventContext(LiveAndRecordingOperateEventSourceType.Recording, LiveAndRecordingOperateEventType.Resume));
                }
                else
                {
                    _eventAggregator.GetEvent <LiveAndRecordingOperateEvent>().Publish(new LiveAndRecordingOperateEventContext(LiveAndRecordingOperateEventSourceType.Recording, LiveAndRecordingOperateEventType.Start));
                }


                return(result);
            }
        }
コード例 #7
0
        protected override void StartUpload(RecordVideoInfo info)
        {
            var tempFileIdResult = GetTempFileId(info);

            if (!tempFileIdResult.Item1)
            {
                uploadTaskInfo.UploadStatus = tempFileIdResult.Item2;
                return;
            }
            info.TempFileID = tempFileIdResult.Item2;
            var appendFileContentResult = AppendFileContent(info);

            if (!appendFileContentResult.Item1)
            {
                uploadTaskInfo.UploadStatus = appendFileContentResult.Item2;
                return;
            }
            MarkFileUploadCompleted(info);
        }
コード例 #8
0
 protected abstract void StartUpload(RecordVideoInfo info);
コード例 #9
0
 protected void MarkFileUploadCompleted(RecordVideoInfo info)
 {
     info.UploadedCompleted[StorageInfo.ID] = true;
 }