/**
  * Utilizando la libreria ffmpeg_php se genera un Pic que se asocia con el objeto
  * multimedia al que pertenece el archivo.
  *
  * @param MultimediaObject $multimediaObject
  * @param Track $track
  * @param integer $frame numero del frame donde se realiza la captura.
  * @return PIC o null si mal
  */
 private function createPic(MultimediaObject $multimediaObject, Track $track, $frame = 25)
 {
     $currentDir = 'series/' . $multimediaObject->getSeries()->getId() . '/video/' . $multimediaObject->getId();
     $absCurrentDir = $this->targetPath . "/" . $currentDir;
     $picFileName = date('ymdGis') . '.jpg';
     $aux = null;
     @mkdir($absCurrentDir, 0777, true);
     $aspectTrack = $this->getAspect($track);
     if (0 !== $aspectTrack) {
         $newHeight = intval(1.0 * $this->width / $aspectTrack);
         if ($newHeight <= $this->height) {
             $newWidth = $this->width;
         } else {
             $newHeight = $this->height;
             $newWidth = intval(1.0 * $this->height * $aspectTrack);
         }
     } else {
         $newHeight = $this->height;
         $newWidth = $this->width;
     }
     $vars = array("{{ss}}" => intval($frame / 25), "{{size}}" => $newWidth . "x" . $newHeight, "{{input}}" => $track->getPath(), "{{output}}" => $absCurrentDir . '/' . $picFileName);
     $commandLine = str_replace(array_keys($vars), array_values($vars), $this->command);
     $process = new Process($commandLine);
     $process->setTimeout(60);
     $process->run();
     if (!$process->isSuccessful()) {
         throw new \RuntimeException($process->getErrorOutput());
     }
     //log $process->getOutput()
     if (file_exists($absCurrentDir . '/' . $picFileName)) {
         $multimediaObject = $this->mmsPicService->addPicUrl($multimediaObject, $this->targetUrl . '/' . $currentDir . '/' . $picFileName);
     }
     return true;
 }
 /**
  * Find similar multimedia objects to a given one
  * with same tags, from different series,
  * broadcast public, status normal,
  * maximum 20 and random
  *
  * @param MultimediaObject $multimediaObject
  * @param array $tags
  * @return ArrayCollection
  */
 public function findRelatedMultimediaObjects(MultimediaObject $multimediaObject)
 {
     $qb = $this->createQueryBuilder()->field('_id')->notEqual($multimediaObject->getId())->field('series')->notEqual($multimediaObject->getSeries()->getId())->field('status')->equals(MultimediaObject::STATUS_PUBLISHED);
     // Broadcast public
     $broadcastRepo = $this->dm->getRepository('PumukitSchemaBundle:Broadcast');
     $broadcast = $broadcastRepo->findPublicBroadcast();
     $qb->field('broadcast')->references($broadcast);
     // Includes PUCHWEBTV code
     $tagRepo = $this->dm->getRepository('PumukitSchemaBundle:Tag');
     $unescoTag = $tagRepo->findOneByCod('UNESCO');
     $codes = array();
     foreach ($multimediaObject->getTags() as $tag) {
         if ($unescoTag) {
             if ($tag->isDescendantOf($unescoTag)) {
                 $codes[] = $tag->getCod();
             }
         }
     }
     $qb->field('tags.cod')->in($codes);
     // Limit 20 and random order
     $qb->limit(20)->sort('rank', mt_rand(0, 1) ? 1 : -1);
     $aux = $qb->getQuery()->execute();
     return $aux;
 }
