use of org.opencastproject.mediapackage.Track in project opencast by opencast.
the class IngestServiceImpl method createSmil.
private MediaPackage createSmil(MediaPackage mediaPackage) throws IOException, IngestException {
Stream<Track> partialTracks = Stream.empty();
for (Track track : mediaPackage.getTracks()) {
Long startTime = partialTrackStartTimes.getIfPresent(track.getIdentifier());
if (startTime == null)
continue;
partialTracks = partialTracks.append(Opt.nul(track));
}
// No partial track available return without adding SMIL catalog
if (partialTracks.isEmpty())
return mediaPackage;
// Inspect the partial tracks
List<Track> tracks = partialTracks.map(newEnrichJob(mediaInspectionService).toFn()).map(payloadAsTrack(getServiceRegistry()).toFn()).each(MediaPackageSupport.updateElement(mediaPackage).toFn().toFx()).toList();
// Create the SMIL document
org.w3c.dom.Document smilDocument = SmilUtil.createSmil();
for (Track track : tracks) {
Long startTime = partialTrackStartTimes.getIfPresent(track.getIdentifier());
if (startTime == null) {
logger.error("No start time found for track {}", track);
throw new IngestException("No start time found for track " + track.getIdentifier());
}
smilDocument = addSmilTrack(smilDocument, track, startTime);
partialTrackStartTimes.invalidate(track.getIdentifier());
}
// Store the SMIL document in the mediapackage
return addSmilCatalog(smilDocument, mediaPackage);
}
use of org.opencastproject.mediapackage.Track in project opencast by opencast.
the class IngestServiceImplTest method testMergeScheduledMediaPackage.
@Test
public void testMergeScheduledMediaPackage() throws Exception {
MediaPackage ingestMediaPackage = MediaPackageParser.getFromXml(IOUtils.toString(getClass().getResourceAsStream("/source-manifest-partial.xml"), "UTF-8"));
WorkflowInstance instance = service.ingest(ingestMediaPackage);
MediaPackage mergedMediaPackage = instance.getMediaPackage();
Assert.assertEquals(4, mergedMediaPackage.getTracks().length);
Track track = mergedMediaPackage.getTrack("track-1");
Assert.assertEquals("/vonlya1.mov", track.getURI().toString());
Assert.assertEquals(3, mergedMediaPackage.getCatalogs().length);
Assert.assertEquals(1, mergedMediaPackage.getAttachments().length);
Attachment attachment = mergedMediaPackage.getAttachment("cover");
Assert.assertEquals("attachments/cover.png", attachment.getURI().toString());
// Validate fields
Assert.assertEquals(new Date(DateTimeSupport.fromUTC("2007-12-05T13:45:00")), mergedMediaPackage.getDate());
Assert.assertEquals(10045L, mergedMediaPackage.getDuration().doubleValue(), 0L);
Assert.assertEquals("t2", mergedMediaPackage.getTitle());
Assert.assertEquals("s2", mergedMediaPackage.getSeries());
Assert.assertEquals("st2", mergedMediaPackage.getSeriesTitle());
Assert.assertEquals("l2", mergedMediaPackage.getLicense());
Assert.assertEquals(1, mergedMediaPackage.getSubjects().length);
Assert.assertEquals("s2", mergedMediaPackage.getSubjects()[0]);
Assert.assertEquals(1, mergedMediaPackage.getContributors().length);
Assert.assertEquals("sd2", mergedMediaPackage.getContributors()[0]);
Assert.assertEquals(1, mergedMediaPackage.getCreators().length);
Assert.assertEquals("p2", mergedMediaPackage.getCreators()[0]);
}
use of org.opencastproject.mediapackage.Track in project opencast by opencast.
the class MediaInspectionServiceImplTest method testInspection.
@Test
public void testInspection() throws Exception {
final URI trackUri = getResource("/test.mp4");
for (MediaInspector mi : init(trackUri)) {
Track track = mi.inspectTrack(trackUri, Options.NO_OPTION);
// test the returned values
Checksum cs = Checksum.create(ChecksumType.fromString("md5"), "cc72b7a4f1a68b84fba6f0fb895da395");
assertEquals(cs, track.getChecksum());
assertEquals("video", track.getMimeType().getType());
assertEquals("mp4", track.getMimeType().getSubtype());
assertNotNull(track.getDuration());
assertTrue(track.getDuration() > 0);
}
}
use of org.opencastproject.mediapackage.Track in project opencast by opencast.
the class InspectWorkflowOperationHandler method start.
/**
* {@inheritDoc}
*
* @see org.opencastproject.workflow.api.WorkflowOperationHandler#start(org.opencastproject.workflow.api.WorkflowInstance,
* JobContext)
*/
@Override
public WorkflowOperationResult start(WorkflowInstance workflowInstance, JobContext context) throws WorkflowOperationException {
MediaPackage mediaPackage = (MediaPackage) workflowInstance.getMediaPackage().clone();
// Inspect the tracks
long totalTimeInQueue = 0;
WorkflowOperationInstance operation = workflowInstance.getCurrentOperation();
boolean rewrite = "true".equalsIgnoreCase(operation.getConfiguration(OPT_OVERWRITE));
boolean acceptNoMedia = "true".equalsIgnoreCase(operation.getConfiguration(OPT_ACCEPT_NO_MEDIA));
final Map<String, String> options = new HashMap<String, String>();
if ("true".equalsIgnoreCase(operation.getConfiguration(OPT_ACCURATE_FRAME_COUNT))) {
logger.info("Using accurate frame count for inspection media package {}", mediaPackage);
options.put(MediaInspectionOptions.OPTION_ACCURATE_FRAME_COUNT, Boolean.TRUE.toString());
}
// Test if there are tracks in the mediapackage
if (mediaPackage.getTracks().length == 0) {
logger.warn("Recording {} contains no media", mediaPackage);
if (!acceptNoMedia)
throw new WorkflowOperationException("Mediapackage " + mediaPackage + " contains no media");
}
for (Track track : mediaPackage.getTracks()) {
logger.info("Inspecting track '{}' of {}", track.getIdentifier(), mediaPackage);
Job inspectJob = null;
Track inspectedTrack;
if (track != null && track.getURI() != null && (track.getURI().toString().endsWith(".vtt") || track.getURI().toString().endsWith(".srt"))) {
inspectedTrack = (Track) track.clone();
inspectedTrack.setMimeType(MimeType.mimeType("text", "vtt"));
logger.info("Track '{}' of {} contains captions", track.getIdentifier(), mediaPackage);
} else {
try {
inspectJob = inspectionService.enrich(track, rewrite, options);
if (!waitForStatus(inspectJob).isSuccess()) {
throw new WorkflowOperationException("Track " + track + " could not be inspected");
}
} catch (MediaInspectionException e) {
throw new WorkflowOperationException("Error inspecting media package", e);
} catch (MediaPackageException e) {
throw new WorkflowOperationException("Error parsing media package", e);
}
// add this receipt's queue and execution times to the total
long timeInQueue = inspectJob.getQueueTime() == null ? 0 : inspectJob.getQueueTime();
totalTimeInQueue += timeInQueue;
try {
inspectedTrack = (Track) MediaPackageElementParser.getFromXml(inspectJob.getPayload());
} catch (MediaPackageException e) {
throw new WorkflowOperationException("Unable to parse track from job " + inspectJob.getId(), e);
}
if (inspectedTrack == null)
throw new WorkflowOperationException("Track " + track + " could not be inspected");
if (inspectedTrack.getStreams().length == 0)
throw new WorkflowOperationException(format("Track %s does not contain any streams", track));
}
// Replace the original track with the inspected one
try {
mediaPackage.remove(track);
mediaPackage.add(inspectedTrack);
} catch (UnsupportedElementException e) {
logger.error("Error adding {} to media package", inspectedTrack, e);
}
}
// Update dublin core with metadata
try {
updateDublinCore(mediaPackage);
} catch (Exception e) {
logger.warn("Unable to update dublin core data: {}", e.getMessage(), e);
throw new WorkflowOperationException(e.getMessage());
}
return createResult(mediaPackage, Action.CONTINUE, totalTimeInQueue);
}
use of org.opencastproject.mediapackage.Track in project opencast by opencast.
the class DuplicateEventWorkflowOperationHandlerTest method testOverrideTags.
@Test
public void testOverrideTags() throws Exception {
mockDependencies(1);
// operation configuration
Map<String, String> configurations = new HashMap<>();
configurations.put(SOURCE_FLAVORS_PROPERTY, "presenter/source");
configurations.put(SOURCE_TAGS_PROPERTY, "archive");
configurations.put(TARGET_TAGS_PROPERTY, "tag1,tag2");
configurations.put(NUMBER_PROPERTY, "" + 1);
configurations.put(MAX_NUMBER_PROPERTY, "" + 10);
configurations.put(PROPERTY_NAMESPACES_PROPERTY, "org.opencastproject.assetmanager.security");
configurations.put(COPY_NUMBER_PREFIX_PROPERTY, "copy");
// run the operation handler
WorkflowOperationResult result = getWorkflowOperationResult(mp, configurations);
Assert.assertEquals(Action.CONTINUE, result.getAction());
Track track = clonedMediaPackages.getValue().getTracksByTag("tag1")[0];
Assert.assertEquals("tag1", track.getTags()[0]);
Assert.assertEquals("tag2", track.getTags()[1]);
}
Aggregations