/**
  * batch decideProfileConvert is the decision layer for a conversion profile
  * 
  * @param BatchJob $parentJob
  * @param BatchJob $convertProfileJob
  * @param int $mediaInfoId  
  * @return bool true if created all required conversions
  */
 public static function decideProfileConvert(BatchJob $parentJob, BatchJob $convertProfileJob, $mediaInfoId = null)
 {
     KalturaLog::log("Conversion decision layer used for entry [" . $parentJob->getEntryId() . "]");
     $convertProfileData = $convertProfileJob->getData();
     $entryId = $convertProfileJob->getEntryId();
     $entry = $convertProfileJob->getEntry();
     if (!$entry) {
         throw new APIException(APIErrors::INVALID_ENTRY, $convertProfileJob, $entryId);
     }
     $profile = myPartnerUtils::getConversionProfile2ForEntry($entryId);
     if (!$profile) {
         $errDescription = "Conversion profile for entryId [{$entryId}] not found";
         $convertProfileJob = kJobsManager::failBatchJob($convertProfileJob, $errDescription, BatchJobType::CONVERT_PROFILE);
         kBatchManager::updateEntry($convertProfileJob, entryStatus::ERROR_CONVERTING);
         KalturaLog::err("No flavors created: {$errDescription}");
         return false;
     }
     $originalFlavorAsset = flavorAssetPeer::retrieveOriginalByEntryId($entryId);
     if (is_null($originalFlavorAsset)) {
         $errDescription = 'Original flavor asset not found';
         KalturaLog::err($errDescription);
         $convertProfileJob = kJobsManager::failBatchJob($convertProfileJob, $errDescription, BatchJobType::CONVERT_PROFILE);
         kBatchManager::updateEntry($convertProfileJob, entryStatus::ERROR_CONVERTING);
         return false;
     }
     $shouldConvert = true;
     // gets the list of flavor params of the conversion profile
     $list = flavorParamsConversionProfilePeer::retrieveByConversionProfile($profile->getId());
     if (!count($list)) {
         $errDescription = "No flavors match the profile id [{$profile->getId()}]";
         KalturaLog::err($errDescription);
         $convertProfileJob = kJobsManager::failBatchJob($convertProfileJob, $errDescription, BatchJobType::CONVERT_PROFILE);
         kBatchManager::updateEntry($convertProfileJob, entryStatus::ERROR_CONVERTING);
         $originalFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_DELETED);
         $originalFlavorAsset->setDeletedAt(time());
         $originalFlavorAsset->save();
         return false;
     }
     $mediaInfo = null;
     if ($mediaInfoId) {
         $mediaInfo = mediaInfoPeer::retrieveByPK($mediaInfoId);
     }
     if ($profile->getCreationMode() == ConversionProfile2::CONVERSION_PROFILE_2_CREATION_MODE_AUTOMATIC_BYPASS_FLV) {
         KalturaLog::log("The profile created from old conversion profile with bypass flv");
         $isFlv = false;
         if ($mediaInfo) {
             $isFlv = KDLWrap::CDLIsFLV($mediaInfo);
         }
         if ($isFlv && $originalFlavorAsset->hasTag(flavorParams::TAG_MBR)) {
             KalturaLog::log("The source is mbr and flv, conversion will be bypassed");
             $shouldConvert = false;
         } else {
             KalturaLog::log("The source is NOT mbr or flv, conversion will NOT be bypassed");
         }
     }
     // gets the ids of the flavor params
     $flavorsIds = array();
     $conversionProfileFlavorParams = array();
     foreach ($list as $flavorParamsConversionProfile) {
         $flavorsId = $flavorParamsConversionProfile->getFlavorParamsId();
         $flavorsIds[] = $flavorsId;
         $conversionProfileFlavorParams[$flavorsId] = $flavorParamsConversionProfile;
     }
     $dynamicFlavorAttributes = $entry->getDynamicFlavorAttributes();
     $sourceFlavor = null;
     $flavors = flavorParamsPeer::retrieveByPKs($flavorsIds);
     foreach ($flavors as $index => $flavor) {
         if (isset($dynamicFlavorAttributes[$flavor->getId()])) {
             foreach ($dynamicFlavorAttributes[$flavor->getId()] as $attributeName => $attributeValue) {
                 $flavor->setDynamicAttribute($attributeName, $attributeValue);
             }
         }
         if ($flavor->hasTag(flavorParams::TAG_SOURCE)) {
             $sourceFlavor = $flavor;
             unset($flavors[$index]);
         }
     }
     KalturaLog::log(count($flavors) . " destination flavors found for this profile[" . $profile->getId() . "]");
     if (!$sourceFlavor) {
         KalturaLog::log("Source flavor params not found");
         $originalFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_TEMP);
         $originalFlavorAsset->save();
     } elseif ($shouldConvert) {
         KalturaLog::log("Source flavor params [" . $sourceFlavor->getId() . "] found");
         $originalFlavorAsset->setFlavorParamsId($sourceFlavor->getId());
         if ($sourceFlavor->getOperators() || $sourceFlavor->getConversionEngines()) {
             KalturaLog::log("Source flavor asset requires conversion");
             $srcSyncKey = $originalFlavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
             $errDescription = null;
             $sourceFlavorOutput = self::validateFlavorAndMediaInfo($sourceFlavor, $mediaInfo, $errDescription);
             // save flavor params
             $sourceFlavorOutput->setPartnerId($sourceFlavorOutput->getPartnerId());
             $sourceFlavorOutput->setEntryId($entryId);
             $sourceFlavorOutput->setFlavorAssetId($originalFlavorAsset->getId());
             $sourceFlavorOutput->setFlavorAssetVersion($originalFlavorAsset->getVersion());
             $sourceFlavorOutput->save();
             if ($errDescription) {
                 $originalFlavorAsset->setDescription($originalFlavorAsset->getDescription() . "\n{$errDescription}");
             }
             $errDescription = kBusinessConvertDL::parseFlavorDescription($sourceFlavorOutput);
             if ($errDescription) {
                 $originalFlavorAsset->setDescription($originalFlavorAsset->getDescription() . "\n{$errDescription}");
             }
             // decided by the business logic layer
             if ($sourceFlavorOutput->_create_anyway) {
                 KalturaLog::log("Flavor [" . $sourceFlavorOutput->getFlavorParamsId() . "] selected to be created anyway");
             } else {
                 if (!$sourceFlavorOutput->IsValid()) {
                     KalturaLog::log("Flavor [" . $sourceFlavorOutput->getFlavorParamsId() . "] is invalid");
                     $originalFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_ERROR);
                     $originalFlavorAsset->save();
                     $errDescription = "Source flavor could not be converted";
                     KalturaLog::err($errDescription);
                     $convertProfileJob = kJobsManager::failBatchJob($convertProfileJob, $errDescription, BatchJobType::CONVERT_PROFILE);
                     kBatchManager::updateEntry($convertProfileJob, entryStatus::ERROR_CONVERTING);
                     return false;
                 }
                 if ($sourceFlavorOutput->_force) {
                     KalturaLog::log("Flavor [" . $sourceFlavorOutput->getFlavorParamsId() . "] is forced");
                 } elseif ($sourceFlavorOutput->_isNonComply) {
                     KalturaLog::log("Flavor [" . $sourceFlavorOutput->getFlavorParamsId() . "] is none-comply");
                 } else {
                     KalturaLog::log("Flavor [" . $sourceFlavorOutput->getFlavorParamsId() . "] is valid");
                 }
             }
             $originalFlavorAsset->incrementVersion();
             $originalFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_QUEUED);
             $originalFlavorAsset->addTags($sourceFlavor->getTagsArray());
             $originalFlavorAsset->setFileExt($sourceFlavorOutput->getFileExt());
             $originalFlavorAsset->save();
             // save flavor params
             $sourceFlavorOutput->setFlavorAssetVersion($originalFlavorAsset->getVersion());
             $sourceFlavorOutput->save();
             kJobsManager::addFlavorConvertJob($srcSyncKey, $sourceFlavorOutput, $originalFlavorAsset->getId(), $mediaInfoId, $parentJob);
             return false;
         }
         $originalFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_READY);
         $originalFlavorAsset->save();
         $entry->addFlavorParamsId($sourceFlavor->getId());
         $entry->save();
         kFlowHelper::generateThumbnailsFromFlavor($parentJob->getEntryId(), $parentJob);
     }
     if (!count($flavors)) {
         $shouldConvert = false;
     }
     if (!$shouldConvert) {
         self::bypassConversion($originalFlavorAsset, $entry, $convertProfileJob);
         return true;
     }
     return self::decideProfileFlavorsConvert($parentJob, $convertProfileJob, $flavors, $conversionProfileFlavorParams, $mediaInfo);
 }
