public function createTrack(MultimediaObject $multimediaObject, $pathEnd, $profileName, $language = null, $description = array()) { $profile = $this->profileService->getProfile($profileName); $track = new Track(); $track->addTag('profile:' . $profileName); if ($profile['master']) { $track->addTag('master'); } if ($profile['display']) { $track->addTag('display'); } foreach (array_filter(preg_split('/[,\\s]+/', $profile['tags'])) as $tag) { $track->addTag(trim($tag)); } if (!empty($description)) { $track->setI18nDescription($description); } $track->setLanguage($language); $track->setPath($pathEnd); if (isset($profile['streamserver']['url_out'])) { $track->setUrl(str_replace(realpath($profile['streamserver']['dir_out']), $profile['streamserver']['url_out'], $pathEnd)); } $this->inspectionService->autocompleteTrack($track); $track->setOnlyAudio($track->getWidth() == 0); $track->setHide(!$profile['display']); $multimediaObject->setDuration($track->getDuration()); $multimediaObject->addTrack($track); $this->dm->persist($multimediaObject); $this->dm->flush(); return $track; }
public function testEmbedTracksInMultimediaObject() { $track1 = new Track(); $track2 = new Track(); $track3 = new Track(); $this->dm->persist($track1); $this->dm->persist($track2); $this->dm->persist($track3); $mm = new MultimediaObject(); $mm->addTrack($track1); $mm->addTrack($track2); $mm->addTrack($track3); $this->dm->persist($mm); $this->dm->flush(); $this->assertEquals($track1, $this->repo->find($mm->getId())->getTrackById($track1->getId())); $this->assertEquals($track2, $this->repo->find($mm->getId())->getTrackById($track2->getId())); $this->assertEquals($track3, $this->repo->find($mm->getId())->getTrackById($track3->getId())); $this->assertNull($this->repo->find($mm->getId())->getTrackById(null)); $mm->removeTrackById($track2->getId()); $this->dm->persist($mm); $this->dm->flush(); $tracksArray = array($track1, $track3); $this->assertEquals(count($tracksArray), count($this->repo->find($mm->getId())->getTracks())); $this->assertEquals($tracksArray, array_values($this->repo->find($mm->getId())->getTracks()->toArray())); $mm->upTrackById($track3->getId()); $this->dm->persist($mm); $this->dm->flush(); $tracksArray = array($track3, $track1); $this->assertEquals($tracksArray, array_values($this->repo->find($mm->getId())->getTracks()->toArray())); $mm->downTrackById($track3->getId()); $this->dm->persist($mm); $this->dm->flush(); $tracksArray = array($track1, $track3); $this->assertEquals($tracksArray, array_values($this->repo->find($mm->getId())->getTracks()->toArray())); }
public function testGenerateJobsForAudio() { $track = new Track(); $track->addTag("master"); $track->setPath("path"); $track->setOnlyAudio(true); $mmobj = new MultimediaObject(); $mmobj->addTrack($track); $jobs = $this->invokeMethod($this->jobGeneratorListener, 'generateJobs', array($mmobj, 'TAGA')); $this->assertEquals(array('audio'), $jobs); $jobs = $this->invokeMethod($this->jobGeneratorListener, 'generateJobs', array($mmobj, 'TAGC')); $this->assertEquals(array('audio', 'audio2'), $jobs); $jobs = $this->invokeMethod($this->jobGeneratorListener, 'generateJobs', array($mmobj, 'TAGB')); $this->assertEquals(array('audio2'), $jobs); //generate a video2 from an audio has no sense. $jobs = $this->invokeMethod($this->jobGeneratorListener, 'generateJobs', array($mmobj, 'TAGP')); $this->assertEquals(array(), $jobs); //generate a video from an audio has no sense. $jobs = $this->invokeMethod($this->jobGeneratorListener, 'generateJobs', array($mmobj, 'TAGFP')); $this->assertEquals(array(), $jobs); //generate a video from an audio has no sense. }
private function createNewMultimediaObjectWithTrack() { $track = new Track(); $track->addTag('profile:master'); $track->setPath('path/to/track.mp4'); $multimediaObject = new MultimediaObject(); $multimediaObject->setTitle('MultimediaObject test'); $multimediaObject->addTrack($track); $this->dm->persist($multimediaObject); $this->dm->flush(); return $multimediaObject; }
public function testIsOnlyAudio() { $mm = new MultimediaObject(); $t1 = new Track(); $t1->setOnlyAudio(true); $t2 = new Track(); $t2->setOnlyAudio(true); $t3 = new Track(); $t3->setOnlyAudio(true); $t4 = new Track(); $t4->setOnlyAudio(true); $t5 = new Track(); $t5->setOnlyAudio(true); $mm->addTrack($t3); $mm->addTrack($t2); $mm->addTrack($t1); $mm->addTrack($t4); $mm->addTrack($t5); $this->assertTrue($mm->isOnlyAudio()); $t5->setOnlyAudio(false); $this->assertFalse($mm->isOnlyAudio()); }
public function syncTrack(MultimediaObject $mmobj, $parsedTerena) { $url = $parsedTerena['track_url']; $urlParsed = parse_url($url); //TODO if track_url add a error. $urlExtension = isset($urlParsed['path']) ? pathinfo($urlParsed['path'], PATHINFO_EXTENSION) : null; $track = $mmobj->getTrackWithTag('geant_track'); if (!isset($track)) { $track = new Track(); $mmobj->addTrack($track); } $track->addTag('geant_track'); $track->setLanguage($parsedTerena['language']); $track->setDuration($parsedTerena['duration']); $track->setVcodec($parsedTerena['track_format']); $track->setPath($url); $track->setUrl($url); $format = explode('/', $parsedTerena['track_format']); $formatType = isset($format[0]) ? $format[0] : null; $formatExtension = isset($format[1]) ? $format[1] : null; if ($formatType == 'video' && in_array($formatExtension, $this->VIDEO_EXTENSIONS) || in_array($urlExtension, $this->VIDEO_EXTENSIONS)) { $track->addTag('display'); $track->setOnlyAudio(false); $mmobj->setProperty('redirect', false); $mmobj->setProperty('iframeable', false); } elseif ($formatType == 'audio' && in_array($formatExtension, $this->AUDIO_EXTENSIONS) || in_array($urlExtension, $this->AUDIO_EXTENSIONS)) { $track->addTag('display'); $track->setOnlyAudio(true); $mmobj->setProperty('redirect', false); $mmobj->setProperty('iframeable', false); } else { //We try to create an embed Url. If we can't, it returns false and we'll redirect instead. (When other repositories provides more embedded urls we will change this) $embedUrl = $this->feedProcesser->getEmbedUrl($url); if ($embedUrl) { $mmobj->setProperty('opencast', true); //Workaround to prevent editing the Schema Filter for now. $mmobj->setProperty('iframeable', true); $mmobj->setProperty('redirect', false); $mmobj->setProperty('iframe_url', $embedUrl); } else { $mmobj->setProperty('opencast', true); //Workaround to prevent editing the Schema Filter for now. $mmobj->setProperty('redirect', true); $mmobj->setProperty('iframeable', false); $mmobj->setProperty('redirect_url', $url); } } $this->dm->persist($track); $track->addTag('geant_track'); }