Digital media in enterprises is becoming a core content type, from sharing video and images internally, for marketing requirements, and publishing externally. The ability to manipulate, find and store digital media is extremely important. Digital assets do not lend themselves to traditional text-based searching, so providing the ability to add informational metadata for file retrieval is key. Digital assets can be large and might also be located in silos across an enterprise and it is crucial to centrally store, re-use and share these assets to provide value and collaboration within the organization.
Media Management provides many user interface enhancements for rich media handling, including video timeline comments and thumbnails, video trimming, and image manipulation.
Media Management enables you to optimize the delivery of media to different devices in a more resource effective way.
With Media Management you have flexibility when transforming your content, either on-premise with content transformation nodes that use FFmpeg and ImageMagick, or remotely through Amazon Web Services (AWS) Elastic Transcoder and Zencoder.com content transformers.
Brightcove and AWS CloudFront publishing channels are supported to make content available outside your organization.
For more information on IPTC, see IPTC [1].
For more information about FFmpeg, see FFmpeg [2].
For more information about ImageMagick, see ImageMagick [3].
For more information about installing Media Management, see Installing Media Management [4].
Alfresco Media Management allows you to view and manipulate your digital assets in Alfresco.
Alfresco features provided with Media Management include video support and enhanced image manipulation; for example, video thumbnails and proxies, video trim, time-coded comments for video, and image crop and rotate capabilities. A dark site theme is also available.
Media Management is integrated with Brightcove and AWS CloudFront publishing channels for publishing your content.
You will see the image or video in File Preview. If you upload a
video, the duration of the video is shown in the information below the name of the video;
for example, this is the icon that you would see if the video is three minutes and seven
seconds long:
A rendition or proxy is a version of the original video or image; for example, a copy of an image that is optimised for web viewing. By default, not all renditions (including video) are created after uploading. It is only when a user first views the image or video that a rendition is created.
For example:
The progress bar is visible only on the first upload of a video. After it has been loaded once, this video is available to all users to view, without delay.
You can optionally add an end time, in the format HH:MM:SS:MS.
When you hover on the yellow marker, the comment is displayed. A new icon, , is now available on the video control bar, which allows you to toggle the
comments as subtitles on the video.
Each time the image is edited, it is stored as a new version of the original image (as long as it is versionable), unless the Create Copy checkbox is selected.
You can also use the scroll wheel to navigate large images.
Alfresco Media Management allows you to request transformations of media from one format to another.
There are several methods used to request rich media transformations, and the method depends on the type of relationship that exists between the original source and the transformation result.
Renditions; for example, lower resolution JPEG image and video proxy files, are often requested automatically, when required in Alfresco. For example, they are requested when browsing a site's document library or navigating to the document details page.
You can explicitly request a rendition by clicking the + icon in the Renditions panel of the document details page. See Viewing media [21] for more information about the Renditions panel.
You can perform an ad hoc format transformation in a number of ways; for example, create a rule with a Transform and Copy Content action. See Applying rules to folders [28] for more information about setting up rules.
This option allows you to publish content to Brightcove and CloudFront, as long as your Alfresco administrator has set up publishing channels.
For example:
The Options page appears.
The new theme now displays every time that you use Alfresco unless you choose to change it again.
The Media Management capability in Alfresco is delivered as a zip file containing AMP files, an instance of ActiveMQ, and the content services node infrastructure.
In these topics you will set up ActiveMQ, install the AMP files into an existing Alfresco instance, configure your settings and start Media Management. See Prerequisites for using Media Management [30] for information on what you require before you start the installation.
You require one of each of the following components:
Software requirements
To preview RAW image formats, you need to set additional configuration properties. See step 8 of Installing Media Management [40].
Alfresco requirements
Alfresco Content Services 5.2.x. See Alfresco Supported Platforms [41] for more information.
Java requirements
Java 8
Remote transformation services (optional)
Media Management provides a framework for transforming and sharing content, ideally using a remote server to ensure that the Alfresco server is not overloaded.
A video transformer is provided when you install Media Management to locally transform your content, however using this instance can be resource intensive and slow down your repository. You can create one or more content services nodes to offload work, or you can use remote transformation services, like Brightcove Zencoder or Amazon Elastic Transcoder to transform your content. The configuration file for the content services node, config.yml, contains the location of ActiveMQ and the shared content workspace. The shared content workspace is a temporary workspace, used by the content services node to read source files and write to target files. See Content services node architecture [46] for information about the content services nodes and Configuring transformation services for Media Management [47] for information about transformation services.
FFmpeg and ImageMagick from the command line are required on any server where a content services node is running to transform content. FFmpeg, ImageMagick and ExifTool are required on the Alfresco server to view media in Share. ExifTool is used for metadata handling in the repository only.
ActiveMQ monitors for events and we recommend that you install it on the Alfresco server if you have other components that use ActiveMQ. If you are using ActiveMQ solely for Media Management, you might prefer to install ActiveMQ on the content services node server, but ensure that it resides on one server only. See Installing Media Management [4] for more information about installing ActiveMQ.
Using the alfresco-global.properties file you can define properties for the FFmpeg path, ExifTool path, ActiveMQ broker URL, shared content workspace type, Zencoder and AWS Elastic Transcoder credentials, and other properties. See Configuring Media Management [33] for more information on alfresco-global.properties settings.
You can publish your content from the repository to Brightcove or CloudFront publishing channels. See Configuring publishing channels for Media Management [48] for more information.
For information on monitoring the components of the architecture, see Monitoring Media Management [49].
Media Management provides a content services node infrastructure to process your transformations. You can create content services nodes remotely to offload low level transformations.
You can have multiple content services nodes running on the same server, ideally separate from your Alfresco server, however configuring a single content services node on a single server (with servers scaled as required) provides the optimum framework for multiple parallel transformations.
For more information on launching a content services node, see Starting Media Management [34].
For more information on advanced ActiveMQ settings, see Configuring advanced settings in ActiveMQ [51].
You will see four folders:
We recommend that you back up these files before installing the AMP files. Also, when you install Media Management, a backup of the original alfresco.war file is stored as tomcat/webapps/alfresco.war<numbers>.bak. Keep this .bak file in case you need to uninstall Media Management.
java -jar alfresco-mmt.jar install ../amps/alfresco-mm-<version>.amp ../tomcat/webapps/alfresco.war -force
java -jar alfresco-mmt.jar install ..\amps\alfresco-mm-<version>.amp ..\tomcat\webapps\alfresco.war -forcewhere alfresco-mm-<version>.amp is the specific AMP file that you downloaded.
java -jar alfresco-mmt.jar install ../amps_share/alfresco-mm-<version>.amp ../tomcat/webapps/share.war -force
java -jar alfresco-mmt.jar install ..\amps_share\alfresco-mm-<version>.amp ..\tomcat\webapps\share.war -forcewhere alfresco-mm-<version>.amp is the specific AMP file that you downloaded.
Check the output to ensure that the AMP files have installed successfully.
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
# Messaging broker, default is localhost messaging.broker.url=failover:(tcp://broker1:61616,tcp://broker2:61616)where broker is each ActiveMQ instance that you have configured.
You need to set this property only if your ActiveMQ instance is not on the same server as Alfresco.
# FFmpeg executable path, default is ffmpeg ffmpeg.exe= # ExifTool executable path, default is exiftool exiftool.exe=
transformer.strict.mimetype.check=true transformer.strict.mimetype.check.whitelist.mimetypes=image/x-raw-adobe
Set the transformer.strict.mimetype.check property to true, and use the transformer.strict.mimetype.check.whitelist.mimetypes property to add the x-raw-adobe MIME type to an existing whitelist.
Specify the ActiveMQ host name and prefetch policy (to ensure that transformations can be processed in parallel):
messaging: broker: url: tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
The content services node uses ImageMagick and FFmpeg and requires that the executable directories are available on the system PATH variable or are specified using img.exe and ffmpeg.exe system properties.
For more information about the recommended architecture for Media Management, see Media Management architecture [32]. For information about the content services framework, see Content services node architecture [50].
To check that the Media Management AMPs have installed correctly, add a video or image to Share, open the file and check that you can see that the media loading and a Renditions Panel is available.
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines properties for the FFmpeg path, ExifTool path, ActiveMQ broker URL, shared content workspace type, Zencoder and AWS Elastic Transcoder credentials, custom metadata extraction properties, video thumbnail settings, and video proxy timeout settings.
The following table shows an overview of the available properties:
Property | Description |
---|---|
ffmpeg.exe= | Sets the FFmpeg executable path. Default is ffmpeg. Remember to use the forward slash (/) in your path if you are using Unix, and back slash (\) if you are using Windows. |
exiftool.exe= | Sets the ExifTool executable path. Default is exiftool. Remember to use the forward slash (/) in your path if you are using Unix, and back slash (\) if you are using Windows. |
messaging.broker.url=failover: (tcp://broker1:61616,tcp://broker2:61616) | Sets the host name and port of the ActiveMQ instance. Default is localhost |
content.remote.default.contentRefHandler. source.type= | Sets the shared content workspace for source. Type can be file or s3 |
content.remote.default.contentRefHandler. source.file.dir= | If you are using a file type for the shared content workspace, specify the file directory. |
content.remote.default.contentRefHandler. source.s3.bucketName= | If you are using S3 for the shared content workspace, specify the S3 bucket. |
content.remote.default.contentRefHandler. target.s3.bucketRegion= | If you are using S3 for the shared content workspace, specify the S3 bucket region. |
content.remote.default.contentRefHandler. target.s3.accessKey= | If you are using S3 for the shared content workspace, specify the S3 access key. |
content.remote.default.contentRefHandler. target.s3.secretKey= | If you are using S3 for the shared content workspace, specify the S3 secret key. |
content.transformer.Zencoder.s3.accessKey= | If you are using the Zencoder content transformer, specify the S3 access key. |
content.transformer.Zencoder.s3.secretKey= | If you are using the Zencoder content transformer, specify the S3 secret key. |
content.transformer.Zencoder.s3.bucketName= | If you are using the Zencoder content transformer, specify the S3 bucket. |
content.transformer.Zencoder.s3.bucketRegion= | If you are using the Zencoder content transformer, specify the S3 bucket region. Default is us-east-1 |
content.transformer.Zencoder.apiKey= | If you are using the Zencoder content transformer, specify the Zencoder API key. |
content.transformer.AwsElasticTranscoder. s3.accessKey= | If you are using the AWS Elastic Transcoder content transformer, specify the S3 access key. |
content.transformer.AwsElasticTranscoder. s3.secretKey= | If you are using the AWS Elastic Transcoder content transformer, specify the S3 secret key. |
content.transformer.AwsElasticTranscoder. s3.bucketName= | If you are using the AWS Elastic Transcoder content transformer, specify the S3 bucket. |
content.transformer.AwsElasticTranscoder. s3.bucketRegion= | If you are using the AWS Elastic Transcoder content transformer, specify the S3 bucket region. Default is us-east-1 |
content.transformer.AwsElasticTranscoder. transcoder.accessKey= | If you are using the AWS Elastic Transcoder content transformer, specify the transcoder access key. |
content.transformer.AwsElasticTranscoder. transcoder.secretKey= | If you are using the AWS Elastic Transcoder content transformer, specify the transcoder secret key. |
content.transformer.AwsElasticTranscoder. transcoder.pipelineId= | If you are using the AWS Elastic Transcoder content transformer, specify the transcoder pipeline identifier. |
content.transformer.AwsElasticTranscoder. transcoder.region | If you are using the AWS Elastic Transcoder content transformer, specify the transcoder region. Default is us-east-1 |
content.transformer.AwsElasticTranscoder. transcoder.defaultPreset.video/mp4= | If you are using the AWS Elastic Transcoder content transformer, specify the transcoder preset for video and MP4. Default is 1351620000001-000010 |
metadata.extracter.TikaExifTool.extract. namespace.prefix.custom= | URL used by external applications to read XMP custom metadata. Example entry is http://example.com/model/custom/1.0 |
metadata.extracter.TikaExifTool.extract. XMP-custom\:Text= | Type of field for extraction of single lines of XMP custom metadata. Example value is custom:text |
metadata.extracter.TikaExifTool.extract. XMP-custom\:TextML[]= | Type of field for extraction of multiple lines of XMP custom metadata. Example value is custom:textMultiLine |
content.metadataExtracter.default. timeoutMs= | Maximum time for extracting content metadata to complete. Default is 60000 milliseconds (60 seconds). |
video.thumbnail.defaultOffset= | The offset time before creating a video thumbnail. Default is 00:00:00.5. |
video.thumbnail.storyboardIntervalSeconds= | Time interval between video thumbnails. Default is 2 seconds. |
video.thumbnail.storyboardMaxElements= | Maximum number of video thumbnails. Default is 30 elements. |
system.videoProxy.definition.default. timeoutMs= | Maximum time for a video proxy to complete. Parameter is used by the h264-720 proxy. Default is 64800000 milliseconds (18 hours). |
You can also set where you want each of your transformations to take place; locally, with the remote content services node, or with a remote transformer like Elastic Transcoder or Zencoder, and in what order the transformations should be attempted. The default settings are appropriate for most configurations.
# mimetypes ffmpeg can be made to support, but support not present in many environments content.transformer.Ffmpeg.extensions.3gp.*.supported=false content.transformer.Ffmpeg.extensions.3g2.*.supported=false content.transformer.Ffmpeg.extensions.*.3gp.supported=false content.transformer.Ffmpeg.extensions.*.3g2.supported=false content.transformer.Ffmpeg.extensions.*.gif.supported=false content.transformer.Ffmpeg.extensions.*.jp2.supported=false content.transformer.Ffmpeg.extensions.*.ras.supported=false content.transformer.Ffmpeg.extensions.*.xbm.supported=false content.transformer.Ffmpeg.extensions.*.xwd.supported=false # conversions ffmpeg can support, but don't make much sense in most cases content.transformer.Ffmpeg.mimetypes.audio/*.video/*.supported=false # Grabbing thumbnail frames isn't resource intensive so perform locally content.transformer.Ffmpeg.mimetypes.video/*.image/*.priority=50 content.transformer.Ffmpeg.mimetypes.application/mxf.video/*.supported=false content.transformer.Ffmpeg.mimetypes.application/mxf.image/*.supported=false # Remote transcoding should be preferred if available content.transformer.Ffmpeg.mimetypes.video/*.video/*.priority=150 # Content service node settings content.transformer.RemoteVideo.mimetypes.video/*.video/*.supported=true content.transformer.RemoteVideo.mimetypes.video/*.image/*.supported=true content.transformer.RemoteVideo.mimetypes.video/*.audio/*.supported=true content.transformer.RemoteVideo.mimetypes.video/*.application/*.supported=false content.transformer.RemoteVideo.mimetypes.video/*.text/*.supported=false content.transformer.RemoteVideo.mimetypes.application/*.*.supported=false content.transformer.RemoteVideo.mimetypes.application/mxf.video/*.supported=false content.transformer.RemoteVideo.mimetypes.application/mxf.image/*.supported=false content.transformer.RemoteVideo.mimetypes.image/*.*.supported=false content.transformer.RemoteVideo.mimetypes.text/*.*.supported=false content.transformer.RemoteImage.mimetypes.image/*.image/*.supported=true content.transformer.RemoteImage.mimetypes.application/pdf.image/*.supported=true # Conversions ffmpeg can support, but don't make much sense in most cases content.transformer.RemoteVideo.mimetypes.audio/*.video/*.supported=false # Only send resource intensive transcoding remote content.transformer.RemoteVideo.mimetypes.video/*.video/*.priority=50 content.transformer.RemoteVideo.mimetypes.video/*.image/*.priority=150 content.transformer.RemoteVideo.mimetypes.application/mxf.video/*.priority=100 # Only send resource intensive RAW conversion remote content.transformer.RemoteImage.mimetypes.image/x-raw-*.image/*.priority=50 content.transformer.RemoteImage.mimetypes.image/jpeg.image/*.priority=150 content.transformer.RemoteImage.mimetypes.image/png.image/*.priority=150 content.transformer.RemoteImage.mimetypes.image/gif.image/*.priority=150 content.transformer.RemoteImage.mimetypes.image/bmp.image/*.priority=150 # AWS Elastic Transcoder content.transformer.AwsElasticTranscoder.mimetypes.video/*.video/mp4.priority=110 # Brightcove Zencoder content.transformer.Zencoder.mimetypes.video/*.video/*.priority=100
content.transformer.RemoteVideo.mimetypes.video/*.video/*.priority=50 content.transformer.Zencoder.mimetypes.video/*.video/*.priority=100 content.transformer.AwsElasticTranscoder.mimetypes.video/*.video/mp4.priority=110 content.transformer.Ffmpeg.mimetypes.video/*.video/*.priority=150The content services node is tried first, as it has the highest priority with a value of 50. Zencoder would be tried next, and Elastic Transcoder would be tried third. If any of the transformer types is not configured, or there is a problem, the video to video transcoding would fall back to the local FFmpeg transformer, which is set with the lowest priority as content.transformer.Ffmpeg.mimetypes.video/*.video/*.priority=150.
A log4j.properties.sample file is provided in the Media Management installation zip.
See Runtime administration with a JMX client [54] for instructions on how to connect a JMX client to your Alfresco server.
You can configure Alfresco to use Amazon S3 or file directories for sharing content.
content.remote.default.contentRefHandler.source.type=file content.remote.default.contentRefHandler.source.file.dir= content.remote.default.contentRefHandler.target.type=file content.remote.default.contentRefHandler.target.file.dir=
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
transform: contentReferenceHandler: source: type: file file: path: /tmp/AlfrescoContentServices target: type: file file: path: /tmp/AlfrescoContentServices
You can use the same mounted network volume directory (for example, NFS) for both the Alfresco repository (configured using content.remote.default.contentRefHandler.* properties) and the remote node.
The content services node uses ImageMagick and FFmpeg and requires that the executable directories are available on the system PATH variable or are specified in alfresco-global.properties. See Configuring Media Management [52] for more information on alfresco-global.properties settings.
For more information about the content services framework, see Content services node architecture [50].
content.remote.default.contentRefHandler.source.type=s3 content.remote.default.contentRefHandler.source.s3.bucketName= content.remote.default.contentRefHandler.source.s3.bucketRegion= content.remote.default.contentRefHandler.source.s3.accessKey= content.remote.default.contentRefHandler.source.s3.secretKey= content.remote.default.contentRefHandler.target.type=s3 content.remote.default.contentRefHandler.target.s3.bucketName= content.remote.default.contentRefHandler.target.s3.bucketRegion= content.remote.default.contentRefHandler.target.s3.accessKey= content.remote.default.contentRefHandler.target.s3.secretKey=
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
You can find your S3 details in your AWS S3 settings.
source: type: s3 s3: accessKey: <key> secretKey: <secret> bucketName: <bucket> bucketRegion: us-east-1 target: type: s3 s3: accessKey: <key> secretKey: <secret> bucketName: <bucket> bucketRegion: us-east-1
The content services node uses ImageMagick and FFmpeg and requires that the executable directories are available on the system PATH variable or are specified in alfresco-global.properties. See Configuring Media Management [52] for more information on alfresco-global.properties settings.
For more information about the content services framework, see Content services node architecture [50].
This information helps you to configure Alfresco to communicate with Brightcove Zencoder and AWS Elastic Transcoder. These transformation services are often configured for cloud deployments or very large resource intensive on-premise deployments.
content.transformer.RemoteVideo.mimetypes.video/*.video/*.supported=false content.transformer.RemoteVideo.mimetypes.video/*.audio/*.supported=false content.transformer.RemoteImage.mimetypes.image/*.image/*.supported=falseSee Configuring Media Management [33] for more information on different transformation options.
content.transformer.Zencoder.apiKey=MY-ZENCODER-KEY content.transformer.Zencoder.s3.accessKey=MY-AWS-KEY content.transformer.Zencoder.s3.secretKey=MY-AWS-SECRET content.transformer.Zencoder.s3.bucketName=MY-BUCKET-NAME content.transformer.Zencoder.s3.bucketLocation=EU
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
You can find your Zencoder API key at API [64] and your S3 details in your AWS S3 settings.
For more information on using Zencoder with S3, see Using Zencoder with S3 [65].
content.transformer.AwsElasticTranscoder.s3.accessKey=**MY-S3-ACCESS-KEY** content.transformer.AwsElasticTranscoder.s3.secretKey=**MY-S3-SECRET-KEY** content.transformer.AwsElasticTranscoder.s3.bucketName=**MY-S3-BUCKET-NAME** content.transformer.AwsElasticTranscoder.s3.bucketLocation=EU # Access and secret keys below can be the same as above content.transformer.AwsElasticTranscoder.transcoder.accessKey=**MY-TRANSCODE-ACCESS-KEY** content.transformer.AwsElasticTranscoder.transcoder.secretKey=**MY-TRANSCODE-SECRET-KEY** content.transformer.AwsElasticTranscoder.transcoder.pipelineId=**MY-PIPELINE-ID** content.transformer.AwsElasticTranscoder.transcoder.region=EU_WEST_1 content.transformer.AwsElasticTranscoder.transcoder.defaultPreset.video/mp4=1351620000001-000010
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
For more information on using Amazon Elastic Transcoder with S3, see Getting started with Elastic Transcoder [66].
You can configure Alfresco to use Brightcove and AWS CloudFront publishing channels to make content available outside your organization.
The Channel Manager section lists the channels that are configured for users to publish media. Channels available include Brightcove and CloudFront.
A Channel Authentication screen is displayed.
You can use a write token in the Password field on the Channel Authentication screen. The User Name field is ignored.
Getting Access Tokens [69] provides information on how to identify your write token.
A new channel is created.
Additionally, if you click the icon for the channel you created, an Edit Channel window appears. From this window you can:
Further options are detailed in the Brightcove API documentation [70].
The Channel Manager section lists the channels that are configured for users to publish media. Channels available include Brightcove and CloudFront.
A Channel Authentication screen is displayed.
Use your S3 access key in the User Name field, and your S3 secret key in the Password field.
A new channel is created.
Additionally, if you click the icon for the channel you created, an Edit Channel window appears. From this window you can perform these actions:
metadata.extracter.TikaExifTool.extract.namespace.prefix.cm=http://www.alfresco.org/model/content/1.0 metadata.extracter.TikaExifTool.extract.namespace.prefix.custom=http://example.com/model/custom/1.0 metadata.extracter.TikaExifTool.extract.XMP-custom\:Text=custom:text # Force multi-line parsing with [] metadata.extracter.TikaExifTool.extract.XMP-custom\:TextML[]=custom:textMultiLine metadata.extracter.TikaExifTool.extract.XMP-custom\:Date=custom:date metadata.extracter.TikaExifTool.extract.XMP-custom\:Integer=custom:integer metadata.extracter.TikaExifTool.extract.XMP-custom\:ClosedChoice=custom:closedChoice metadata.extracter.TikaExifTool.extract.XMP-custom\:OpenChoice=custom:openChoice metadata.extracter.TikaExifTool.extract.XMP-custom\:Boolean=custom:boolean
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
The metadata.extracter.TikaExifTool.extract.XMP-custom\:Text attribute specifies simple text fields. The metadata.extracter.TikaExifTool.extract.XMP-custom\:TextML[] attribute specifies multi-line text fields for metadata extraction.
video.thumbnail.defaultOffset=00:00:00.5 video.thumbnail.storyboardIntervalSeconds=2 video.thumbnail.storyboardMaxElements=30
A sample alfresco-global.properties file is shipped in the root folder of the Media Management distribution zip, which defines custom properties. See Configuring Media Management [52] for the full list.
<bean id="proxyDefinition720p" class="org.alfresco.repo.thumbnail.DeletingThumbnailDefinition"> <property name="name" value="h264-720"/> <property name="mimetype" value="video/mp4"/> <property name="transformationOptions"> <bean class="org.alfresco.repo.content.transform.GytheioPassthroughTransformationOptions"> <property name="gytheioTransformationOptions"> <bean class="org.gytheio.content.transform.options.VideoTransformationOptions"> <property name="resizeOptions"> <bean class="org.gytheio.content.transform.options.ImageResizeOptions"> <property name="width" value="1280"/><property name="height" value="720"/> <property name="maintainAspectRatio" value="true"/> </bean> </property> <property name="targetVideoCodec" value="h264"/> <property name="targetVideoBitrate" value="2400000"/> <property name="targetVideoFrameRate" value="29.97"/> <property name="targetAudioCodec" value="aac"/> <property name="targetAudioBitrate" value="160000"/> <property name="targetAudioSamplingRate" value="44100"/> <property name="targetAudioChannels" value="2"/> <property name="additionalOptions"> <map> <entry key="AWS_TRANSCODE_PRESET_ID" value="1351620000001-000010"/> </map> </property> </bean> </property> <property name="timeoutMs" value="${system.thumbnail.definition.default.timeoutMs}"/> <property name="readLimitTimeMs" value="${system.thumbnail.definition.default.readLimitTimeMs}"/> <property name="maxSourceSizeKBytes" value="${system.thumbnail.definition.default.maxSourceSizeKBytes}"/><property name="readLimitKBytes" value="${system.thumbnail.definition.default.readLimitKBytes}"/> <property name="pageLimit" value="${system.thumbnail.definition.default.pageLimit}"/> <property name="maxPages" value="${system.thumbnail.definition.default.maxPages}"/> </bean> </property> <property name="placeHolderResourcePath" value="alfresco/thumbnail/thumbnail_placeholder_256.png"/> <property name="mimeAwarePlaceHolderResourcePath" value="alfresco/thumbnail/thumbnail_placeholder_256{0}.png"/><property name="runAs" value="System"/> <property name="failureHandlingOptions" ref="standardFailureOptions"/> <property name="deleteOnContentUpdate" value="true"/> </bean>
For information on how to set up ActiveMQ and the content services node to start automatically, see Running Media Management automatically [35].
For more information on advanced ActiveMQ settings, see Configuring advanced settings in ActiveMQ [71].
./activemq start
activemq start
ActiveMQ is used by the repository to queue event notifications as they are generated.
You can check that ActiveMQ is working correctly through the ActiveMQ web interface here: http://localhost:8161/admin/index.jsp, where localhost is the Alfresco server.
java -jar content-services-node-x.x.x.jar server config.yml
where x.x.x is the version of the JAR file. If there is no command line output or error messages, then the node has started successfully. If ImageMagick or FFmpeg are not correctly installed, the node will not start.
You can configure the Media Management components (Apache ActiveMQ and content services nodes) to suit your specific requirements.
These topics explain how to configure Media Management to run automatically in a production environment. You must successfully install Media Management and the prerequisite software before using these topics. See Prerequisites for using Media Management [30] and Installing and configuring Media Management [72] for more information.
These instructions are for a Unix environment only.
These topics use init.d scripts. For more information on using these scripts, see Init scripts [73].
Make sure you have set the correct permissions before configuring Media Management to run automatically.
sudo useradd -m activemq
#!/bin/bash # chkconfig: 2345 80 20 cd opt/activemq /bin/su activemq -c "bin/activemq $@"
chmod +x /etc/init.d/activemq chkconfig --add activemq
Review the recommended architecture for Media Management [32] for guidance on setup of your Alfresco server and remote server.
These instructions are for a Unix environment only and use an init.d script. For more information on using these scripts, see Init scripts [73].
See Installing Media Management [63] for more information on the shipped Media Management installation files.
sudo useradd -m contentservices
#!/bin/bash # chkconfig: 345 91 9 # description: Alfresco Content Service ### BEGIN INIT INFO # Provides: Alfresco MM Module Content Service # Required-Start: $local_fs $network $activemq # Required-Stop: $local_fs $network $activemq # Default-Start: 3 4 5 # Default-Stop: 0 1 6 # Description: Start the program ### END INIT INFO ### Fill in these bits: USER="contentservices" JAR_LOCATION=/opt/contentservices PID_FILE="/var/run/contentservices/contentservices.pid" JAR_VERSION=0.3-SNAPSHOT JAR_FILE=content-services-node-$JAR_VERSION.jar START_CMD="\"cd $JAR_LOCATION;java -jar $JAR_FILE server config.yml > /dev/null 2>&1 &\"" NAME="alfresco-contentservices" PGREP_STRING="$JAR_FILE" ### No Changes required below this point CUR_USER=`whoami` killproc() { pkill -u $USER -f $PGREP_STRING } start_daemon() { eval "$*" } log_success_msg() { echo "$*" logger "$_" } log_failure_msg() { echo "$*" logger "$_" } check_proc() { pgrep -u $USER -f $PGREP_STRING >/dev/null } start_script() { if [ "${CUR_USER}" != "root" ] ; then log_failure_msg "$NAME can only be started as 'root'." exit -1 fi check_proc if [ $? -eq 0 ]; then log_success_msg "$NAME is already running." exit 0 fi [ -d /var/run/$NAME ] || (mkdir /var/run/$NAME ) # For SELinux we need to use 'runuser' not 'su' if [ -x "/sbin/runuser" ]; then SU="/sbin/runuser -s /bin/sh" else SU="/bin/su -s /bin/sh" fi start_daemon $SU $USER -c "$START_CMD" # Sleep for a while to see if anything cries sleep 5 check_proc if [ $? -eq 0 ]; then log_success_msg "Started $NAME." else log_failure_msg "Error starting $NAME." exit -1 fi } stop_script() { if [ "${CUR_USER}" != "root" ] ; then log_failure_msg "You do not have permission to stop $NAME." exit -1 fi check_proc if [ $? -eq 0 ]; then killproc -p $PID_FILE >/dev/null # Make sure it's dead before we return until [ $? -ne 0 ]; do sleep 1 check_proc done check_proc if [ $? -eq 0 ]; then log_failure_msg "Error stopping $NAME." exit -1 else log_success_msg "Stopped $NAME." fi else log_failure_msg "$NAME is not running or you don't have permission to stop it" fi } check_status() { check_proc if [ $? -eq 0 ]; then log_success_msg "$NAME is running." else log_failure_msg "$NAME is stopped." exit -1 fi } case "$1" in start) start_script ;; stop) stop_script ;; restart) stop_script start_script ;; status) check_status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0
chmod +x /etc/init.d/contentservices chkconfig --add alfresco-contentservices
messaging: broker: url: tcp://localhost:61616
The content services node uses ImageMagick and FFmpeg and requires that the executable directories are available on the system PATH variable.
For more information about the content services framework, see Content services node architecture [50].
This information helps you to monitor and administer Alfresco Media Management.
If you are backing up and restoring Media Management, use the standard Alfresco guidance: Backing up and restoring [80].
ActiveMQ provides a web console here:
http://localhost:8161/admin/where localhost is the name of the Alfresco server.
You can also check the ActiveMQ log, which is located in activemq/data/activemq.log where activemq is the name of directory where you installed ActiveMQ.
By default, subscribers are set to Active Durable Topic Subscribers to ensure that if ActiveMQ fails, messages are not lost.
{"FFmpeg":{"healthy":true},"ImageMagick":{"healthy":true},"deadlocks":{"healthy":true}}and after a transformation request:
{"FFmpeg":{"healthy":true,"message":"lastRequest: \"6075f46f-de9c-4232-aa78-d3ed1280a371\""},"ImageMagick":{"healthy":true},"deadlocks":{"healthy":true}}
A log4j.properties.sample file is provided in the Media Management installation zip. This file contains loggers that you can add to your Alfresco log4j.properties file to trace and debug your Media Management workflow.
Administrators can view information about transformations and add publishing channels in the Admin Tools option of the Share menu bar.
Use this information to help diagnose any problems when using Media Management.
content.transformer.default.timeoutMs=64800000and check that this value is not being overridden by JMX.
ERROR [org.springframework.extensions.webscripts.AbstractRuntime] [http-apr-8080-exec-11] Exception from executeScript - redirecting to status template error: 03220008 The content node was not specified so the content cannot be streamed to the client: classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbnail.get.js org.springframework.extensions.webscripts.WebScriptException: 03220008 The content node was not specified so the content cannot be streamed to the client: classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbnail.get.jsThe error message should not affect the ability to preview the video, however thumbnails will not be available. Install FFmpeg to resolve this error.
convert -versionfrom the ImageMagick installation directory. The delegates supported are listed in the results.
If you are using RAW image formats, you must install an ImageMagick delegate, for example, UFRaw.
When you load a video in Alfresco Share, if you receive the message Could not create proxy, try viewing or downloading the source, you need to include the correct proxy, for example, H.264. See FFmpeg [82] for more information.
If you do not have FFmpeg or ImageMagick available to Java, then you will not be able to view images and video in Alfresco Share. Ensure that Java has FFmpeg and ImageMagick on its command line path, or define the path location in your alfresco-global.properties file. See See step 7 of Installing Media Management [83] for information on how to set these in the alfresco-global.properties file.
Reference information for Alfresco Media Management.
Feature | Software to implement | Distributed by Alfresco? |
---|---|---|
IPTC metadata extraction |
FFmpeg [86] and MM Java |
No |
PBCore technical video metadata | FFmpeg [86] | No |
Custom XMP metadata | ExifTool [37] | No |
Metadata embedding | ExifTool [37] | No |
Video thumbnails | FFmpeg [86] | No |
Local video transcoding | FFmpeg [86] | No |
Remote video transcoding |
FFmpeg [86], Zencoder [87] and AWS (SDK through content services node) |
Yes |
Video trim (transformation) | FFmpeg [86] | No |
Image crop and rotate (transformation) | ImageMagick [3] | No |
Back end components | Content services node [88] | Yes |
HTML5 video player | video.js [89] | Yes |
Video timeline comments | videojs-markers [90] | Yes |
Video storyboard thumbnails | videojs-thumbnails [91] | Yes |
Video trim UI | rangeslider-videojs [92] | Yes |
Image rotate UI | Icons [93] | Yes |
Image pan and zoom | imgAreaSelect [94] | Yes |
Dark site theme | jquery.panzoom [95] | - |
UI utilities | CSS | Yes |
AWS CloudFront integration | AWS (SDK using content services node) | Yes |
Brightcove video cloud integration | Brightcove Java libraries: Java-Commons [96] and Java-MAPI-Wrapper [97] | Yes |
The default values given are the defaults for an installer-installed instance of Alfresco on Windows. These values can differ if you are using a different install method or operating system.
Attribute name | Example value |
---|---|
content.transformer.AwsElasticTranscoder.mimetypes.video/*.video/mp4.priority | 110 |
content.transformer.Ffmpeg.extensions.*.3g2.supported | false |
content.transformer.Ffmpeg.extensions.*.3gp.supported | false |
content.transformer.Ffmpeg.extensions.*.gif.supported | false |
content.transformer.Ffmpeg.extensions.*.jp2.supported | false |
content.transformer.Ffmpeg.extensions.*.ras.supported | false |
content.transformer.Ffmpeg.extensions.*.xbm.supported | false |
content.transformer.Ffmpeg.extensions.*.xwd.supported | false |
content.transformer.Ffmpeg.extensions.3g2.*.supported | false |
content.transformer.Ffmpeg.extensions.3gp.*.supported | false |
content.transformer.Ffmpeg.mimetypes.application/mxf.image/*.supported | false |
content.transformer.Ffmpeg.mimetypes.application/mxf.video/*.supported | false |
content.transformer.Ffmpeg.mimetypes.audio/*.video/*.supported | false |
content.transformer.Ffmpeg.mimetypes.video/*.image/*.priority | 50 |
content.transformer.Ffmpeg.mimetypes.video/*.video/*.priority | 150 |
content.transformer.RemoteImage.mimetypes.application/pdf.image/*.supported | false |
content.transformer.RemoteImage.mimetypes.image/*.image/*.supported | false |
content.transformer.RemoteImage.mimetypes.image/bmp.image/*.priority | 150 |
content.transformer.RemoteImage.mimetypes.image/gif.image/*.priority | 150 |
content.transformer.RemoteImage.mimetypes.image/jpeg.image/*.priority | 150 |
content.transformer.RemoteImage.mimetypes.image/png.image/*.priority | 150 |
content.transformer.RemoteImage.mimetypes.image/x-raw-*.image/*.priority | 50 |
content.transformer.RemoteVideo.mimetypes.application/*.*.supported | false |
content.transformer.RemoteVideo.mimetypes.application/mxf.image/*.supported | false |
content.transformer.RemoteVideo.mimetypes.application/mxf.video/*.priority | 100 |
content.transformer.RemoteVideo.mimetypes.application/mxf.video/*.supported | false |
content.transformer.RemoteVideo.mimetypes.audio/*.video/*.supported | false |
content.transformer.RemoteVideo.mimetypes.image/*.*.supported | false |
content.transformer.RemoteVideo.mimetypes.text/*.*.supported | false |
content.transformer.RemoteVideo.mimetypes.video/*.application/*.supported | false |
content.transformer.RemoteVideo.mimetypes.video/*.audio/*.supported | false |
content.transformer.RemoteVideo.mimetypes.video/*.image/*.priority | 150 |
content.transformer.RemoteVideo.mimetypes.video/*.image/*.supported | false |
content.transformer.RemoteVideo.mimetypes.video/*.text/*.supported | false |
content.transformer.RemoteVideo.mimetypes.video/*.video/*.priority | 50 |
content.transformer.RemoteVideo.mimetypes.video/*.video/*.supported | false |
content.transformer.strict.mimetype.check | true |
transformer.strict.mimetype.check.whitelist.mimetypes | application/eps;application/postscript;application/illustrator;application/pdf;application/x-tar;application/x-gtar;application/acp;application/zip;application/vnd.stardivision.math;application/x-tika-msoffice;image/x-raw-adobe;image/tiff |
content.transformer.Zencoder.mimetypes.video/*.video/*.priority | 100 |
The tables give details of registered file types with information about their available transform options.
localhost:8080/alfresco/service/mimetypes?mimetype=*
where
localhost:8080 is the host and port number of your active Alfresco instance.Audio and video files are transformable using FFmpeg. Image files are transformable using ImageMagick. The formats listed are in addition to the standard formats as specified in Transformation options [99].
application/eps - eps, image/bmp - bmp, image/cgm - cgm, image/gif - gif, image/ief - ief, image/jp2 - jp2, image/jpeg - jpg, image/png - png, image/tiff - tiff, image/vnd.adobe.photoshop - psd, image/vnd.adobe.premiere - ppj, image/x-dwg - dwg, image/x-dwt - dwt, image/x-portable-anymap - pnm, image/x-portable-bitmap - pbm, image/x-portable-graymap - pgm, image/x-portable-pixmap - ppm, image/x-raw-adobe - dng, image/x-raw-canon - cr2, image/x-raw-fuji - raf, image/x-raw-hasselblad - 3fr, image/x-raw-kodak - k25, image/x-raw-leica - rwl, image/x-raw-minolta - mrw, image/x-raw-nikon - nef, image/x-raw-olympus - orf, image/x-raw-panasonic - rw2, image/x-raw-pentax - pef, image/x-raw-red - r3d, image/x-raw-sigma - x3f, image/x-raw-sony - arw, image/x-rgb - rgb, image/x-xpixmap - xpm and image/x-xwindowdump - xwd
Format | Transformable from: |
---|---|
video/mp2t | X |
video/mp4 | X |
video/mpeg | X |
video/ogg | X |
video/quicktime | X |
video/webm | X |
video/x-flv | X |
video/x-m4v | X |
video/x-ms-asf | X |
video/x-ms-wmv | X |
video/x-msvideo | X |
audio/basic - au, audio/mp4 - m4a, audio/mpeg - mp3, audio/ogg - oga, audio/vorbis - ogg, audio/x-aiff - aiff, audio/x-flac - flac, audio/x-ms-wma - wma, audio/x-wav - wav
All file types are transformable into and from the following formats, excepting themselves (i.e. audio/mp4 is not transformable into audio/mp4, or from audio/mp4).
Format | Transformable to: | Transformable from: |
---|---|---|
application/mxf | X | |
audio/basic | X | X |
audio/mp4 | X | X |
audio/mpeg | X | X |
audio/ogg | X | X |
audio/vorbis | X | X |
audio/x-aiff | X | X |
audio/x-flac | X | X |
audio/x-ms-wma | X | X |
audio/x-wav | X | X |
video/mp2t | X | |
video/mp4 | X | |
video/mpeg | X | |
video/ogg | X | |
video/quicktime | X | |
video/webm | X | |
video/x-flv | X | |
video/x-m4v | X | |
video/x-ms-asf | X | |
video/x-ms-wmv | X | |
video/x-msvideo | X |
video/mp2t - ts, video/mp4 - mp4, video/mpeg - mpg, video/ogg - ogv, video/quicktime - mov, video/x-msvideo - avi, video/webm - webm, video/x-flv - flv, video/x-m4v - m4v, video/x-ms-asf - asf, video/x-ms-wmv - wmv, and video/x-msvideo - avi
Format | Transformable to: | Transformable from: |
---|---|---|
application/eps | X | |
audio/basic | X | |
audio/mp4 | X | |
audio/mpeg | X | |
audio/ogg | X | |
audio/vorbis | X | |
audio/x-aiff | X | |
audio/x-flac | X | |
audio/x-ms-wma | X | |
audio/x-wav | X | |
image/bmp | X | |
image/cgm | X | |
image/gif | X | |
image/ief | X | |
image/jp2 | X | |
image/jpeg | X | |
image/png | X | |
image/tiff | X | |
image/vnd.adobe.photoshop | X | |
image/vnd.adobe.premiere | X | |
image/x-cmu-raster | X | |
image/x-dwt | X | |
image/x-portable-anymap | X | |
image/x-portable-bitmap | X | |
image/x-portable-graymap | X | |
image/x-portable-pixmap | X | |
image/x-raw-adobe | X | |
image/x-raw-canon | X | |
image/x-raw-fuji | X | |
image/x-raw-hasselblad | X | |
image/x-raw-kodak | X | |
image/x-raw-leica | X | |
image/x-raw-minolta | X | |
image/x-raw-nikon | X | |
image/x-raw-olympus | X | |
image/x-raw-panasonic | X | |
image/x-raw-pentax | X | |
image/x-raw-red | X | |
image/x-raw-sigma | X | |
image/x-raw-sony | X | |
image/x-rgb | X | |
image/x-xbitmap | X | |
image/x-xpixmap | X | |
image/x-xwindowdump | X | |
video/mp2t | X | X |
video/mp4 | X | X |
video/mpeg | X | X |
video/ogg | X | X |
video/quicktime | X | X |
video/webm | X | X |
video/x-flv | X | X |
video/x-m4v | X | X |
video/x-ms-asf | X | X |
video/x-ms-wmv | X | X |
video/x-msvideo | X | X |
Copyright 2020 by Alfresco and others.
Information in this document is subject to change without notice. No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express written permission of Alfresco. The trademarks, service marks, logos, or other intellectual property rights of Alfresco and others used in this documentation ("Trademarks") are the property of Alfresco and their respective owners. The furnishing of this document does not give you license to these patents, trademarks, copyrights, or other intellectual property except as expressly provided in any written agreement from Alfresco.
The United States export control laws and regulations, including the Export Administration Regulations of the U.S. Department of Commerce, and other applicable laws and regulations apply to this documentation which prohibit the export or re-export of content, products, services, and technology to certain countries and persons. You agree to comply with all export laws, regulations, and restrictions of the United States and any foreign agency or authority and assume sole responsibility for any such unauthorized exportation.
You may not use this documentation if you are a competitor of Alfresco, except with Alfresco's prior written consent. In addition, you may not use the documentation for purposes of evaluating its functionality or for any other competitive purposes.
If you need technical support for this product, contact Customer Support by email at support@alfresco.com. If you have comments or suggestions about this documentation, contact us at documentation@alfresco.com.
This copyright applies to the current version of the licensed program.
While Alfresco has used commercially reasonable efforts to ensure the accuracy of this documentation, Alfresco assumes no responsibility for the accuracy, completeness, or usefulness of any information or for damages resulting from the procedures provided. Furthermore, this documentation is supplied "as is" without guarantee or warranty, expressed or implied, including without limitation, any warranty of fitness for a specific purpose.
Links:
[1] http://www.iptc.org/site/Home/
[2] http://ffmpeg.org
[3] http://www.imagemagick.org/
[4] https://docs.alfresco.com/../tasks/mm-install.html
[5] https://docs.alfresco.com/../topics/mm-video-tutorials.html
[6] https://docs.alfresco.com/../concepts/mm-using.html
[7] https://docs.alfresco.com/../concepts/mm-install-overview.html
[8] https://docs.alfresco.com/../concepts/mm-admin.html
[9] https://docs.alfresco.com/../concepts/mm-troubleshooting.html
[10] https://docs.alfresco.com/../concepts/mm-references.html
[11] https://docs.alfresco.com/../reuse/copyright.html
[12] https://docs.alfresco.com/../reuse/disclaimer.html
[13] https://docs.alfresco.com/../concepts/mm-tutorial-01.html
[14] https://docs.alfresco.com/../concepts/mm-tutorial-02.html
[15] https://docs.alfresco.com/../concepts/mm-tutorial-03.html
[16] https://docs.alfresco.com/../concepts/mm-tutorial-04.html
[17] https://docs.alfresco.com/../concepts/mm-overview.html
[18] https://docs.alfresco.com/mm-tutorial-04.html
[19] http://docs.alfresco.com/5.2/tasks/library-folder-rules-define-create.html
[20] https://docs.alfresco.com/../tasks/mm-using-upload.html
[21] https://docs.alfresco.com/../tasks/mm-using-file.html
[22] https://docs.alfresco.com/../tasks/mm-using-video.html
[23] https://docs.alfresco.com/../tasks/mm-using-image.html
[24] https://docs.alfresco.com/../concepts/mm-transform.html
[25] https://docs.alfresco.com/../tasks/mm-using-publish.html
[26] https://docs.alfresco.com/../tasks/mm-using-dark.html
[27] http://docs.alfresco.com/5.1/concepts/library-intro.html
[28] http://docs.alfresco.com/5.2/concepts/library-folder-rules.html
[29] http://docs.alfresco.com/5.2/concepts/themes-intro.html
[30] https://docs.alfresco.com/mm-prereqs.html
[31] https://docs.alfresco.com/../concepts/mm-prereqs.html
[32] https://docs.alfresco.com/../concepts/mm-architecture.html
[33] https://docs.alfresco.com/../tasks/mm-props-config.html
[34] https://docs.alfresco.com/../tasks/mm-start.html
[35] https://docs.alfresco.com/../concepts/mm-run-auto.html
[36] https://docs.alfresco.com/../tasks/mm-uninstall.html
[37] http://www.sno.phy.queensu.ca/~phil/exiftool/
[38] http://docs.alfresco.com/5.2/tasks/imagemagick-config.html
[39] http://ufraw.sourceforge.net/
[40] https://docs.alfresco.com/../tasks/mm-install.html%23mm-install__step8
[41] https://www.alfresco.com/services/subscription/supported-platforms
[42] https://zencoder.com/en/
[43] https://docs.alfresco.com/../tasks/mm-config-zencoder.html
[44] http://aws.amazon.com/elastictranscoder/
[45] https://docs.alfresco.com/../tasks/mm-config-elastic.html
[46] https://docs.alfresco.com/mm-gytheio.html
[47] https://docs.alfresco.com/mm-config-remote.html
[48] https://docs.alfresco.com/mm-config-publish-channels.html
[49] https://docs.alfresco.com/../tasks/mm-events.html
[50] https://docs.alfresco.com/../concepts/mm-gytheio.html
[51] http://docs.alfresco.com/5.2/concepts/activemq-config.html
[52] https://docs.alfresco.com/mm-props-config.html
[53] https://docs.alfresco.com/../concepts/mm-jmx-beans.html
[54] http://docs.alfresco.com/5.2/concepts/jmx-intro-config.html
[55] https://docs.alfresco.com/../concepts/mm-config-shared-workspace.html
[56] https://docs.alfresco.com/../concepts/mm-config-remote.html
[57] https://docs.alfresco.com/../concepts/mm-config-publish-channels.html
[58] https://docs.alfresco.com/../tasks/mm-config-metadata.html
[59] https://docs.alfresco.com/../tasks/mm-config-thumbnails.html
[60] https://docs.alfresco.com/../tasks/mm-config-proxy.html
[61] https://docs.alfresco.com/../tasks/mm-config-shared-file.html
[62] https://docs.alfresco.com/../tasks/mm-config-shared-s3.html
[63] https://docs.alfresco.com/mm-install.html
[64] https://app.zencoder.com/api
[65] https://app.zencoder.com/docs/guides/getting-started/working-with-s3
[66] http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/getting-started.html
[67] https://docs.alfresco.com/../tasks/mm-config-zencoder-cdn.html
[68] https://docs.alfresco.com/../tasks/mm-config-aws-cdn.html
[69] https://support.brightcove.com/getting-access-tokens
[70] https://brightcovelearning.github.io/Brightcove-API-References/zencoder-api/v2/doc/index.html
[71] http://docs.alfresco.com/5.1/concepts/activemq-config.html
[72] https://docs.alfresco.com/mm-install-overview.html
[73] http://www.linux.com/learn/tutorials/442412-managing-linux-daemons-with-init-scripts
[74] https://docs.alfresco.com/../tasks/mq-auto.html
[75] https://docs.alfresco.com/../tasks/mm-gytheio-auto.html
[76] http://docs.alfresco.com/5.1/tasks/uninstall-amp.html
[77] https://docs.alfresco.com/mm-install.html%23mm-install__step5
[78] https://docs.alfresco.com/mm-install.html%23mm-install__step7
[79] http://docs.alfresco.com/5.1/tasks/deploy-dynamic.html#deploy-dynamic/delete
[80] http://docs.alfresco.com/5.2/concepts/ch-backup-restore.html
[81] https://docs.alfresco.com/../concepts/mm-share-admin-tools.html
[82] http://ffmpeg.org/ffmpeg.html
[83] https://docs.alfresco.com/../tasks/mm-install.html%23mm-install__step7
[84] https://docs.alfresco.com/../references/mm-dependencies.html
[85] https://docs.alfresco.com/../references/mm-additional-transformations.html
[86] https://www.ffmpeg.org/
[87] https://github.com/bitzeche/zencoder-java
[88] https://github.com/Alfresco/gytheio
[89] https://github.com/videojs/video.js
[90] https://github.com/spchuang/videojs-markers
[91] https://github.com/brightcove/videojs-thumbnails
[92] https://github.com/danielcebrian/rangeslider-videojs
[93] http://findicons.com/icon/474073/rotate?id=485645
[94] http://odyniec.net/projects/imgareaselect/
[95] https://github.com/timmywil/jquery.panzoom
[96] https://github.com/BrightcoveOS/Java-Commons
[97] https://github.com/BrightcoveOS/Java-MAPI-Wrapper
[98] http://docs.alfresco.com/5.2/concepts/jmx-reference.html
[99] http://docs.alfresco.com/5.2/references/valid-transformations.html