Ejemplo n.º 1
0
 public function GenerateCommandLine(KDLFlavor $design, KDLFlavor $target, $extra = null)
 {
     $action = "hint";
     $paramsMap = KDLUtils::parseParamStr2Map($extra);
     if (isset($paramsMap)) {
         if (array_key_exists('action', $paramsMap)) {
             $action = $paramsMap['action'];
         }
     }
     $cmdStr = null;
     switch ($action) {
         case self::ACTION_EMBED_SUBTITLES:
             $cmdStr = $this->generateEmbedSubtitlesCommandLine($design, $target, $paramsMap);
             break;
         case self::ACTION_HINT:
         default:
             $cmdStr = $this->generateHintCommandLine($design, $target, $paramsMap);
             break;
     }
     return $cmdStr;
 }
Ejemplo n.º 2
0
 public function GenerateCommandLine(KDLFlavor $design, KDLFlavor $target, $extra = null)
 {
     //segmenter 0_3eq4pxgw_0_j5b7ubqa_1.mpeg 2 zzz/segment zzz/playlist.m3u8 ./
     // out_dummyk:/opt/kaltura/tmp/convert/convert_0_6olnx72l_4a32a//out_dummy-1.ts
     /*
      * The segment duration can be evaluated from the 'segmentDuration' field in the operator->extra
      * or set to the gop value if such values are available.
      * Otherwise set to 10.
      */
     $segmentDur = 10;
     $paramsMap = KDLUtils::parseParamStr2Map($extra);
     if (isset($paramsMap) && array_key_exists('segmentDuration', $paramsMap)) {
         $auxDur = $paramsMap['segmentDuration'];
         if ($auxDur > 0) {
             $segmentDur = $auxDur;
         }
     }
     /*		else
     		if(isset($target->_video) 
     		&&(isset($target->_video->_gop) && $target->_video->_gop>0)
     		&&(isset($target->_video->_frameRate) && $target->_video->_frameRate>0)){
     			$auxDur = round($target->_video->_gop/$target->_video->_frameRate);
     			if($auxDur>0)
     				$segmentDur=$auxDur;
     		}
     */
     $cmdStr = " " . KDLCmdlinePlaceholders::InFileName;
     $cmdStr .= " {$segmentDur}";
     //		$cmdStr .= " ".KDLCmdlinePlaceholders::OutFileName."/segment"; // output MPEG-TS file prefix
     //		$cmdStr .= " ".KDLCmdlinePlaceholders::OutFileName."/playlist.m3u8"; // output m3u8 index file
     //		$cmdStr .= "zzzz"; // http prefix
     $cmdStr .= " " . KDLCmdlinePlaceholders::OutFileName . "//segment";
     // output MPEG-TS file prefix
     $cmdStr .= " " . KDLCmdlinePlaceholders::OutFileName . "//playlist.m3u8";
     // output m3u8 index file
     $cmdStr .= " ---";
     // http prefix
     return $cmdStr;
 }
 public function operate(kOperator $operator = null, $inFilePath, $configFilePath = null)
 {
     KalturaLog::debug("operator==>" . print_r($operator, 1));
     $encodingTemplateId = null;
     $encodingTemplateName = null;
     $cloneAndUpadate = false;
     $srcPrefixWindows = null;
     $srcPrefixLinux = null;
     $trgPrefixWindows = null;
     // ---------------------------------
     // Evaluate and set various Inlet Armada session params
     if (KBatchBase::$taskConfig->params->InletStorageRootWindows) {
         $srcPrefixWindows = KBatchBase::$taskConfig->params->InletStorageRootWindows;
     }
     if (KBatchBase::$taskConfig->params->InletStorageRootLinux) {
         $srcPrefixLinux = KBatchBase::$taskConfig->params->InletStorageRootLinux;
     }
     if (KBatchBase::$taskConfig->params->InletTmpStorageWindows) {
         $trgPrefixWindows = KBatchBase::$taskConfig->params->InletTmpStorageWindows;
     }
     $url = KBatchBase::$taskConfig->params->InletArmadaUrl;
     $login = KBatchBase::$taskConfig->params->InletArmadaLogin;
     $passw = KBatchBase::$taskConfig->params->InletArmadaPassword;
     if (KBatchBase::$taskConfig->params->InletArmadaPriority) {
         $priority = KBatchBase::$taskConfig->params->InletArmadaPriority;
     } else {
         $priority = 5;
     }
     // ----------------------------------
     $inlet = new InletAPIWrap($url);
     KalturaLog::debug(print_r($inlet, 1));
     $rvObj = new XmlRpcData();
     $rv = $inlet->userLogon($login, $passw, $rvObj);
     if (!$rv) {
         throw new KOperationEngineException("Inlet failure: login, rv(" . print_r($rvObj, true) . ")");
     }
     KalturaLog::debug("userLogon - " . print_r($rvObj, 1));
     $paramsMap = KDLUtils::parseParamStr2Map($operator->extra);
     foreach ($paramsMap as $key => $param) {
         switch ($key) {
             case 'encodingTemplate':
             case 'encodingTemplateId':
                 $encodingTemplateId = $param;
                 break;
             case 'encodingTemplateName':
                 $encodingTemplateId = $this->lookForJobTemplateId($inlet, $param);
                 $encodingTemplateName = $param;
                 break;
             case 'priority':
                 $priority = $param;
                 break;
             case 'cloneAndUpadate':
                 $cloneAndUpadate = $param;
                 break;
             default:
                 break;
         }
     }
     // Adjust linux file path to Inlet Armada Windows path
     if (isset($srcPrefixWindows) && isset($srcPrefixLinux)) {
         $srcPrefixLinux = $this->addLastSlashInFolderPath($srcPrefixLinux, "/");
         $srcPrefixWindows = $this->addLastSlashInFolderPath($srcPrefixWindows, "\\");
         $srcFileWindows = str_replace($srcPrefixLinux, $srcPrefixWindows, $inFilePath);
     } else {
         $srcFileWindows = $inFilePath;
     }
     if (isset($trgPrefixWindows)) {
         $trgPrefixLinux = $this->addLastSlashInFolderPath(KBatchBase::$taskConfig->params->localTempPath, "/");
         $trgPrefixWindows = $this->addLastSlashInFolderPath($trgPrefixWindows, "\\");
         $outFileWindows = str_replace($trgPrefixLinux, $trgPrefixWindows, $this->outFilePath);
     } else {
         $outFileWindows = $this->outFilePath;
     }
     $rv = $inlet->jobAdd($encodingTemplateId, $srcFileWindows, $outFileWindows, $priority, $srcFileWindows, array(), "", $rvObj);
     if (!$rv) {
         throw new KOperationEngineException("Inlet failure: add job, rv(" . print_r($rvObj, 1) . ")");
     }
     KalturaLog::debug("jobAdd - encodingTemplate({$encodingTemplateId}), inFile({$srcFileWindows}), outFile({$outFileWindows}),rv-" . print_r($rvObj, 1));
     $jobId = $rvObj->job_id;
     $attemptCnt = 0;
     while ($jobId) {
         sleep(60);
         $rv = $inlet->jobList(array($jobId), $rvObj);
         if (!$rv) {
             throw new KOperationEngineException("Inlet failure: job list, rv(" . print_r($rvObj, 1) . ")");
         }
         switch ($rvObj->job_list[0]->job_state) {
             case InletArmadaJobStatus::CompletedSuccess:
                 $jobId = null;
                 break;
             case InletArmadaJobStatus::CompletedUnknown:
             case InletArmadaJobStatus::CompletedFailure:
                 throw new KOperationEngineException("Inlet failure: job, rv(" . print_r($rvObj, 1) . ")");
                 break;
         }
         if ($attemptCnt % 10 == 0) {
             KalturaLog::debug("waiting for job completion - " . print_r($rvObj, 1));
         }
         $attemptCnt++;
     }
     //KalturaLog::debug("XXX taskConfig=>".print_r(KBatchBase::$taskConfig,1));
     KalturaLog::debug("Job completed successfully - " . print_r($rvObj, 1));
     if ($trgPrefixWindows) {
         $trgPrefixLinux = $this->addLastSlashInFolderPath(KBatchBase::$taskConfig->params->sharedTempPath, "/");
         $outFileLinux = str_replace($trgPrefixWindows, $trgPrefixLinux, $rvObj->job_list[0]->job_output_file);
         //KalturaLog::debug("XXX str_replace($trgPrefixWindows, ".$trgPrefixLinux.", ".$rvObj->job_list[0]->job_output_file.")==>$outFileLinux");
     } else {
         $outFileLinux = $rvObj->job_list[0]->job_output_file;
     }
     if ($outFileLinux != $this->outFilePath) {
         KalturaLog::debug("copy({$outFileLinux}, " . $this->outFilePath . ")");
         kFile::moveFile($outFileLinux, $this->outFilePath, true);
         //copy($outFileLinux, $this->outFilePath);
     }
     return true;
 }
 public function UpdateTarget(KDLFlavor $target)
 {
     /*
      * Following code block is a 'dirty' short cut to overload the qt_tools 
      * target params to H264/AAC.
      * Other engines will not be effected.
      * The correct solution is to add additional param fields to engin's JSOn record 
      */
     $paramsMap = KDLUtils::parseParamStr2Map($this->_params);
     if (!isset($paramsMap)) {
         return;
     }
     foreach ($paramsMap as $key => $param) {
         if ($target->_video) {
             $mdObj = $target->_video;
             switch ($key) {
                 case 'video_codec':
                     $mdObj->_id = $param;
                     break;
                 case 'video_bitrate':
                     $mdObj->_bitRate = $param;
                     break;
                 case 'gop':
                     $mdObj->_gop = $param;
                     break;
                 case 'frame_rate':
                     $mdObj->_frameRate = $param;
                     break;
                 case 'width':
                     $mdObj->_width = $param;
                     break;
                 case 'height':
                     $mdObj->_height = $param;
                     break;
                 default:
                     break;
             }
         }
         if ($target->_audio) {
             $mdObj = $target->_audio;
             switch ($key) {
                 case 'audio_codec':
                     $mdObj->_id = $param;
                     break;
                 case 'audio_bitrate':
                     $mdObj->_bitRate = $param;
                     break;
                 case 'sample_rate':
                     $mdObj->_sampleRate = $param;
                     break;
                 case 'channels':
                     $mdObj->_channels = $param;
                     break;
                 default:
                     break;
             }
         }
         if ($target->_container) {
             $mdObj = $target->_container;
             switch ($key) {
                 case 'container_format':
                     $mdObj->_id = $param;
                     break;
                 default:
                     break;
             }
         }
     }
 }