Beispiel #1
0
 private async Task UpdateRecordPreview(GeneratePreviewAction action, string previewPath)
 {
     using (var stream = File.OpenRead(previewPath))
     {
         await _facade.SetPreview(action.RecordId, new FileModel
         {
             Stream   = stream,
             FileName = Path.GetFileName(previewPath)
         });
     }
 }
Beispiel #2
0
        private TimeSpan GetSnapshotTime(GeneratePreviewAction action, IVideoStream stream)
        {
            if (action.TimeOfSnapshot.HasValue)
            {
                return(action.TimeOfSnapshot.Value);
            }

            var snapshotTime = stream.Duration.TotalMilliseconds / 5;

            return(TimeSpan.FromMilliseconds(snapshotTime));
        }
Beispiel #3
0
        private async Task <ActionHandlerResult> Handle(GeneratePreviewAction action)
        {
            EnsureActionOutputIsImage(action);
            var previewPath = await GeneratePreview(action);

            if (previewPath == null)
            {
                return(ActionHandlerResult.Successful(action.OutputPath));
            }

            await UpdateRecordPreview(action, previewPath);

            return(ActionHandlerResult.Successful(action.OutputPath, createNewRecord: false));
        }
Beispiel #4
0
        private Task <string> GeneratePreview(GeneratePreviewAction action)
        {
            var mediaType = _typeMapper.Map(Path.GetExtension(action.InputPath));

            if (mediaType.Contains(MediaType.Video) || mediaType.Contains(MediaType.Gif))
            {
                return(GenerateForVideo(action));
            }
            //if (mediaType.Contains(MediaType.Image))
            //{
            //    //
            //}

            return(Task.FromResult <string>(null));
        }
Beispiel #5
0
        private async Task <string> GenerateForVideo(GeneratePreviewAction action)
        {
            var info = await Xabe.FFmpeg.FFmpeg.GetMediaInfo(action.InputPath);

            var snapshotTime = GetSnapshotTime(action, info.VideoStreams.First());

            var conversion = await Xabe.FFmpeg.FFmpeg.Conversions.FromSnippet
                             .Snapshot(
                action.InputPath,
                action.OutputPath,
                snapshotTime);

            var result = await conversion.Start();

            return(action.OutputPath);
        }
Beispiel #6
0
 private void EnsureActionOutputIsImage(GeneratePreviewAction action)
 {
     action.OutputPath = Path.Combine(
         Path.GetDirectoryName(action.OutputPath),
         Path.GetFileNameWithoutExtension(action.OutputPath) + ".jpg");
 }