예제 #1
0
 /**
  * addFlavorConvertJob adds a single flavor conversion 
  * 
  * @param FileSyncKey $srcSyncKey
  * @param flavorParamsOutput $flavor
  * @param int $flavorAssetId
  * @param int $conversionProfileId
  * @param int $mediaInfoId
  * @param BatchJob $parentJob
  * @param int $lastEngineType  
  * @param bool $sameRoot
  * @return BatchJob 
  */
 public static function addFlavorConvertJob(array $srcSyncKeys, flavorParamsOutput $flavor, $flavorAssetId, $conversionProfileId = null, $mediaInfoId = null, BatchJob $parentJob = null, $lastEngineType = null, $sameRoot = true, $priority = 0)
 {
     KalturaLog::debug('Add convert job for [' . $flavorAssetId . ']');
     $flavorAsset = assetPeer::retrieveById($flavorAssetId);
     if (!$flavorAsset) {
         KalturaLog::err("No flavor asset found for id [{$flavorAssetId}]");
         return null;
     }
     $partner = PartnerPeer::retrieveByPK($flavorAsset->getPartnerId());
     $srcFileSyncs = array();
     $waitForImportComplete = false;
     foreach ($srcSyncKeys as $srcSyncKey) {
         $srcFileSyncDescriptor = new kSourceFileSyncDescriptor();
         $addImportJob = false;
         $fileSync = self::getFileSyncForKey($srcSyncKey, $flavor, $flavorAsset, $partner, $addImportJob);
         if (!$fileSync) {
             return null;
         }
         $srcFlavorAsset = assetPeer::retrieveById($srcSyncKey->getObjectId());
         if ($addImportJob) {
             KalturaLog::debug("Creates import job for remote file sync");
             $flavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_WAIT_FOR_CONVERT);
             $flavorAsset->setDescription("Source file sync is importing: {$srcSyncKey}");
             $flavorAsset->save();
             $url = $fileSync->getExternalUrl($flavorAsset->getEntryId());
             kJobsManager::addImportJob($parentJob, $flavorAsset->getEntryId(), $partner->getId(), $url, $srcFlavorAsset, null, null, true);
             $waitForImportComplete = true;
         } else {
             if ($flavor->getSourceRemoteStorageProfileId() == StorageProfile::STORAGE_KALTURA_DC) {
                 if ($fileSync->getFileType() != FileSync::FILE_SYNC_FILE_TYPE_URL) {
                     $srcFileSyncDescriptor->setFileSyncLocalPath($fileSync->getFullPath());
                 }
             } else {
                 $srcFileSyncDescriptor->setFileSyncLocalPath($fileSync->getFilePath());
             }
             $srcFileSyncDescriptor->setFileSyncRemoteUrl($fileSync->getExternalUrl($flavorAsset->getEntryId()));
             $srcFileSyncDescriptor->setAssetId($srcSyncKey->getObjectId());
             $srcFileSyncDescriptor->setAssetParamsId($srcFlavorAsset->getFlavorParamsId());
             $srcFileSyncDescriptor->setFileSyncObjectSubType($srcSyncKey->getObjectSubType());
             $srcFileSyncs[] = $srcFileSyncDescriptor;
         }
     }
     if ($waitForImportComplete) {
         return;
     }
     // creates convert data
     $convertData = new kConvertJobData();
     $convertData->setSrcFileSyncs($srcFileSyncs);
     $convertData->setMediaInfoId($mediaInfoId);
     $convertData->setFlavorParamsOutputId($flavor->getId());
     $convertData->setFlavorAssetId($flavorAssetId);
     $convertData->setConversionProfileId($conversionProfileId);
     $convertData->setPriority($priority);
     $dbCurrentConversionEngine = self::getNextConversionEngine($flavor, $parentJob, $lastEngineType, $convertData);
     if (!$dbCurrentConversionEngine) {
         return null;
     }
     // creats a child convert job
     if ($parentJob) {
         $dbConvertFlavorJob = $parentJob->createChild(BatchJobType::CONVERT, $dbCurrentConversionEngine, $sameRoot);
         KalturaLog::log("Created from parent job");
     } else {
         $dbConvertFlavorJob = new BatchJob();
         $dbConvertFlavorJob->setPartnerId($flavor->getPartnerId());
         $dbConvertFlavorJob->setJobType(BatchJobType::CONVERT);
         $dbConvertFlavorJob->setJobSubType($dbCurrentConversionEngine);
         KalturaLog::log("Created from flavor convert job");
     }
     $dbConvertFlavorJob->setEntryId($flavor->getEntryId());
     KalturaLog::log("Job created with entry id [" . $dbConvertFlavorJob->getEntryId() . "]");
     $mediaInfo = mediaInfoPeer::retrieveByPK($mediaInfoId);
     if ($mediaInfo === NULL) {
         // in case we don't know the estimatted info, we will set it to a big number.
         $estimatedEffort = kJobData::MAX_ESTIMATED_EFFORT;
     } else {
         $estimatedEffort = max($mediaInfo->getVideoDuration(), $mediaInfo->getAudioDuration(), $mediaInfo->getContainerDuration());
     }
     $dbConvertFlavorJob->setObjectId($flavorAssetId);
     $dbConvertFlavorJob->setObjectType(BatchJobObjectType::ASSET);
     return kJobsManager::addJob($dbConvertFlavorJob, $convertData, BatchJobType::CONVERT, $dbCurrentConversionEngine);
 }