Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d88cfa2cd3 | |||
| cd30876beb |
@@ -121,26 +121,36 @@ public class ThumbnailService(IMongoDatabase db, AobaService aobaService)
|
||||
public Maybe<Stream> GenerateVideoThumbnail(Stream data, ThumbnailSize size, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var w = (int)size;
|
||||
var source = new MemoryStream();
|
||||
var fn = ObjectId.GenerateNewId().ToString();
|
||||
var filePath = $"/tmp/{fn}.in";
|
||||
using var source = new FileStream(filePath, FileMode.CreateNew);
|
||||
data.CopyTo(source);
|
||||
source.Position = 0;
|
||||
source.Flush();
|
||||
source.Dispose();
|
||||
data.Dispose();
|
||||
try
|
||||
{
|
||||
var output = new MemoryStream();
|
||||
FFMpegArguments.FromPipeInput(new StreamPipeSource(source), opt =>
|
||||
FFMpegArguments.FromFileInput(filePath, false, opt =>
|
||||
{
|
||||
opt.WithCustomArgument("-t 5");
|
||||
}).OutputToPipe(new StreamPipeSink(output), opt =>
|
||||
{
|
||||
opt.WithCustomArgument($"-vf \"crop='min(in_w,in_h)':'min(in_w,in_h)',scale={w}:{w}\" -loop 0 -r 15")
|
||||
.ForceFormat("webp");
|
||||
}).Configure(cfg =>
|
||||
{
|
||||
#if !DEBUG
|
||||
cfg.BinaryFolder = "/usr/bin";
|
||||
#endif
|
||||
}).ProcessSynchronously();
|
||||
output.Position = 0;
|
||||
return output;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
return ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
File.Delete(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<Maybe<Stream>> GenerateDocumentThumbnailAsync(Stream data, ThumbnailSize size, CancellationToken cancellationToken = default)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,7 @@ RUN dx bundle --platform web
|
||||
# Server Build
|
||||
# This stage is used when running from VS in fast mode (Default for Debug configuration)
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
|
||||
RUN apt-get update && apt-get install -y ffmpeg
|
||||
USER $APP_UID
|
||||
WORKDIR /app
|
||||
EXPOSE 8080
|
||||
@@ -57,9 +58,8 @@ RUN dotnet publish "./AobaServer.csproj" -c $BUILD_CONFIGURATION -o /app/publish
|
||||
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
USER root
|
||||
RUN apt-get update && apt-get install -y ffmpeg
|
||||
COPY --from=publish /app/publish .
|
||||
ARG VERSION
|
||||
|
||||
ENV APP_VERSION=$VERSION
|
||||
ENTRYPOINT ["dotnet", "AobaServer.dll"]
|
||||
|
||||
Reference in New Issue
Block a user