Opencast CERN-CDS-VIDEOS Workflow
One single Workflow for multiple encoding and publication pruposes.
Input params and default values:
<configuration key="publish">true</configuration>
<configuration key="publishToApi">true</configuration>
<configuration key="flagQuality360p">true</configuration>
<configuration key="flagQuality480p">true</configuration>
<configuration key="flagQuality720p">true</configuration>
<configuration key="flagQuality1080p">true</configuration>
<configuration key="flagQuality2160p">true</configuration>
<configuration key="flagQualityParallel">false</configuration>
-
When flagQualityParallel= true, all previous encoding profiles are skipped. It has the highest priority.
-
If publishToApi=false, intermediate publications (between encodings) will be skipped except the last one, before the workflow ends.
cern-cds-videos.xml
<?xml version="1.0" encoding="UTF-8"?>
<definition xmlns="http://workflow.opencastproject.org">
<id>cern-cds-videos</id>
<title>CDS Main Workflow</title>
<tags>
<tag>archive</tag>
<tag>upload</tag>
<tag>schedule</tag>
</tags>
<displayOrder>500</displayOrder>
<description>
A regular workflow that transcodes the media into distribution formats, then
sends the resulting distribution files, along with their associated metadata,
to the distribution channels.
</description>
<configuration_panel>
</configuration_panel>
<operations>
<operation
id="defaults"
description="Applying default configuration values">
<configurations>
<configuration key="publishToApi">true</configuration>
<configuration key="flagQualityMultiple">false</configuration>
<configuration key="flagQualityParallel">false</configuration>
<configuration key="flagQuality360p">true</configuration>
<configuration key="flagQuality480p">true</configuration>
<configuration key="flagQuality720p">true</configuration>
<configuration key="flagQuality1080p">true</configuration>
<configuration key="flagQuality2160p">true</configuration>
</configurations>
</operation>
<!-- Apply ACL from series to the mediapackage -->
<operation
id="series"
fail-on-error="true"
exception-handler-workflow="partial-error"
description="Applying access control entries from series">
<configurations>
<configuration key="apply-acl">true</configuration>
</configurations>
</operation>
<!-- Inspect the media -->
<operation
id="inspect"
fail-on-error="true"
exception-handler-workflow="partial-error"
description="Inspecting audio and video streams">
<configurations>
<configuration key="overwrite">false</configuration>
<configuration key="accept-no-media">false</configuration>
<configuration key="accurate-frame-count">false</configuration>
</configurations>
</operation>
<operation
id="encode"
if="${flagQuality720p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
fail-on-error="false"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-encoding-error"
description="Encoding 720p video to MP4 download">
<configurations>
<configuration key="source-flavor">*/source</configuration>
<configuration key="target-flavor">*/delivery720p</configuration>
<configuration key="target-tags">engage-download,720p-quality</configuration>
<configuration key="encoding-profile">cds-720p.http</configuration>
</configurations>
</operation>
<operation
id="publish-configure"
if="${publishToApi} AND ${flagQuality720p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
exception-handler-workflow="cern-critical-error"
description="Publish 720p to external api publication channel">
<configurations>
<configuration key="channel-id">api</configuration>
<configuration key="mimetype">application/json</configuration>
<configuration key="download-source-tags">engage-download</configuration>
<configuration key="url-pattern">https://<%= @fqdn %>/api/events/${event_id}</configuration>
<configuration key="with-published-elements">false</configuration>
<configuration key="check-availability">true</configuration>
</configurations>
</operation>
<operation
id="encode"
if="${flagQuality1080p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
fail-on-error="false"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-encoding-error"
description="Encoding 1080p video to MP4 download">
<configurations>
<configuration key="source-flavor">*/source</configuration>
<configuration key="target-flavor">*/delivery1080p</configuration>
<configuration key="target-tags">engage-download,1080p-quality</configuration>
<configuration key="encoding-profile">cds-1080p.http</configuration>
</configurations>
</operation>
<operation
id="publish-configure"
if="${publishToApi} AND ${flagQuality1080p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
exception-handler-workflow="cern-critical-error"
description="Publish 1080p to external api publication channel">
<configurations>
<configuration key="channel-id">api</configuration>
<configuration key="mimetype">application/json</configuration>
<configuration key="download-source-tags">engage-download</configuration>
<configuration key="url-pattern">https://<%= @fqdn %>/api/events/${event_id}</configuration>
<configuration key="with-published-elements">false</configuration>
<configuration key="check-availability">true</configuration>
</configurations>
</operation>
<operation
id="encode"
if="${flagQuality480p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
fail-on-error="false"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-encoding-error"
description="Encoding 480p video to MP4 download">
<configurations>
<configuration key="source-flavor">*/source</configuration>
<configuration key="target-flavor">*/delivery480p</configuration>
<configuration key="target-tags">engage-download,480p-quality</configuration>
<configuration key="encoding-profile">cds-480p.http</configuration>
</configurations>
</operation>
<operation
id="publish-configure"
if="${publishToApi} AND ${flagQuality480p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
exception-handler-workflow="cern-critical-error"
description="Publish 480p to external api publication channel">
<configurations>
<configuration key="channel-id">api</configuration>
<configuration key="mimetype">application/json</configuration>
<configuration key="download-source-tags">engage-download</configuration>
<configuration key="url-pattern">https://<%= @fqdn %>/api/events/${event_id}</configuration>
<configuration key="with-published-elements">false</configuration>
<configuration key="check-availability">true</configuration>
</configurations>
</operation>
<operation
id="encode"
if="${flagQuality360p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
fail-on-error="false"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-encoding-error"
description="Encoding 360p video to MP4 download">
<configurations>
<configuration key="source-flavor">*/source</configuration>
<configuration key="target-flavor">*/delivery360p</configuration>
<configuration key="target-tags">engage-download,360p-quality</configuration>
<configuration key="encoding-profile">cds-360p.http</configuration>
</configurations>
</operation>
<operation
id="publish-configure"
if="${publishToApi} AND ${flagQuality360p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
exception-handler-workflow="cern-critical-error"
description="Publish 360p to external api publication channel">
<configurations>
<configuration key="channel-id">api</configuration>
<configuration key="mimetype">application/json</configuration>
<configuration key="download-source-tags">engage-download</configuration>
<configuration key="url-pattern">https://<%= @fqdn %>/api/events/${event_id}</configuration>
<configuration key="with-published-elements">false</configuration>
<configuration key="check-availability">true</configuration>
<!--configuration key="strategy">merge</configuration-->
</configurations>
</operation>
<operation
if="${flagQuality2160p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
id="encode"
fail-on-error="false"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-encoding-error"
description="Encoding 2160p video to MP4 download">
<configurations>
<configuration key="source-flavor">*/source</configuration>
<configuration key="target-flavor">*/delivery2160p</configuration>
<configuration key="target-tags">engage-download,2160p-quality</configuration>
<configuration key="encoding-profile">cds-2160p.http</configuration>
</configurations>
</operation>
<operation
id="publish-configure"
if="${publishToApi} AND ${flagQuality2160p} AND NOT ${flagQualityMultiple} AND NOT ${flagQualityParallel}"
exception-handler-workflow="cern-critical-error"
description="Publish 2160p to external api publication channel">
<configurations>
<configuration key="channel-id">api</configuration>
<configuration key="mimetype">application/json</configuration>
<configuration key="download-source-tags">engage-download</configuration>
<configuration key="url-pattern">https://<%= @fqdn %>/api/events/${event_id}</configuration>
<configuration key="with-published-elements">false</configuration>
<configuration key="check-availability">true</configuration>
</configurations>
</operation>
<operation
if="${flagQualityMultiple} AND NOT ${flagQualityParallel}"
id="multiencode"
fail-on-error="true"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-critical-error"
description="Encoding multiple qualities to different worker nodes video to MP4 download">
<configurations>
<configuration key="source-flavors">*/source</configuration>
<configuration key="target-flavors">*/delivery360p,*/delivery480p,*/delivery720p,*/delivery1080p</configuration>
<configuration key="target-tags">engage-download</configuration>
<configuration key="encoding-profiles">adaptive-360p.http,adaptive-480p.http,adaptive-720p.http,adaptive-1080p.http</configuration>
<configuration key="tag-with-profile">true</configuration>
</configurations>
</operation>
<operation
id="encode"
if="${flagQualityParallel} AND NOT ${flagQualityMultiple}"
fail-on-error="true"
retry-strategy="retry"
max-attempts="3"
exception-handler-workflow="cern-critical-error"
description="Encoding multiple qualities to one single worker video to MP4 download">
<configurations>
<configuration key="source-flavor">*/source</configuration>
<configuration key="target-flavor">*/delivery</configuration>
<configuration key="target-tags">engage-download</configuration>
<configuration key="encoding-profiles">cds-parallel.http</configuration>
<configuration key="tag-with-profile">true</configuration>
</configurations>
</operation>
<operation
id="publish-configure"
if="${publishToApi} AND (${flagQualityMultiple} OR ${flagQualityParallel})"
exception-handler-workflow="cern-critical-error"
description="Publish Parallel-Multiple to external api publication channel">
<configurations>
<configuration key="channel-id">api</configuration>
<configuration key="mimetype">application/json</configuration>
<configuration key="download-source-tags">engage-download</configuration>
<configuration key="url-pattern">https://<%= @fqdn %>/api/events/${event_id}</configuration>
<configuration key="with-published-elements">false</configuration>
<configuration key="check-availability">true</configuration>
</configurations>
</operation>
<!-- Archive the current state of the media package -->
<operation
id="snapshot"
fail-on-error="true"
exception-handler-workflow="partial-error"
description="Archiving">
<configurations>
<configuration key="source-flavors">*/source,dublincore/*,security/*</configuration>
</configurations>
</operation>
<!-- Clean up the working file repository -->
<operation
id="cleanup"
fail-on-error="false"
description="Cleaning up">
<configurations>
<configuration key="delete-external">true</configuration>
<configuration key="preserve-flavors">security/*</configuration>
</configurations>
</operation>
</operations>
</definition>