From dba34000b992d47eab44cee44b7976df4147c98f Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Thu, 6 Jan 2022 14:40:54 +0000 Subject: [PATCH] ATS-812: PoC FFmpeg (experimental) - remove extra isTransformable check (& related isSupported src/tgt) for now - add mov to mp4 to supported src/tgt config - update lic headers to 2022 --- .../org/alfresco/transformer/Application.java | 5 +- .../transformer/FFmpegController.java | 77 +------------------ .../transformer/FFmpegControllerTest.java | 4 +- .../transformer/FFmpegHttpRequestTest.java | 4 +- .../FFmpegQueueTransformServiceIT.java | 2 +- .../test/resources/ffmpeg_engine_config.json | 3 +- .../transformer/FFmpegOptionsBuilder.java | 2 +- .../executors/FFmpegCommandExecutor.java | 5 +- .../main/resources/ffmpeg_engine_config.json | 3 +- 9 files changed, 23 insertions(+), 82 deletions(-) diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/Application.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/Application.java index da183571..b4a56386 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/Application.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/Application.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -44,6 +44,9 @@ import java.util.Arrays; import static org.alfresco.transformer.logging.StandardMessages.LICENCE; +/** + * @author janv + */ @SpringBootApplication @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) public class Application diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/FFmpegController.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/FFmpegController.java index e466026e..b69f0e9b 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/FFmpegController.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/main/java/org/alfresco/transformer/FFmpegController.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -39,7 +39,7 @@ import java.util.Collections; import java.util.Map; /** - * Controller for the Docker based FFmpeg transformer. + * Controller for the FFmpeg transformer. * * Status Codes: * @@ -57,6 +57,8 @@ import java.util.Map; * 500 Internal Server Error: Transformer failed to create an output file (the exit code was 0, so there should be some content) * 500 Internal Server Error: Filename encoding error * 507 Insufficient Storage: Failed to store the source file + * + * @author janv */ @Controller public class FFmpegController extends AbstractTransformerController @@ -65,16 +67,6 @@ public class FFmpegController extends AbstractTransformerController FFmpegController .class); - // note: subset from Gytheio - - public static final String PREFIX_AUDIO = "audio/"; - public static final String PREFIX_IMAGE = "image/"; - public static final String PREFIX_VIDEO = "video/"; - - public static final String MEDIATYPE_IMAGE_SVG = "image/svg+xml"; - public static final String MEDIATYPE_APPLICATION_PHOTOSHOP = "image/vnd.adobe.photoshop"; - public static final String MEDIATYPE_IMG_DWG = "image/vnd.dwg"; - @Value("${transform.core.ffmpeg.exe}") private String execPath; @@ -125,67 +117,6 @@ public class FFmpegController extends AbstractTransformerController public void transformImpl(String transformName, String sourceMimetype, String targetMimetype, Map transformOptions, File sourceFile, File targetFile) { - // note: actual supported transforms are defined by FFmpeg engine config - this is an extra sanity check - if (! isTransformable(sourceMimetype, targetMimetype)) - { - throw new UnsupportedOperationException("Unsupported combinations of source/target media types: "+sourceMimetype+","+targetMimetype); - } - commandExecutor.transform(sourceMimetype, targetMimetype, transformOptions, sourceFile, targetFile); } - - /** - * Determines if the source mimetype is supported by ffmpeg - * - * @param mediaType the mimetype to check - * @return Returns true if ffmpeg can handle the given mimetype format - */ - private static boolean isSupportedSource(String mediaType) - { - return ((mediaType.startsWith(PREFIX_VIDEO) && !( - mediaType.equals("video/x-rad-screenplay") || - mediaType.equals("video/x-sgi-movie") || - mediaType.equals("video/mpeg2"))) || - (mediaType.startsWith(PREFIX_AUDIO) && !( - mediaType.equals("audio/vnd.adobe.soundbooth"))) || - mediaType.equals("application/mxf")); - } - - /** - * Determines if FFmpeg can be made to support the given target mimetype. - * - * @param mimetype the mimetype to check - * @return Returns true if ffmpeg can handle the given mimetype format - */ - private static boolean isSupportedTarget(String mimetype) - { - return ((mimetype.startsWith(PREFIX_VIDEO) && !( - mimetype.equals("video/x-rad-screenplay") || - mimetype.equals("video/x-sgi-movie") || - mimetype.equals("video/mpeg2"))) || - (mimetype.startsWith(PREFIX_IMAGE) && !( - mimetype.equals(MEDIATYPE_IMAGE_SVG) || - mimetype.equals(MEDIATYPE_APPLICATION_PHOTOSHOP) || - mimetype.equals(MEDIATYPE_IMG_DWG) || - mimetype.equals("image/vnd.adobe.premiere") || - mimetype.equals("image/x-portable-anymap") || - mimetype.equals("image/x-xpixmap") || - mimetype.equals("image/x-dwt") || - mimetype.equals("image/cgm") || - mimetype.equals("image/ief"))) || - (mimetype.startsWith(PREFIX_AUDIO) && !( - mimetype.equals("audio/vnd.adobe.soundbooth")))); - } - - // note: based on Gytheio - private boolean isTransformable(String sourceMediaType, String targetMediaType) - { - if (sourceMediaType.startsWith(PREFIX_AUDIO) && - targetMediaType.startsWith(PREFIX_IMAGE)) - { - // Might be able to support audio to waveform image in the future, but for now... - return false; - } - return (isSupportedSource(sourceMediaType) && isSupportedTarget(targetMediaType)); - } } diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java index 016d7856..43e59344 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegControllerTest.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -79,6 +79,8 @@ import javax.annotation.PostConstruct; /** * Test the FFmpegController without a server. * Super class includes tests for the AbstractTransformerController. + * + * @author janv */ @WebMvcTest(FFmpegController.class) public class FFmpegControllerTest extends AbstractTransformerControllerTest diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java index 0ef59482..63b75334 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegHttpRequestTest.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -31,6 +31,8 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; /** * Tests FFmpegController with a server test harness. + * + * @author janv */ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) public class FFmpegHttpRequestTest extends AbstractHttpRequestTest diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java index cd29ddcf..2296d16b 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/java/org/alfresco/transformer/FFmpegQueueTransformServiceIT.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json index cef69ef5..d1ba2a08 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg-boot/src/test/resources/ffmpeg_engine_config.json @@ -11,7 +11,8 @@ {"sourceMediaType": "video/mp4", "targetMediaType": "video/avi" }, {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }, {"sourceMediaType": "video/mp4", "targetMediaType": "image/png" }, - {"sourceMediaType": "video/mp4", "targetMediaType": "image/jpeg" } + {"sourceMediaType": "video/mp4", "targetMediaType": "image/jpeg" }, + {"sourceMediaType": "video/quicktime", "targetMediaType": "video/mp4" } ], "transformOptions": [ "ffmpegOptions" diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/FFmpegOptionsBuilder.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/FFmpegOptionsBuilder.java index 0fe55dda..08403c89 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/FFmpegOptionsBuilder.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/FFmpegOptionsBuilder.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java index 980b245b..69fb29a9 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/java/org/alfresco/transformer/executors/FFmpegCommandExecutor.java @@ -2,7 +2,7 @@ * #%L * Alfresco Transform Core * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited + * Copyright (C) 2005 - 2022 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - @@ -33,7 +33,6 @@ import java.io.File; import java.util.HashMap; import java.util.Map; -import static org.alfresco.transformer.util.RequestParamMap.START_PAGE; import static org.alfresco.transformer.util.RequestParamMap.TIMEOUT; import static org.alfresco.transformer.util.RequestParamMap.TIME_OFFSET; import static org.alfresco.transformer.util.Util.stringToLong; @@ -41,6 +40,8 @@ import static org.alfresco.transformer.util.Util.stringToLong; /** * CommandExecutor implementation for running FFmpeg transformations. It runs the * transformation logic as a separate Shell process. + * + * @author janv */ // TODO PoC for FFmpeg public class FFmpegCommandExecutor extends AbstractCommandExecutor diff --git a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json index cef69ef5..d1ba2a08 100644 --- a/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json +++ b/alfresco-transform-ffmpeg/alfresco-transform-ffmpeg/src/main/resources/ffmpeg_engine_config.json @@ -11,7 +11,8 @@ {"sourceMediaType": "video/mp4", "targetMediaType": "video/avi" }, {"sourceMediaType": "video/mp4", "targetMediaType": "audio/mpeg" }, {"sourceMediaType": "video/mp4", "targetMediaType": "image/png" }, - {"sourceMediaType": "video/mp4", "targetMediaType": "image/jpeg" } + {"sourceMediaType": "video/mp4", "targetMediaType": "image/jpeg" }, + {"sourceMediaType": "video/quicktime", "targetMediaType": "video/mp4" } ], "transformOptions": [ "ffmpegOptions"