Example #2
0
 /**
  * batch addMediaInfo adds a media info and updates the flavor asset 
  * 
  * @param mediaInfo $mediaInfoDb  
  * @return mediaInfo 
  */
 public static function addMediaInfo(mediaInfo $mediaInfoDb)
 {
     $mediaInfoDb->save();
     KalturaLog::log("Added media info [" . $mediaInfoDb->getId() . "] for flavor asset [" . $mediaInfoDb->getFlavorAssetId() . "]");
     if (!$mediaInfoDb->getFlavorAssetId()) {
         return $mediaInfoDb;
     }
     $flavorAsset = assetPeer::retrieveById($mediaInfoDb->getFlavorAssetId());
     if (!$flavorAsset) {
         return $mediaInfoDb;
     }
     if ($flavorAsset->getIsOriginal()) {
         KalturaLog::log("Media info is for the original flavor asset");
         $tags = null;
         $profile = myPartnerUtils::getConversionProfile2ForEntry($flavorAsset->getEntryId());
         if ($profile) {
             $tags = $profile->getInputTagsMap();
         }
         KalturaLog::log("Flavor asset tags from profile [{$tags}]");
         if (!is_null($tags)) {
             $tagsArray = explode(',', $tags);
             // support for old migrated profiles
             if ($profile->getCreationMode() == conversionProfile2::CONVERSION_PROFILE_2_CREATION_MODE_AUTOMATIC_BYPASS_FLV) {
                 if (!KDLWrap::CDLIsFLV($mediaInfoDb)) {
                     $key = array_search(flavorParams::TAG_MBR, $tagsArray);
                     if ($key !== false) {
                         unset($tagsArray[$key]);
                     }
                 }
             }
             $finalTagsArray = KDLWrap::CDLMediaInfo2Tags($mediaInfoDb, $tagsArray);
             $finalTags = join(',', array_unique($finalTagsArray));
             KalturaLog::log("Flavor asset tags from KDL [{$finalTags}]");
             //KalturaLog::log("Flavor asset tags [".print_r($flavorAsset->setTags(),1)."]");
             $flavorAsset->addTags($finalTagsArray);
         }
     } else {
         KalturaLog::log("Media info is for the destination flavor asset");
         $tags = null;
         $flavorParams = assetParamsPeer::retrieveByPK($flavorAsset->getFlavorParamsId());
         if ($flavorParams) {
             $tags = $flavorParams->getTags();
         }
         KalturaLog::log("Flavor asset tags from flavor params [{$tags}]");
         if (!is_null($tags)) {
             $tagsArray = explode(',', $tags);
             $assetTagsArray = $flavorAsset->getTagsArray();
             foreach ($assetTagsArray as $tag) {
                 $tagsArray[] = $tag;
             }
             $maxMbrBitrate = 8000;
             if (kConf::hasParam('max_mbr_flavor_bitrate')) {
                 $maxMbrBitrate = kConf::get('max_mbr_flavor_bitrate');
             }
             if ($mediaInfoDb->getContainerBitRate() >= $maxMbrBitrate) {
                 $tagsArray = array_unique($tagsArray);
                 $key = array_search(flavorParams::TAG_MBR, $tagsArray);
                 if ($key !== false) {
                     unset($tagsArray[$key]);
                 }
             }
             $finalTagsArray = $tagsArray;
             //				bypass, KDLWrap::CDLMediaInfo2Tags doesn't support destination flavors and mobile tags
             //				$finalTagsArray = KDLWrap::CDLMediaInfo2Tags($mediaInfoDb, $tagsArray);
             $finalTags = join(',', array_unique($finalTagsArray));
             KalturaLog::log("Flavor asset tags from KDL [{$finalTags}]");
             $flavorAsset->setTags($finalTags);
         }
     }
     KalturaLog::log("KDLWrap::ConvertMediainfoCdl2FlavorAsset(" . $mediaInfoDb->getId() . ", " . $flavorAsset->getId() . ");");
     KDLWrap::ConvertMediainfoCdl2FlavorAsset($mediaInfoDb, $flavorAsset);
     $flavorAsset->save();
     //		if(!$flavorAsset->hasTag(flavorParams::TAG_MBR))
     //			return $mediaInfoDb;
     $entry = entryPeer::retrieveByPK($flavorAsset->getEntryId());
     if (!$entry) {
         return $mediaInfoDb;
     }
     $contentDuration = $mediaInfoDb->getContainerDuration();
     if (!$contentDuration) {
         $contentDuration = $mediaInfoDb->getVideoDuration();
         if (!$contentDuration) {
             $contentDuration = $mediaInfoDb->getAudioDuration();
         }
     }
     if ($contentDuration && $entry->getCalculateDuration()) {
         $entry->setLengthInMsecs($contentDuration);
     }
     if ($mediaInfoDb->getVideoWidth() && $mediaInfoDb->getVideoHeight()) {
         $entry->setDimensionsIfBigger($mediaInfoDb->getVideoWidth(), $mediaInfoDb->getVideoHeight());
     }
     $entry->save();
     return $mediaInfoDb;
 }
 private static function shouldConvertProfileFlavors(conversionProfile2 $profile, mediaInfo $mediaInfo = null, flavorAsset $originalFlavorAsset)
 {
     $shouldConvert = true;
     if ($profile->getCreationMode() == conversionProfile2::CONVERSION_PROFILE_2_CREATION_MODE_AUTOMATIC_BYPASS_FLV) {
         KalturaLog::log("The profile created from old conversion profile with bypass flv");
         $isFlv = false;
         if ($mediaInfo) {
             $isFlv = KDLWrap::CDLIsFLV($mediaInfo);
         }
         if ($isFlv && $originalFlavorAsset->hasTag(flavorParams::TAG_MBR)) {
             KalturaLog::log("The source is mbr and flv, conversion will be bypassed");
             $shouldConvert = false;
         } else {
             KalturaLog::log("The source is NOT mbr or flv, conversion will NOT be bypassed");
         }
     }
     return $shouldConvert;
 }
