Opencast CERN-CDS Ingest script
Simple script for automatic event creation and video file upload:
--event=event_name param required.
For skipping encoding operations can also add the params described in: https://codimd.web.cern.ch/JSv-QUUETomYEr5xx5fETw?view
Opencast ingest media package and run workflow.
./ingest_cds_wf.sh
--host=https://ocweb01-test2.cern.ch
--script_dir=pwd
--event=unknown
--root=/mnt/c/Users/mvaleron/cernbox/Devel/scripts/cdsingest/events
--title=CDS test video
--multiple=false (overrides previous encoding profiles)
--parallel=false (overrides previous encoding profiles)
#!/bin/bash
CAPTURE_AGENT="CDS"
HOST="https://ocweb01-test2.cern.ch"
USER="cdssoren"
PASSWORD='your_password'
#set -eux
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
event="unknown"
root="${script_dir}/events"
title="CDS test video"
multiple="false"
parallel="false"
function usage()
{
echo "Opencast ingest media package and run workflow."
echo ""
echo "./ingest_cds_wf.sh"
echo "--host=https://ocweb01-test2.cern.ch"
echo "--script_dir=pwd"
echo "--event=$event"
echo "--root=${script_dir}/events"
echo "--title=${title}"
echo "--multiple=false (overrides previous encoding profiles)"
echo "--parallel=false (overrides previous encoding profiles)"
echo ""
}
while [ "$1" != "" ]; do
PARAM=`echo $1 | awk -F= '{print $1}'`
VALUE=`echo $1 | awk -F= '{print $2}'`
case $PARAM in
-h | --help)
usage
exit
;;
--host)
HOST=$VALUE
;;
--script_dir)
script_dir=$VALUE
;;
--event)
event=$VALUE
;;
--root)
root=$VALUE
;;
--title)
title=$VALUE
;;
--multiple)
multiple=$VALUE
;;
--parallel)
parallel=$VALUE
;;
*)
echo "ERROR: unknown parameter \"$PARAM\""
usage
exit 1
;;
esac
shift
done
if [ "$event" == "unknown" ]; then
echo "ERROR: unknown event. Please add --event=event_name param"
usage
exit 1
fi
echo "script_dir is $script_dir";
echo "host is $host";
echo "root is $root";
echo "event is $event";
echo "title is $title";
echo "multiple is $multiple";
echo "parallel is $parallel";
TMP_MP="$(mktemp)"
TMP_WF="$(mktemp)"
TMP_DC="$(mktemp)"
TMP_PR="${root}/${event}/camera.mp4"
TMP_ACL="${root}/${event}/acl.xml"
WF='cern-cds'
START="$(date -d "1 min" --utc +%Y-%m-%dT%H:%MZ)"
END="$(date -d "2 min" --utc +%Y-%m-%dT%H:%MZ)"
echo '<?xml version="1.0" encoding="UTF-8"?>
<dublincore xmlns="http://www.opencastproject.org/xsd/1.0/dublincore/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oc="http://www.opencastproject.org/matterhorn/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dcterms:creator>CDS</dcterms:creator>
<dcterms:contributor>CDS</dcterms:contributor>
<dcterms:created xsi:type="dcterms:W3CDTF">'"${START}"'</dcterms:created>
<dcterms:temporal xsi:type="dcterms:Period">start='"${START}"'; end='"${END}"'; scheme=W3C-DTF;</dcterms:temporal>
<dcterms:description> multiple='${multiple}', parallel='${parallel}'</dcterms:description>
<dcterms:subject>cds videos</dcterms:subject>
<dcterms:language>eng</dcterms:language>
<dcterms:spatial>Remote</dcterms:spatial>
<dcterms:title>'${title}'- multiple='${multiple}', parallel='${parallel}'</dcterms:title>
<dcterms:isPartOf>723eb22b-383f-4f9d-8abc-5816e69f574a</dcterms:isPartOf>
</dublincore>' > "${TMP_DC}"
# Create media package
curl --insecure -f -u ${USER}:${PASSWORD} \
"${HOST}/ingest/createMediaPackage" \
-o "${TMP_MP}"
# Retuened mediapackage ID
mediaPackageId=$(head -n 1 ${TMP_MP})
id=$(grep -oPm1 'id="\K[^"]*' <<< "$mediaPackageId")
# Add DC Episode metadata
curl --insecure -f -u ${USER}:${PASSWORD} \
"${HOST}/ingest/addDCCatalog" -F "mediaPackage=<${TMP_MP}" \
-F "dublinCore=<${TMP_DC}" \
-F "flavor=dublincore/episode" -o "${TMP_MP}"
# Add Presenter/Camera
if [ -f "$TMP_PR" ]; then
echo "$TMP_PR exists."
curl --insecure --insecure -f -u ${USER}:${PASSWORD} \
"${HOST}/ingest/addTrack" -F "flavor=presenter/source" -F "mediaPackage=<${TMP_MP}" \
-F "BODY=@${TMP_PR}" -o "${TMP_MP}"
else
echo "$TMP_PR does not exist. We do not abort"
fi
# Episode ACL XML
if [ -f "$TMP_ACL" ]; then
echo "$TMP_ACL exists."
curl -v --insecure -u ${USER}:${PASSWORD} \
"${HOST}/ingest/addAttachment" -F "mediaPackage=<${TMP_MP}" \
-F "flavor=security/xacml+episode" -F "BODY=@${TMP_ACL}" -o "${TMP_MP}"
else
echo "$TMP_ACL does not exist. We do not abort but the WF will fail if the user has not privileges."
fi
# Ingest Mediapackage with workflow
curl -v --insecure -u ${USER}:${PASSWORD} \
"${HOST}/ingest/ingest/${WF}" -F "mediaPackage=<${TMP_MP}" \
-F "publish=true" -F "flagQualityMultiple=${multiple}" -F "flagQualityParallel=${parallel}" -o "${TMP_MP}"
# Returned wf ID
wfId=$(head -n 1 ${TMP_MP})
wf=$(grep -oPm1 'id="\K[^"]*' <<< "$wfId")
echo "id:${id}"
echo "workflow:${wf}"
rm -f "${TMP_MP}" "${TMP_WF}"