예제 #3
0
 public function createTrackWithFile($pathFile, $profileName, MultimediaObject $multimediaObject, $language = null, $description = array())
 {
     $profile = $this->profileService->getProfile($profileName);
     $pathEnd = $this->getPathEnd($profile, $multimediaObject->getSeries()->getId(), pathinfo($pathFile, PATHINFO_FILENAME), pathinfo($pathFile, PATHINFO_EXTENSION));
     if (!copy($pathFile, $pathEnd)) {
         throw new \Exception("Error to copy file");
     }
     return $this->createTrack($multimediaObject, $pathEnd, $profileName, $language, $description);
 }
 public function testBroadcast(MultimediaObject $multimediaObject, Request $request)
 {
     if (($broadcast = $multimediaObject->getBroadcast()) && Broadcast::BROADCAST_TYPE_PUB !== $broadcast->getBroadcastTypeId() && (!($broadcastName = $request->headers->get('PHP_AUTH_USER', false)) || $request->headers->get('PHP_AUTH_PW') !== $broadcast->getPasswd() || $broadcastName !== $broadcast->getName())) {
         $seriesUrl = $this->generateUrl('pumukit_webtv_series_index', array('id' => $multimediaObject->getSeries()->getId()), true);
         $redReq = new RedirectResponse($seriesUrl, 302);
         return new Response($redReq->getContent(), 401, array('WWW-Authenticate' => 'Basic realm="Resource not public."'));
     }
     if ($broadcast && Broadcast::BROADCAST_TYPE_PRI === $broadcast->getBroadcastTypeId()) {
         return new Response($this->render("PumukitWebTVBundle:Index:403forbidden.html.twig", array()), 403);
     }
     return true;
 }
예제 #5
0
 /**
  * @Route("/mm/{id}", methods="GET", name="pumukit_encoder_mm")
  */
 public function multimediaObjectAction(MultimediaObject $multimediaObject, Request $request)
 {
     return $this->redirect($this->generateUrl('pumukitnewadmin_mms_index', array('id' => $multimediaObject->getSeries()->getId(), 'mmid' => $multimediaObject->getId())));
 }
 public function testGetterAndSetter()
 {
     $series = new Series();
     $rank = 3;
     $status = MultimediaObject::STATUS_PUBLISHED;
     $record_date = new \DateTime();
     $public_date = new \DateTime();
     $title = 'Star Wars';
     $subtitle = 'Spoiler';
     $description = "Darth Vader: Obi-Wan never told you what happened to your father.\n\t\t\tLuke Skywalker: He told me enough! He told me you killed him!\n\t\t\tDarth Vader: No. I am your father.\n\t\t\tLuke Skywalker: No... that's not true! That's impossible!";
     $numview = 2;
     $locale = 'en';
     $line2 = 'line2';
     $keyword = 'keyword';
     $properties = array('property1', 'property2');
     $tag1 = new Tag();
     $tag1->setCod('tag1');
     $tag2 = new Tag();
     $tag2->setCod('tag2');
     $tag3 = new Tag();
     $tag3->setCod('tag3');
     $mm_tags = array($tag1, $tag2, $tag3);
     $broadcast = new Broadcast();
     $broadcast->setName('Private');
     $broadcast->setBroadcastTypeId(Broadcast::BROADCAST_TYPE_PRI);
     $broadcast->setPasswd('password');
     $broadcast->setDefaultSel(true);
     $broadcast->setDescription('Private broadcast');
     $mm = new MultimediaObject();
     $mm->setRank($rank);
     $mm->setStatus($status);
     $mm->setSeries($series);
     $mm->setRecordDate($record_date);
     $mm->setPublicDate($public_date);
     $mm->setTitle($title);
     $mm->setSubtitle($subtitle);
     $mm->setDescription($description);
     $mm->addTag($tag1);
     $mm->addTag($tag2);
     $mm->addTag($tag3);
     $mm->setBroadcast($broadcast);
     $mm->setNumview($numview);
     $mm->setLocale($locale);
     $mm->setLine2($line2);
     $mm->setKeyword($keyword);
     $mm->setProperties($properties);
     $this->assertEquals($series, $mm->getSeries());
     $this->assertEquals($rank, $mm->getRank());
     $this->assertEquals($status, $mm->getStatus());
     $this->assertEquals($record_date, $mm->getRecordDate());
     $this->assertEquals($public_date, $mm->getPublicDate());
     $this->assertEquals($title, $mm->getTitle());
     $this->assertNotEquals($title . "2", $mm->getTitle());
     $this->assertEquals($subtitle, $mm->getSubtitle());
     $this->assertEquals($description, $mm->getDescription());
     $this->assertEquals(count($mm_tags), count($mm->getTags()));
     $this->assertEquals($broadcast, $mm->getBroadcast());
     $this->assertEquals($numview, $mm->getNumview());
     $this->assertEquals($locale, $mm->getLocale());
     $this->assertEquals($line2, $mm->getLine2());
     $this->assertEquals($keyword, $mm->getKeyword());
     $this->assertEquals($properties, $mm->getProperties());
     $title = null;
     $subtitle = null;
     $description = null;
     $line2 = null;
     $keyword = null;
     $mm->setTitle($title);
     $mm->setSubtitle($subtitle);
     $mm->setDescription($description);
     $mm->setLine2($line2);
     $mm->setKeyword($keyword);
     $this->assertEquals(null, $mm->getTitle());
     $this->assertEquals(null, $mm->getSubtitle());
     $this->assertEquals(null, $mm->getDescription());
     $this->assertEquals(null, $mm->getLine2());
     $this->assertEquals(null, $mm->getKeyword());
     $properties = array('prop2' => 'property2');
     $mm->setProperties($properties);
     $key = 'prop2';
     $this->assertEquals($properties[$key], $mm->getProperty($key));
     $property3 = 'property3';
     $value3 = 'value3';
     $mm->setProperty($property3, $value3);
     $this->assertEquals($value3, $mm->getProperty($property3));
     $mm->removeProperty($property3);
     $this->assertNull($mm->getProperty($property3));
 }
 /**
  * @Template("PumukitNewAdminBundle:Pic:picstoaddlist.html.twig")
  */
 public function picstoaddlistAction(MultimediaObject $multimediaObject, Request $request)
 {
     $picService = $this->get('pumukitschema.mmspic');
     // TODO search in picservice according to page (in criteria)
     if ($request->get('page', null)) {
         $this->get('session')->set('admin/mmspic/page', $request->get('page', 1));
     }
     $page = intval($this->get('session')->get('admin/mmspic/page', 1));
     $limit = 12;
     $series = $multimediaObject->getSeries();
     $urlPics = $picService->getRecommendedPics($series);
     $total = intval(ceil(count($urlPics) / $limit));
     $pics = $this->getPaginatedPics($urlPics, $limit, $page);
     return array('resource' => $multimediaObject, 'resource_name' => 'mms', 'pics' => $pics, 'page' => $page, 'total' => $total);
 }