Example #4
0
 /**
  * batch addMediaInfo adds a media info and updates the flavor asset 
  * 
  * @param mediaInfo $mediaInfoDb  
  * @return mediaInfo 
  */
 public static function addMediaInfo(mediaInfo $mediaInfoDb)
 {
     $mediaInfoDb->save();
     KalturaLog::log("Added media info [" . $mediaInfoDb->getId() . "] for flavor asset [" . $mediaInfoDb->getFlavorAssetId() . "]");
     if (!$mediaInfoDb->getFlavorAssetId()) {
         return $mediaInfoDb;
     }
     $flavorAsset = flavorAssetPeer::retrieveById($mediaInfoDb->getFlavorAssetId());
     if (!$flavorAsset) {
         return $mediaInfoDb;
     }
     if ($flavorAsset->getIsOriginal()) {
         KalturaLog::log("Media info is for the original flavor asset");
         $tags = null;
         $profile = myPartnerUtils::getConversionProfile2ForEntry($flavorAsset->getEntryId());
         if ($profile) {
             $tags = $profile->getInputTagsMap();
         }
         KalturaLog::log("Flavor asset tags from profile [{$tags}]");
         if (!is_null($tags)) {
             $tagsArray = explode(',', $tags);
             // support for old migrated profiles
             if ($profile->getCreationMode() == conversionProfile2::CONVERSION_PROFILE_2_CREATION_MODE_AUTOMATIC_BYPASS_FLV) {
                 if (!KDLWrap::CDLIsFLV($mediaInfoDb)) {
                     $key = array_search(flavorParams::TAG_MBR, $tagsArray);
                     unset($tagsArray[$key]);
                 }
             }
             $finalTagsArray = KDLWrap::CDLMediaInfo2Tags($mediaInfoDb, $tagsArray);
             $finalTags = join(',', $finalTagsArray);
             KalturaLog::log("Flavor asset tags from KDL [{$finalTags}]");
             $flavorAsset->setTags($finalTags);
         }
     }
     KalturaLog::log("KDLWrap::ConvertMediainfoCdl2FlavorAsset(" . $mediaInfoDb->getId() . ", " . $flavorAsset->getId() . ");");
     KDLWrap::ConvertMediainfoCdl2FlavorAsset($mediaInfoDb, $flavorAsset);
     $flavorAsset->save();
     //		if(!$flavorAsset->hasTag(flavorParams::TAG_MBR))
     //			return $mediaInfoDb;
     $entry = entryPeer::retrieveByPK($flavorAsset->getEntryId());
     if (!$entry) {
         return $mediaInfoDb;
     }
     $contentDuration = $mediaInfoDb->getContainerDuration();
     if (!$contentDuration) {
         $contentDuration = $mediaInfoDb->getVideoDuration();
         if (!$contentDuration) {
             $contentDuration = $mediaInfoDb->getAudioDuration();
         }
     }
     $entry->setLengthInMsecs($contentDuration);
     if ($mediaInfoDb->getVideoWidth() && $mediaInfoDb->getVideoHeight()) {
         $entry->setDimensions($mediaInfoDb->getVideoWidth(), $mediaInfoDb->getVideoHeight());
     }
     $entry->save();
     return $mediaInfoDb;
 }