in source/analysis-monitor/lib/index.js [104:167]
async startAnalysis() {
const input = await (new DB({
Table: Environment.DynamoDB.Ingest.Table,
PartitionKey: Environment.DynamoDB.Ingest.PartitionKey,
})).fetch(this.stateData.uuid, undefined, [
'proxies',
'key',
'type',
'mediainfo',
]);
/* check analysis options */
const aiOptions = await this.parseAIOptions();
const responses = await Promise.all([
this.startVideoAnalysis(input, aiOptions),
this.startAudioAnalysis(input, aiOptions),
this.startImageAnalysis(input, aiOptions),
this.startDocumentAnalysis(input, aiOptions),
]);
this.stateData.setData('video', {
arn: (responses[0] || {}).executionArn,
status: responses[0] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
});
this.stateData.setData('audio', {
arn: (responses[1] || {}).executionArn,
status: responses[1] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
});
this.stateData.setData('image', {
arn: (responses[2] || {}).executionArn,
status: responses[2] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
});
this.stateData.setData('document', {
arn: (responses[3] || {}).executionArn,
status: responses[3] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
});
// backward compatible with older version of mediainfo
let duration = (input.mediainfo)
? (input.mediainfo.media || input.mediainfo.file)
: undefined;
if (duration) {
duration = (duration.track || []).find(x => x.$.type.toLowerCase() === 'general');
duration = (duration || {}).duration || 0;
// v20.08 duration is in seconds. Converted to milliseconds.
if (input.mediainfo.media) {
duration = Math.floor(duration * 1000);
}
}
this.stateData.setData('metrics', {
duration: duration || 1000,
requestTime: this.timestamp,
startTime: (new Date()).getTime(),
});
this.stateData.setCompleted();
return this.stateData.toJSON();
}