/**
  * Completes track information from a given path using mediainfo.
  * @param Track $track
  */
 public function autocompleteTrack(Track $track)
 {
     $only_audio = true;
     //initialized true until video track is found.
     if (!$track->getPath()) {
         throw new \BadMethodCallException('Input track has no path defined');
     }
     $xml = simplexml_load_string($this->getMediaInfo($track->getPath()));
     if (!$this->xmlHasMediaContent($xml)) {
         throw new \InvalidArgumentException("This file has no accesible video " . "nor audio tracks\n" . $track->getPath());
     }
     foreach ($xml->File->track as $xml_track) {
         switch ((string) $xml_track['type']) {
             case "General":
                 $track->setMimetype($xml_track->Internet_media_type);
                 $track->setBitrate(intval($xml_track->Overall_bit_rate[0]));
                 $aux = intval((string) $xml_track->Duration[0]);
                 $track->setDuration(ceil($aux / 1000));
                 $track->setSize((string) $xml_track->File_size[0]);
                 break;
             case "Video":
                 $track->setVcodec((string) $xml_track->Format[0]);
                 $track->setFramerate((string) $xml_track->Frame_rate[0]);
                 $track->setWidth(intval($xml_track->Width));
                 $track->setHeight(intval($xml_track->Height));
                 $only_audio = false;
                 break;
             case "Audio":
                 $track->setAcodec((string) $xml_track->Format[0]);
                 $track->setChannels(intval($xml_track->Channel_s_));
                 break;
         }
         $track->setOnlyAudio($only_audio);
     }
 }
 /**
  * Completes track information from a given path using mediainfo.
  * @param Track $track
  */
 public function autocompleteTrack(Track $track)
 {
     $only_audio = true;
     //initialized true until video track is found.
     if (!$track->getPath()) {
         throw new \BadMethodCallException('Input track has no path defined');
     }
     $json = json_decode($this->getMediaInfo($track->getPath()));
     if (!$this->jsonHasMediaContent($json)) {
         throw new \InvalidArgumentException("This file has no accesible video " . "nor audio tracks\n" . $track->getPath());
     }
     $track->setMimetype(mime_content_type($track->getPath()));
     $track->setBitrate(intval($json->format->bit_rate));
     $aux = intval((string) $json->format->duration);
     $track->setDuration(ceil($aux));
     $track->setSize((string) $json->format->size);
     foreach ($json->streams as $stream) {
         switch ((string) $stream->codec_type) {
             case "video":
                 $track->setVcodec((string) $stream->codec_name);
                 $track->setFramerate((string) $stream->avg_frame_rate);
                 $track->setWidth(intval($stream->width));
                 $track->setHeight(intval($stream->height));
                 $only_audio = false;
                 break;
             case "audio":
                 $track->setAcodec((string) $stream->codec_name);
                 $track->setChannels(intval($stream->channels));
                 break;
         }
         $track->setOnlyAudio($only_audio);
     }
 }
 /**
  * Completes track information from a given path using ffmpeg.
  * @param Track $track
  */
 public function autocompleteTrack(Track $track)
 {
     if (!$track->getPath()) {
         throw new \BadMethodCallException('Input track has no path defined');
     }
     $file = $track->getPath();
     $movie = new \ffmpeg_movie($file, false);
     $finfo = new \finfo();
     if (!$this->fileHasMediaContent($finfo, $file)) {
         throw new \InvalidArgumentException("This file has no video nor audio tracks");
     }
     $only_audio = true;
     // General
     $track->setMimetype($finfo->file($file, FILEINFO_MIME_TYPE));
     $track->setBitrate($movie->getBitRate());
     $track->setDuration(ceil($movie->getDuration()));
     $track->setSize(filesize($file));
     if ($movie->hasVideo()) {
         $only_audio = false;
         $track->setVcodec($movie->getVideoCodec());
         $track->setFramerate($movie->getFrameRate());
         $track->setWidth($movie->getFrameWidth());
         $track->setHeight($movie->getFrameHeight());
     }
     if ($movie->hasAudio()) {
         $track->setAcodec($movie->getAudioCodec());
         $track->setChannels($movie->getAudioChannels());
     }
     $track->setOnlyAudio($only_audio);
 }
