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) }); } }
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)); }
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)); }
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)); }
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); }
private void EnsureActionOutputIsImage(GeneratePreviewAction action) { action.OutputPath = Path.Combine( Path.GetDirectoryName(action.OutputPath), Path.GetFileNameWithoutExtension(action.OutputPath) + ".jpg"); }