コード例 #1
0
ファイル: KDLProcessor.php プロジェクト: richhl/kalturaCE
 public function Generate(KDLMediaDataSet $mediaSet, KDLProfile $profile, array &$targetList)
 {
     if ($mediaSet != null && $mediaSet->IsDataSet()) {
         $rv = $this->Initialize($mediaSet);
         if ($rv == false) {
             /*
              * fix #9599 - handles rm files that fails to extract media info, but still playable by real player -
              * simulate video and audio elements, although no source mediainfo is provided
              */
             if ($this->_srcDataSet->_container && $this->_srcDataSet->_container->IsFormatOf(array("realmedia"))) {
                 $rmSrc = $this->_srcDataSet;
                 $rmSrc->_errors = array();
                 $rmSrc->_video = new KDLVideoData();
                 $rmSrc->_video->_id = $rmSrc->_video->_format = "realvideo";
                 $rmSrc->_audio = new KDLAudioData();
                 $rmSrc->_audio->_id = $rmSrc->_audio->_format = "realaudio";
                 $rmSrc->_warnings[KDLConstants::ContainerIndex][] = KDLWarnings::ToString(KDLWarnings::RealMediaMissingContent);
                 KalturaLog::log("An invalid source RealMedia file thatfails to provide valid mediaInfodata. Set up a flavor with 'default' params.");
             } else {
                 return false;
             }
         }
     }
     if ($profile == null) {
         return true;
     }
     $this->GenerateTargetFlavors($profile, $targetList);
     if (count($this->_srcDataSet->_errors) > 0) {
         return false;
     }
     return true;
 }
コード例 #2
0
 public function GenerateTarget(KDLMediaDataSet $source)
 {
     if ($source == null || !$source->IsDataSet() || $this->_flags & self::ForceCommandLineFlagBit) {
         KalturaLog::log("FORCE " . $this->_flags);
         $target = clone $this;
         if ($target->_video && ($target->_video->_gop === null || $target->_video->_gop == 0)) {
             $target->_video->_gop = KDLConstants::DefaultGOP;
         }
         $target->_warnings[KDLConstants::ContainerIndex][] = KDLWarnings::ToString(KDLWarnings::ForceCommandline);
     } else {
         $target = $this->generateTargetFlavor($source);
         if ($target->_video == "" && $target->_audio == "" && $target->_image == "") {
             // "Invalid File - No media content";
             $target->_errors[KDLConstants::ContainerIndex][] = KDLErrors::ToString(KDLErrors::NoValidMediaStream);
         }
         if ($target->validateTranscoders($source, $target->_transcoders) == false) {
             // "No valid transcoder";
             $target->_errors[KDLConstants::ContainerIndex][] = KDLErrors::ToString(KDLErrors::NoValidTranscoders);
         }
         //kLog::log("==>\n".print_r($target->_transcoders,true));
     }
     $this->generateCommandLines($target, $target->_transcoders);
     return $target;
 }