Esempio n. 4
0
 public function testGetterAndSetter()
 {
     $tags = array('tag_a', 'tag_b');
     $language = 'portuñol';
     $url = '/mnt/video/123/23435.mp4';
     $path = '/mnt/video/123/23435.mp4';
     $mime = 'video/mpeg4';
     $duration = 3456;
     $acodec = 'aac';
     $vcodec = 'mpeg4-HP';
     $bitrate = 10000;
     $framerate = '25/1';
     $only_audio = false;
     $channels = 1;
     $duration = 66666;
     $width = 1920;
     $height = 1080;
     $hide = false;
     $numview = 3;
     $resolution = array('width' => $width, 'height' => $height);
     $track = new Track();
     $track->setTags($tags);
     $track->setLanguage($language);
     $track->setUrl($url);
     $track->setPath($path);
     $track->setMimeType($mime);
     $track->setDuration($duration);
     $track->setAcodec($acodec);
     $track->setVcodec($vcodec);
     $track->setBitrate($bitrate);
     $track->setFramerate($framerate);
     $track->setOnlyAudio($only_audio);
     $track->setChannels($channels);
     $track->setDuration($duration);
     $track->setWidth($width);
     $track->setHeight($height);
     $track->setHide($hide);
     $track->setNumview($numview);
     $track->setResolution($resolution);
     $this->assertEquals($tags, $track->getTags());
     $this->assertEquals($language, $track->getLanguage());
     $this->assertEquals($url, $track->getUrl());
     $this->assertEquals($path, $track->getPath());
     $this->assertEquals($mime, $track->getMimeType());
     $this->assertEquals($duration, $track->getDuration());
     $this->assertEquals($acodec, $track->getAcodec());
     $this->assertEquals($vcodec, $track->getVcodec());
     $this->assertEquals($bitrate, $track->getBitrate());
     $this->assertEquals($framerate, $track->getFramerate());
     $this->assertFalse($only_audio, $track->getOnlyAudio());
     $this->assertEquals($channels, $track->getChannels());
     $this->assertEquals($duration, $track->getDuration());
     $this->assertEquals($width, $track->getWidth());
     $this->assertEquals($height, $track->getHeight());
     $this->assertFalse($hide, $track->getHide());
     $this->assertEquals($numview, $track->getNumview());
     $this->assertEquals($resolution, $track->getResolution());
 }
 public function importRecording($opencastId, $invert = false)
 {
     $mediaPackage = $this->opencastClient->getMediaPackage($opencastId);
     $seriesRepo = $this->dm->getRepository('PumukitSchemaBundle:Series');
     if (isset($mediaPackage["series"])) {
         $series = $seriesRepo->findOneBy(array("properties.opencast" => $mediaPackage["series"]));
     } else {
         $series = $seriesRepo->findOneBy(array("properties.opencast" => "default"));
     }
     if (!$series) {
         $series = $this->importSeries($mediaPackage);
     }
     $multimediaobjectsRepo = $this->dm->getRepository('PumukitSchemaBundle:MultimediaObject');
     $onemultimediaobjects = $multimediaobjectsRepo->findOneBy(array("properties.opencast" => $mediaPackage["id"]));
     if ($onemultimediaobjects == null) {
         $title = $mediaPackage["title"];
         $properties = $mediaPackage["id"];
         $recDate = $mediaPackage["start"];
         $multimediaObject = $this->factoryService->createMultimediaObject($series);
         $multimediaObject->setSeries($series);
         $multimediaObject->setRecordDate($recDate);
         $multimediaObject->setProperty("opencast", $properties);
         $multimediaObject->setProperty("opencastinvert", boolval($invert));
         $multimediaObject->setProperty("opencasturl", $this->opencastClient->getPlayerUrl() . "?id=" . $properties);
         $multimediaObject->setTitle($title);
         if (isset($mediaPackage["language"])) {
             $multimediaObject->setProperty("opencastlanguage", strtolower($mediaPackage["language"]));
         } else {
             $multimediaObject->setProperty("opencastlanguage", 'en');
         }
         foreach ($this->otherLocales as $locale) {
             $multimediaObject->setTitle($title, $locale);
         }
         //Multiple tracks
         if (isset($mediaPackage["media"]["track"][0])) {
             for ($i = 0; $i < count($mediaPackage["media"]["track"]); $i++) {
                 $tags = $mediaPackage["media"]["track"][$i]["tags"];
                 $url = $mediaPackage["media"]["track"][$i]["url"];
                 $mime = $mediaPackage["media"]["track"][$i]["mimetype"];
                 $duration = $mediaPackage["media"]["track"][$i]["duration"];
                 $track = new Track();
                 if (isset($mediapackage["media"]["track"][$i]["audio"])) {
                     $acodec = $mediaPackage["media"]["track"][$i]["audio"]["encoder"]["type"];
                     $track->setAcodec($acodec);
                 }
                 if (isset($mediaPackage["language"])) {
                     $track->setLanguage(strtolower($mediaPackage["language"]));
                 }
                 if (isset($mediaPackage["media"]["track"][$i]["video"])) {
                     $vcodec = $mediaPackage["media"]["track"][$i]["video"]["encoder"]["type"];
                     $track->setVcodec($vcodec);
                     $framerate = $mediaPackage["media"]["track"][$i]["video"]["framerate"];
                     $track->setFramerate($framerate);
                 }
                 if (!$track->getVcodec() && $track->getAcodec()) {
                     $track->setOnlyAudio(true);
                 }
                 $track->addTag("opencast");
                 $track->addTag($mediaPackage["media"]["track"][$i]["type"]);
                 $track->setUrl($url);
                 $track->setPath($this->opencastService->getPath($url));
                 $track->setMimeType($mime);
                 $track->setDuration($duration / 1000);
                 $this->inspectionService->autocompleteTrack($track);
                 $multimediaObject->setDuration($track->getDuration());
                 $multimediaObject->addTrack($track);
             }
         } else {
             $tags = $mediaPackage["media"]["track"]["tags"];
             $url = $mediaPackage["media"]["track"]["url"];
             $mime = $mediaPackage["media"]["track"]["mimetype"];
             $duration = $mediaPackage["media"]["track"]["duration"];
             $track = new Track();
             if (isset($mediapackage["media"]["track"]["audio"])) {
                 $acodec = $mediaPackage["media"]["track"]["audio"]["encoder"]["type"];
                 $track->setAcodec($acodec);
             }
             if (isset($mediaPackage["media"]["track"]["video"])) {
                 $vcodec = $mediaPackage["media"]["track"]["video"]["encoder"]["type"];
                 $track->setVcodec($vcodec);
                 $framerate = $mediaPackage["media"]["track"]["video"]["framerate"];
                 $track->setFramerate($framerate);
             }
             if (!$track->getVcodec() && $track->getAcodec()) {
                 $track->setOnlyAudio(true);
             }
             $track->addTag("opencast");
             $track->addTag($mediaPackage["media"]["track"]["type"]);
             $track->setUrl($url);
             $track->setPath($this->opencastService->getPath($url));
             $track->setMimeType($mime);
             $track->setDuration($duration / 1000);
             $this->inspectionService->autocompleteTrack($track);
             $multimediaObject->setDuration($track->getDuration());
             $multimediaObject->addTrack($track);
         }
         for ($j = 0; $j < count($mediaPackage["attachments"]["attachment"]); $j++) {
             if (isset($mediaPackage["attachments"]["attachment"][$j]["type"])) {
                 if ($mediaPackage["attachments"]["attachment"][$j]["type"] == "presenter/search+preview") {
                     $tags = $mediaPackage["attachments"]["attachment"][$j]["tags"];
                     $url = $mediaPackage["attachments"]["attachment"][$j]["url"];
                     $pic = new Pic();
                     $pic->setTags(array($tags));
                     $pic->setUrl($url);
                     $multimediaObject->addPic($pic);
                 }
             }
         }
         $tagRepo = $this->dm->getRepository('PumukitSchemaBundle:Tag');
         $opencastTag = $tagRepo->findOneByCod('TECHOPENCAST');
         if ($opencastTag) {
             $tagService = $this->tagService;
             $tagAdded = $tagService->addTagToMultimediaObject($multimediaObject, $opencastTag->getId());
         }
         $this->dm->persist($multimediaObject);
         $this->dm->flush();
         if ($track) {
             $opencastUrls = $this->getOpencastUrls($opencastId);
             $this->opencastService->genSbs($multimediaObject, $opencastUrls);
         }
     }
 }