예제 #8
0
 /**
  * Clone a multimedia object.
  *
  * @param  MultimediaObject $src
  * @return MultimediaObject
  */
 public function cloneMultimediaObject(MultimediaObject $src)
 {
     $new = new MultimediaObject();
     $new->setI18nTitle($src->getI18nTitle());
     $new->setI18nSubtitle($src->getI18nSubtitle());
     $new->setI18nDescription($src->getI18nDescription());
     $new->setI18nLine2($src->getI18nLine2());
     $new->setI18nKeyword($src->getI18nKeyword());
     $new->setCopyright($src->getCopyright());
     $new->setLicense($src->getLicense());
     // NOTE: #7408 Specify which properties are clonable
     $new->setProperty("subseries", $src->getProperty("subseries"));
     $new->setProperty("subseriestitle", $src->getProperty("subseriestitle"));
     $new->setProperty("clonedfrom", $src->getId());
     foreach ($src->getTags() as $tag) {
         $tagAdded = $this->tagService->addTagToMultimediaObject($new, $tag->getId(), false);
     }
     foreach ($src->getRoles() as $embeddedRole) {
         foreach ($embeddedRole->getPeople() as $embeddedPerson) {
             $new->addPersonWithRole($embeddedPerson, $embeddedRole);
         }
     }
     $new->setSeries($src->getSeries());
     if ($broadcast = $src->getBroadcast()) {
         $new->setBroadcast($broadcast);
         $this->dm->persist($broadcast);
     }
     $new->setPublicDate($src->getPublicDate());
     $new->setRecordDate($src->getRecordDate());
     $new->setStatus(MultimediaObject::STATUS_BLOQ);
     $this->dm->persist($new);
     $this->dm->flush();
     return $new;
 }
 public function addMultimediaObject(MultimediaObject $multimediaObject)
 {
     $this->addSeries($multimediaObject->getSeries());
     $this->add($multimediaObject->getTitle(), "pumukit_webtv_multimediaobject_index", array("id" => $multimediaObject->getId()));
 }