コード例 #3
0
ファイル: KDLProcessor.php プロジェクト: DBezemer/server
 public function GenerateIntermediateSource(KDLMediaDataSet $mediaSet, KDLProfile $profile = null)
 {
     /*
      * Check minimal source validity, else get out
      */
     if ($mediaSet == null || !$mediaSet->IsDataSet()) {
         return null;
     }
     /*
      * Source is invalid if Initialize() fails, unless it is an ARF
      */
     if (!(isset($mediaSet->_container) && $mediaSet->_container->_format == "arf" || $mediaSet->Initialize())) {
         return null;
     }
     $interSrcProfile = null;
     $forceAudioStream = false;
     /*
      * For ARF ==> webex plugin 
      */
     if (isset($mediaSet->_container) && $mediaSet->_container->IsFormatOf(array("arf"))) {
         $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::COPY, KDLVideoTarget::WVC1A, 4000, 1080, KDLAudioTarget::WMA, 128, 0, 1, "webexNbrplayer.WebexNbrplayer");
         /*
          * Following creates 3 retries for Webex conversions.
          * Required for the sake of 'garbled audio' issue.
          */
         $interSrcFlavor = $interSrcProfile->_flavors[0];
         $interSrcFlavor->_transcoders[] = $interSrcFlavor->_transcoders[0];
         $interSrcFlavor->_transcoders[] = $interSrcFlavor->_transcoders[0];
     } else {
         if (isset($mediaSet->_video) && $mediaSet->_video->IsFormatOf(array("gotomeeting", "g2m3", "gotomeeting3"))) {
             $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::WMV, KDLVideoTarget::WVC1A, 4000, 1080, KDLAudioTarget::WMA, 128, 0, 1, "expressionEncoder.ExpressionEncoder");
         } else {
             if (isset($mediaSet->_video) && ($mediaSet->_container->IsFormatOf(array("qt", "mov")) && $mediaSet->_video->IsFormatOf(array("wmv", "wmv2", "wmv3", "wvc1", "vc1", "vc-1")) && $mediaSet->_audio->IsFormatOf(array("wma", "wma2", "wma3", "windows media audio", "windows media audio 10 professional")))) {
                 $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 1, "quickTimeTools.QuickTimeTools");
             } else {
                 if (isset($mediaSet->_video) && $mediaSet->_video->IsFormatOf(array("xdvd", "xdva", "xdvb", "xdvc", "xdve", "xdvf", "xdv4", "hdv2"))) {
                     foreach ($profile->_flavors as $flvr) {
                         foreach ($flvr->_transcoders as $trans) {
                             if ($trans->_id == KDLTranscoders::ON2) {
                                 $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::FFMPEG);
                                 break;
                             }
                         }
                         if (isset($interSrcProfile)) {
                             break;
                         }
                     }
                 } else {
                     if (isset($mediaSet->_video) && !isset($mediaSet->_audio)) {
                         foreach ($profile->_flavors as $flvr) {
                             if (preg_match('/widevine/', strtolower($flvr->_tags), $matches)) {
                                 $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::FFMPEG);
                                 $forceAudioStream = true;
                                 break;
                             }
                         }
                     } else {
                         if (isset($mediaSet->_video) && $mediaSet->_video->IsFormatOf(array("wvc1", "wmv3")) && isset($mediaSet->_contentStreams) && isset($mediaSet->_contentStreams->video) && count($mediaSet->_contentStreams->video) > 0 && isset($mediaSet->_contentStreams->video[0]->progressiveSegmented) && $mediaSet->_contentStreams->video[0]->progressiveSegmented == true) {
                             foreach ($profile->_flavors as $flvr) {
                                 foreach ($flvr->_transcoders as $trans) {
                                     if ($trans->_id == KDLTranscoders::FFMPEG) {
                                         $interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, KDLVideoTarget::H264H, 4000, 1080, KDLAudioTarget::AAC, 128, 0, 0, KDLTranscoders::MENCODER);
                                         break;
                                     }
                                 }
                                 if (isset($interSrcProfile)) {
                                     break;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     /*
     else if($mediaSet->_video->IsFormatOf(array("tscc","tsc2"))) {
     	$interSrcProfile = $this->setProfileWithIntermediateSource(KDLContainerTarget::MP4, 
     			KDLVideoTarget::H264H, 4000, 1080, 
     			KDLAudioTarget::AAC, 128, 0, 
     			0, KDLTranscoders::FFMPEG);
     }
     */
     /*
      * If no "inter-src" cases ==> get out
      */
     if (!isset($interSrcProfile)) {
         return null;
     }
     KalturaLog::log("Automatic Intermediate Source will be generated");
     $targetList = array();
     $this->Generate($mediaSet, $interSrcProfile, $targetList);
     if (count($targetList) == 0) {
         return null;
     }
     if (!isset($targetList[0]->_video->_width)) {
         $targetList[0]->_video->_width = 0;
     }
     //Add silent track to video
     if ($forceAudioStream) {
         //When duration is set on the source we will use it instead of the -shortest to avoid large difference between video and audio difference
         if ($this->_srcDataSet->_video->_duration) {
             $useToAddSilence = "-t " . $this->_srcDataSet->_video->_duration / 1000;
         } else {
             $useToAddSilence = "-shortest";
         }
         $cmd = $targetList[0]->_transcoders[0]->_cmd;
         $cmd = str_replace("__inFileName__", "__inFileName__ -ar 44100 -ac 2 -f s16le -i /dev/zero " . $useToAddSilence, $cmd);
         $cmd = str_replace("-an", "-b:a 64k", $cmd);
         $targetList[0]->_transcoders[0]->_cmd = $cmd;
     }
     return $targetList[0];
 }