/**
  * @param CaptionAsset $captionAsset
  * @param BatchJob $parentJob
  * @throws kCoreException FILE_NOT_FOUND
  * @return BatchJob
  */
 public function addParseCaptionAssetJob(CaptionAsset $captionAsset, BatchJob $parentJob = null)
 {
     $syncKey = $captionAsset->getSyncKey(asset::FILE_SYNC_ASSET_SUB_TYPE_ASSET);
     $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
     if (!$fileSync) {
         if (!PermissionPeer::isValidForPartner(CaptionPermissionName::IMPORT_REMOTE_CAPTION_FOR_INDEXING, $captionAsset->getPartnerId())) {
             throw new kCoreException("File sync not found: {$syncKey}", kCoreException::FILE_NOT_FOUND);
         }
         $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
         if (!$fileSync) {
             throw new kCoreException("File sync not found: {$syncKey}", kCoreException::FILE_NOT_FOUND);
         }
         $fullPath = myContentStorage::getFSUploadsPath() . '/' . $captionAsset->getId() . '.tmp';
         if (!kFile::downloadUrlToFile($fileSync->getExternalUrl($captionAsset->getEntryId()), $fullPath)) {
             throw new kCoreException("File sync not found: {$syncKey}", kCoreException::FILE_NOT_FOUND);
         }
         kFileSyncUtils::moveFromFile($fullPath, $syncKey, true, false, true);
     }
     $jobData = new kParseCaptionAssetJobData();
     $jobData->setCaptionAssetId($captionAsset->getId());
     $batchJob = null;
     if ($parentJob) {
         $batchJob = $parentJob->createChild();
     } else {
         $batchJob = new BatchJob();
         $batchJob->setEntryId($captionAsset->getEntryId());
         $batchJob->setPartnerId($captionAsset->getPartnerId());
     }
     return kJobsManager::addJob($batchJob, $jobData, CaptionSearchPlugin::getBatchJobTypeCoreValue(CaptionSearchBatchJobType::PARSE_CAPTION_ASSET));
 }
 /**
  * @param asset $asset
  * @param string $fileName
  * @param bool $forceProxy
  * @param int $version
  * @throws KalturaErrors::FILE_DOESNT_EXIST
  */
 protected function serveAsset(asset $asset, $fileName, $forceProxy = false, $version = null)
 {
     $syncKey = $asset->getSyncKey(asset::FILE_SYNC_ASSET_SUB_TYPE_ASSET, $version);
     $fileSync = null;
     $serveRemote = false;
     $partner = PartnerPeer::retrieveByPK($asset->getPartnerId());
     switch ($partner->getStorageServePriority()) {
         case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY:
             $serveRemote = true;
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
             if (!$fileSync || $fileSync->getStatus() != FileSync::FILE_SYNC_STATUS_READY) {
                 throw new KalturaAPIException(KalturaErrors::FILE_DOESNT_EXIST);
             }
             break;
         case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_FIRST:
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
             if ($fileSync && $fileSync->getStatus() == FileSync::FILE_SYNC_STATUS_READY) {
                 $serveRemote = true;
             }
             break;
         case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST:
             $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
             if ($fileSync) {
                 break;
             }
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
             if (!$fileSync || $fileSync->getStatus() != FileSync::FILE_SYNC_STATUS_READY) {
                 throw new KalturaAPIException(KalturaErrors::FILE_DOESNT_EXIST);
             }
             $serveRemote = true;
             break;
         case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY:
             $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
             if (!$fileSync) {
                 throw new KalturaAPIException(KalturaErrors::FILE_DOESNT_EXIST);
             }
             break;
     }
     if ($serveRemote && $fileSync) {
         header("Location: " . $fileSync->getExternalUrl($asset->getEntryId()));
         die;
     }
     return $this->serveFile($asset, asset::FILE_SYNC_ASSET_SUB_TYPE_ASSET, $fileName, $asset->getEntryId(), $forceProxy);
 }
 private static function getExternalStorageUrl(Partner $partner, asset $asset, FileSyncKey $key, $servePlayManifest = false, $playManifestClientTag = null, $storageId = null)
 {
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) {
         return null;
     }
     if (is_null($storageId) && $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) {
         if (kFileSyncUtils::getReadyInternalFileSyncForKey($key)) {
             // check if having file sync on kaltura dcs
             return null;
         }
     }
     $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key, $storageId);
     if (!$fileSync) {
         return null;
     }
     $storage = StorageProfilePeer::retrieveByPK($fileSync->getDc());
     if (!$storage) {
         return null;
     }
     if ($servePlayManifest) {
         // in case of an https request, if a delivery profile which supports https doesn't exist use an http cdn api host
         if (infraRequestUtils::getProtocol() == infraRequestUtils::PROTOCOL_HTTPS && DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($fileSync->getDc(), $asset->getEntryId(), PlaybackProtocol::HTTP, "https"))) {
             $url = requestUtils::getApiCdnHost();
         } else {
             $url = infraRequestUtils::PROTOCOL_HTTP . "://" . kConf::get("cdn_api_host");
         }
         $url .= $asset->getPlayManifestUrl($playManifestClientTag, $storageId);
     } else {
         $urlManager = DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($fileSync->getDc(), $asset->getEntryId()));
         if ($urlManager) {
             $dynamicAttrs = new DeliveryProfileDynamicAttributes();
             $dynamicAttrs->setFileExtension($asset->getFileExt());
             $dynamicAttrs->setStorageId($fileSync->getDc());
             $urlManager->setDynamicAttributes($dynamicAttrs);
             $url = ltrim($urlManager->getFileSyncUrl($fileSync), '/');
             if (strpos($url, "://") === false) {
                 $url = rtrim($urlManager->getUrl(), "/") . "/" . $url;
             }
         } else {
             KalturaLog::debug("Couldn't determine delivery profile for storage id");
             $url = null;
         }
     }
     return $url;
 }
Exemple #4
0
 public function getDownloadUrl($useCdn = false, $forceProxy = false, $preview = null, $fileName = null)
 {
     $syncKey = $this->getSyncKey(self::FILE_SYNC_ASSET_SUB_TYPE_ASSET);
     $fileSync = null;
     $serveRemote = false;
     $partner = PartnerPeer::retrieveByPK($this->getPartnerId());
     switch ($partner->getStorageServePriority()) {
         case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY:
             $serveRemote = true;
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
             if (!$fileSync || $fileSync->getStatus() != FileSync::FILE_SYNC_STATUS_READY) {
                 throw new kCoreException("File sync not found: {$syncKey}", kCoreException::FILE_NOT_FOUND);
             }
             break;
         case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_FIRST:
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
             if ($fileSync && $fileSync->getStatus() == FileSync::FILE_SYNC_STATUS_READY) {
                 $serveRemote = true;
                 break;
             }
         case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY:
             $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
             if (!$fileSync) {
                 throw new kCoreException("File sync not found: {$syncKey}", kCoreException::FILE_NOT_FOUND);
             }
             break;
         case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST:
             $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
             if ($fileSync) {
                 break;
             }
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
             if (!$fileSync || $fileSync->getStatus() != FileSync::FILE_SYNC_STATUS_READY) {
                 throw new kCoreException("File sync not found: {$syncKey}", kCoreException::FILE_NOT_FOUND);
             }
             $serveRemote = true;
             break;
     }
     if ($serveRemote && $fileSync) {
         $downloadUrl = $fileSync->getExternalUrl($this->getEntryId());
     } else {
         $downloadUrl = $this->getDownloadUrlWithExpiry(86400, $useCdn, $forceProxy, $preview);
     }
     $downloadUrl = $this->finalizeDownloadUrl($fileSync, $downloadUrl, $fileName, $serveRemote);
     return $downloadUrl;
 }
Exemple #5
0
 private static function getFileSyncForKey(FileSyncKey $srcSyncKey, flavorParamsOutput $flavor, asset $flavorAsset, Partner $partner, &$addImportJob)
 {
     $addImportJob = false;
     $isLocal = $flavor->getSourceRemoteStorageProfileId() == StorageProfile::STORAGE_KALTURA_DC;
     if ($isLocal) {
         list($fileSync, $local) = kFileSyncUtils::getReadyFileSyncForKey($srcSyncKey, true, false);
     } else {
         $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($srcSyncKey, $flavor->getSourceRemoteStorageProfileId());
     }
     if (!$fileSync) {
         kBatchManager::updateEntry($flavorAsset->getEntryId(), entryStatus::ERROR_CONVERTING);
         if ($isLocal) {
             $description = "Source file sync not found: {$srcSyncKey}";
         } else {
             $description = "Remote source file sync not found {$srcSyncKey}, storage profile id [" . $flavor->getSourceRemoteStorageProfileId() . "]";
         }
         $flavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_ERROR);
         $flavorAsset->setDescription($description);
         $flavorAsset->save();
         KalturaLog::err($description);
         return null;
     }
     if ($isLocal && !$local) {
         if ($fileSync->getFileType() == FileSync::FILE_SYNC_FILE_TYPE_URL && $partner && $partner->getImportRemoteSourceForConvert()) {
             $addImportJob = true;
         } else {
             throw new kCoreException("Source file not found for flavor conversion [{$flavorAsset->getId}()]", kCoreException::SOURCE_FILE_NOT_FOUND);
         }
     }
     return $fileSync;
 }
 protected function initSmilManifest($flavorAssets)
 {
     $key = $this->getFlavorKeyByTag($flavorAssets, assetParams::TAG_SMIL_MANIFEST, flavorAsset::FILE_SYNC_ASSET_SUB_TYPE_ASSET);
     if (!$key) {
         return false;
     }
     $localFileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($key);
     $remoteFileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key);
     if ($this->shouldUseLocalFlavors($localFileSync, $remoteFileSync)) {
         $this->deliveryAttributes->setStorageId(null);
         $this->deliveryAttributes->setManifestFileSync($localFileSync);
     } else {
         if ($remoteFileSync) {
             $this->deliveryAttributes->setStorageId($remoteFileSync->getDc());
         }
         $this->deliveryAttributes->setManifestFileSync($remoteFileSync);
     }
     return !is_null($this->deliveryAttributes->getManifestFileSync());
 }
 private function getExternalStorageUrl(Partner $partner, flavorAsset $flavorAsset, FileSyncKey $key)
 {
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) {
         return null;
     }
     if ($partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) {
         if (kFileSyncUtils::getReadyInternalFileSyncForKey($key)) {
             // check if having file sync on kaltura dcs
             return null;
         }
     }
     $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key);
     if (!$fileSync) {
         return null;
     }
     $storage = StorageProfilePeer::retrieveByPK($fileSync->getDc());
     if (!$storage) {
         return null;
     }
     if ($this->syndicationFeedDb->getServePlayManifest()) {
         $deliveryProfile = DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($storage->getId(), $flavorAsset->getEntryId(), PlaybackProtocol::HTTP, "https"));
         $clientTag = 'feed:' . $this->syndicationFeedDb->getId();
         if (is_null($deliveryProfile)) {
             $url = infraRequestUtils::PROTOCOL_HTTP . "://" . kConf::get("cdn_api_host");
         } else {
             $url = requestUtils::getApiCdnHost();
         }
         $url .= $flavorAsset->getPlayManifestUrl($clientTag, $storage->getId());
     } else {
         $dpda = new DeliveryProfileDynamicAttributes();
         $urlManager = DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($fileSync->getDc(), $flavorAsset->getEntryId()), null, $flavorAsset);
         $url = ltrim($urlManager->getFileSyncUrl($fileSync), '/');
         if (strpos($url, "://") === false) {
             $url = rtrim($urlManager->getUrl(), "/") . "/" . $url;
         }
     }
     return $url;
 }
 /**
  * @param FileSyncKey $key
  * @return bool
  */
 protected function shouldExport(FileSyncKey $key, StorageProfile $externalStorage)
 {
     KalturaLog::log(__METHOD__ . " - key [{$key}], externalStorage id[" . $externalStorage->getId() . "]");
     list($kalturaFileSync, $local) = kFileSyncUtils::getReadyFileSyncForKey($key, false, false);
     if (!$kalturaFileSync) {
         KalturaLog::log(__METHOD__ . " key [{$key}] not found localy");
         return false;
     }
     KalturaLog::log(__METHOD__ . " validating file size [" . $kalturaFileSync->getFileSize() . "] is between min [" . $externalStorage->getMinFileSize() . "] and max [" . $externalStorage->getMaxFileSize() . "]");
     if ($externalStorage->getMaxFileSize() && $kalturaFileSync->getFileSize() > $externalStorage->getMaxFileSize()) {
         KalturaLog::log(__METHOD__ . " key [{$key}] file too big");
         return false;
     }
     if ($externalStorage->getMinFileSize() && $kalturaFileSync->getFileSize() < $externalStorage->getMinFileSize()) {
         KalturaLog::log(__METHOD__ . " key [{$key}] file too small");
         return false;
     }
     $storageFileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key, $externalStorage->getId());
     if ($storageFileSync) {
         KalturaLog::log(__METHOD__ . " key [{$key}] already exported");
         return false;
     }
     return true;
 }
Exemple #9
0
 private static function addIsmLink(entry $entry, SimpleXMLElement $mrss)
 {
     if (self::$addedIsmUrl) {
         return;
     }
     self::$addedIsmUrl = true;
     $syncKey = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_ISM);
     $kalturaFileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
     $urlManager = DeliveryProfilePeer::getDeliveryProfile($entry->getId(), PlaybackProtocol::SILVER_LIGHT);
     if (!$urlManager) {
         return;
     }
     $urlManager->initDeliveryDynamicAttributes($kalturaFileSync);
     $partner = $entry->getPartner();
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) {
         if ($kalturaFileSync) {
             $urlPrefix = $urlManager->getUrl();
             $url = $urlManager->getFileSyncUrl($kalturaFileSync, false);
             $mrss->addChild('ismUrl', $urlPrefix . $url);
             return;
         }
     }
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) {
         return null;
     }
     $externalFileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
     if ($externalFileSync) {
         $urlManager = DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($externalFileSync->getDc(), $entry->getId(), PlaybackProtocol::SILVER_LIGHT));
         if (is_null($urlManager)) {
             return;
         }
         $url = $urlManager->getFileSyncUrl($externalFileSync, false);
         $urlPrefix = $urlManager->getUrl();
         $mrss->addChild('ismUrl', $urlPrefix . $url);
         return;
     }
     if ($partner->getStorageServePriority() != StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY) {
         if ($kalturaFileSync) {
             $url = $urlManager->getFileSyncUrl($kalturaFileSync, false);
             $mrss->addChild('ismUrl', $urlPrefix . $url);
             return;
         }
     }
 }
 private function getExternalStorageUrl(Partner $partner, flavorAsset $flavorAsset, FileSyncKey $key)
 {
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) {
         return null;
     }
     if ($partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) {
         if (kFileSyncUtils::getReadyInternalFileSyncForKey($key)) {
             // check if having file sync on kaltura dcs
             return null;
         }
     }
     $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key);
     if (!$fileSync) {
         return null;
     }
     $storage = StorageProfilePeer::retrieveByPK($fileSync->getDc());
     if (!$storage) {
         return null;
     }
     $urlManager = kUrlManager::getUrlManagerByStorageProfile($fileSync->getDc(), $flavorAsset->getEntryId());
     $urlManager->setFileExtension($flavorAsset->getFileExt());
     $url = $storage->getDeliveryHttpBaseUrl() . '/' . $urlManager->getFileSyncUrl($fileSync);
     return $url;
 }
 /**
  * delete all local file syncs for this asset
  *
  * @action deleteLocalContent
  * @param string $assetId
  * @validateUser asset::entry assetId edit
  * @throws KalturaAPIException
  */
 public function deleteLocalContentAction($assetId)
 {
     // Retrieve required
     $asset = assetPeer::retrieveById($assetId);
     if (is_null($asset)) {
         throw new KalturaAPIException(KalturaErrors::ASSET_ID_NOT_FOUND, $assetId);
     }
     $srcSyncKey = $asset->getSyncKey(asset::FILE_SYNC_ASSET_SUB_TYPE_ASSET);
     $externalFileSyncs = kFileSyncUtils::getReadyExternalFileSyncForKey($srcSyncKey);
     if (!$externalFileSyncs) {
         throw new KalturaAPIException(KalturaErrors::NO_EXTERNAL_CONTENT_EXISTS);
     }
     $fileSyncs = kFileSyncUtils::getReadyInternalFileSyncsForKey($srcSyncKey);
     foreach ($fileSyncs as $fileSync) {
         /* @var $fileSync FileSync*/
         $fileSync->setStatus(FileSync::FILE_SYNC_STATUS_DELETED);
         $fileSync->save();
     }
 }
 /**
  * addFlavorConvertJob adds a single flavor conversion 
  * 
  * @param FileSyncKey $srcSyncKey
  * @param flavorParamsOutput $flavor
  * @param int $flavorAssetId
  * @param int $mediaInfoId
  * @param BatchJob $parentJob
  * @param int $lastEngineType  
  * @param BatchJob $dbConvertFlavorJob
  * @return BatchJob 
  */
 public static function addFlavorConvertJob(FileSyncKey $srcSyncKey, flavorParamsOutput $flavor, $flavorAssetId, $mediaInfoId = null, BatchJob $parentJob = null, $lastEngineType = null, BatchJob $dbConvertFlavorJob = null)
 {
     $localPath = null;
     $remoteUrl = null;
     $flavorAsset = assetPeer::retrieveById($flavorAssetId);
     if (!$flavorAsset) {
         KalturaLog::err("No flavor asset found for id [{$flavorAssetId}]");
         return null;
     }
     if ($flavor->getSourceRemoteStorageProfileId() == StorageProfile::STORAGE_KALTURA_DC) {
         list($fileSync, $local) = kFileSyncUtils::getReadyFileSyncForKey($srcSyncKey, true, false);
         $partner = PartnerPeer::retrieveByPK($flavorAsset->getPartnerId());
         if (!$fileSync) {
             kBatchManager::updateEntry($flavorAsset->getEntryId(), entryStatus::ERROR_CONVERTING);
             $flavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_ERROR);
             $flavorAsset->setDescription("Source file sync not found: {$srcSyncKey}");
             $flavorAsset->save();
             KalturaLog::err("Source file sync not found: {$srcSyncKey}");
             return null;
         }
         if (!$local) {
             if ($fileSync->getFileType() == FileSync::FILE_SYNC_FILE_TYPE_URL && $partner && $partner->getImportRemoteSourceForConvert()) {
                 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();
                 $originalFlavorAsset = assetPeer::retrieveOriginalByEntryId($flavorAsset->getEntryId());
                 $url = $fileSync->getExternalUrl($flavorAsset->getEntryId());
                 return kJobsManager::addImportJob($parentJob, $flavorAsset->getEntryId(), $partner->getId(), $url, $originalFlavorAsset, null, null, true);
             }
             throw new kCoreException("Source file not found for flavor conversion [{$flavorAssetId}]", kCoreException::SOURCE_FILE_NOT_FOUND);
         }
         if ($fileSync->getFileType() != FileSync::FILE_SYNC_FILE_TYPE_URL) {
             $localPath = $fileSync->getFullPath();
         }
         $remoteUrl = $fileSync->getExternalUrl($flavorAsset->getEntryId());
     } else {
         $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($srcSyncKey, $flavor->getSourceRemoteStorageProfileId());
         if (!$fileSync) {
             kBatchManager::updateEntry($flavorAsset->getEntryId(), entryStatus::ERROR_CONVERTING);
             $description = "Remote source file sync not found {$srcSyncKey}, storage profile id [" . $flavor->getSourceRemoteStorageProfileId() . "]";
             KalturaLog::err($description);
             $flavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_ERROR);
             $flavorAsset->setDescription($description);
             $flavorAsset->save();
             return null;
         }
         $localPath = $fileSync->getFilePath();
         $remoteUrl = $fileSync->getExternalUrl($flavorAsset->getEntryId());
     }
     $wamsAssetId = $fileSync->getWamsAssetId();
     // creates convert data
     $convertData = new kConvertJobData();
     $convertData->setSrcFileSyncLocalPath($localPath);
     $convertData->setSrcFileSyncRemoteUrl($remoteUrl);
     $convertData->setMediaInfoId($mediaInfoId);
     $convertData->setFlavorParamsOutputId($flavor->getId());
     $convertData->setFlavorAssetId($flavorAssetId);
     $convertData->setSrcFileSyncWamsAssetId($wamsAssetId);
     KalturaLog::log("Conversion engines string: '" . $flavor->getConversionEngines() . "'");
     $currentConversionEngine = null;
     // TODO remove after all old version flavors migrated
     // parse supported engine types
     $conversionEngines = array();
     if (!$flavor->getEngineVersion()) {
         $conversionEngines = explode(',', $flavor->getConversionEngines());
         KalturaLog::log(count($conversionEngines) . " conversion engines found for the flavor");
         $currentConversionEngine = reset($conversionEngines);
         // gets the first engine type
     }
     // remove until here
     if (is_null($lastEngineType)) {
         KalturaLog::log("Last Engine Type is null, engine version [" . $flavor->getEngineVersion() . "]");
         if ($flavor->getEngineVersion()) {
             $operatorSet = new kOperatorSets();
             $operatorSet->setSerialized($flavor->getOperators());
             $nextOperator = $operatorSet->getOperator();
             if (!$nextOperator) {
                 KalturaLog::err("First operator is invalid");
                 return null;
             }
             KalturaLog::log("Set first operator in first set");
             $currentConversionEngine = $nextOperator->id;
         }
     } else {
         if ($parentJob && $flavor->getEngineVersion() && ($parentJob->getJobType() == BatchJobType::CONVERT || $parentJob->getJobType() == BatchJobType::POSTCONVERT)) {
             // using next oprator
             KalturaLog::log("Adding next conversion operator");
             $parentData = $parentJob->getData();
             if (!$parentData || !$parentData instanceof kConvartableJobData) {
                 KalturaLog::err("Parent job data is invalid");
                 return null;
             }
             $operatorSet = new kOperatorSets();
             $operatorSet->setSerialized($flavor->getOperators());
             $nextOperatorSet = $parentData->getCurrentOperationSet();
             $nextOperatorIndex = $parentData->getCurrentOperationIndex() + 1;
             $nextOperator = $operatorSet->getOperator($nextOperatorSet, $nextOperatorIndex);
             if (!$nextOperator) {
                 KalturaLog::err("Next operator is invalid");
                 return null;
             }
             KalturaLog::log("Moving to next operator [{$nextOperatorIndex}] in set [{$nextOperatorSet}]");
             $convertData->setCurrentOperationSet($nextOperatorSet);
             $convertData->setCurrentOperationIndex($nextOperatorIndex);
             $currentConversionEngine = $nextOperator->id;
         } else {
             // TODO remove after all old version flavors migrated
             KalturaLog::log("Last used conversion engine is [{$lastEngineType}]");
             // searching for $lastEngineType in the list
             while ($lastEngineType != $currentConversionEngine && next($conversionEngines)) {
                 $currentConversionEngine = current($conversionEngines);
             }
             // takes the next engine
             $currentConversionEngine = next($conversionEngines);
             if (!$currentConversionEngine) {
                 KalturaLog::err("There is no other conversion engine to use");
                 return null;
             }
         }
     }
     if (!is_null($fileSync->getWamsAssetId())) {
         $currentConversionEngine = conversionEngineType::WAMS;
     }
     KalturaLog::log("Using conversion engine [{$currentConversionEngine}]");
     // creats a child convert job
     if (is_null($dbConvertFlavorJob)) {
         if ($parentJob) {
             $dbConvertFlavorJob = $parentJob->createChild();
             KalturaLog::log("Created from parent convert job with entry id [" . $dbConvertFlavorJob->getEntryId() . "]");
         } else {
             $dbConvertFlavorJob = new BatchJob();
             $dbConvertFlavorJob->setEntryId($flavor->getEntryId());
             $dbConvertFlavorJob->setPartnerId($flavor->getPartnerId());
             $dbConvertFlavorJob->save();
             KalturaLog::log("Created from flavor convert job with entry id [" . $dbConvertFlavorJob->getEntryId() . "]");
         }
     }
     if (!is_null($fileSync->getWamsAssetId())) {
         $srcFileSize = kWAMS::getInstance($flavor->getPartnerId())->getFileSizeForAssetId($fileSync->getWamsAssetId());
     } else {
         $srcFileSize = kFile::fileSize($convertData->getSrcFileSyncLocalPath());
     }
     $dbConvertFlavorJob->setFileSize($srcFileSize);
     // TODO remove after all old version flavors migrated
     if (in_array(conversionEngineType::ENCODING_COM, $conversionEngines)) {
         $dbConvertFlavorJob->setOnStressDivertTo(conversionEngineType::ENCODING_COM);
     }
     // remove until here
     /*
     	// Remarked by Dor until Tantan's return.
     	// Code is supposed to get a configuration file from the engine and attach it to the batch job.
     	// Was added for document conversion and is not used for now because of a bug of PDFCreator.
     
     KalturaLog::log("Calling CDLProceessFlavor with flavor params output[" . $flavor->getId() . "]");
     $config = KDLWrap::CDLProceessFlavor($flavor);
     if($config)
     {
     	$syncKey = $dbConvertFlavorJob->getSyncKey(BatchJob::FILE_SYNC_BATCHJOB_SUB_TYPE_CONFIG);
     	kFileSyncUtils::file_put_contents($syncKey, $config);
     	
     	$fileSync = kFileSyncUtils::getLocalFileSyncForKey($syncKey);
     	$remoteUrl = $fileSync->getExternalUrl($flavor->getEntryId());
     	$localPath = kFileSyncUtils::getLocalFilePathForKey($syncKey);
     	
     	$convertData->setConfigLocalPath($localPath);
     	$convertData->setConfigRemoteUrl($remoteUrl);
     }
     */
     $dbCurrentConversionEngine = kPluginableEnumsManager::apiToCore('conversionEngineType', $currentConversionEngine);
     return kJobsManager::addJob($dbConvertFlavorJob, $convertData, BatchJobType::CONVERT, $dbCurrentConversionEngine);
 }
 private static function addIsmLink(entry $entry, SimpleXMLElement $mrss)
 {
     if (self::$addedIsmUrl) {
         return;
     }
     self::$addedIsmUrl = true;
     $syncKey = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_ISM);
     $kalturaFileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
     $urlPrefix = myPartnerUtils::getIisHost($entry->getPartnerId(), StorageProfile::PLAY_FORMAT_HTTP);
     $iisHost = parse_url($urlPrefix, PHP_URL_HOST);
     $matches = null;
     if (preg_match('/(https?:\\/\\/[^\\/]+)(.*)/', $urlPrefix, $matches)) {
         $urlPrefix = $matches[1];
     }
     $urlPrefix = rtrim($urlPrefix, '/') . '/';
     $urlManager = kUrlManager::getUrlManagerByCdn($iisHost, $entry->getId());
     if ($kalturaFileSync) {
         $urlManager->setFileExtension(pathinfo($kalturaFileSync->getFilePath(), PATHINFO_EXTENSION));
     }
     $urlManager->setProtocol(StorageProfile::PLAY_FORMAT_SILVER_LIGHT);
     $partner = $entry->getPartner();
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) {
         if ($kalturaFileSync) {
             $url = $urlManager->getFileSyncUrl($kalturaFileSync, false);
             $mrss->addChild('ismUrl', $urlPrefix . $url);
             return;
         }
     }
     if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) {
         return null;
     }
     $externalFileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
     if ($externalFileSync) {
         $urlManager = kUrlManager::getUrlManagerByStorageProfile($externalFileSync->getDc(), $entry->getId());
         $urlManager->setFileExtension(pathinfo($externalFileSync->getFilePath(), PATHINFO_EXTENSION));
         $urlManager->setProtocol(StorageProfile::PLAY_FORMAT_SILVER_LIGHT);
         $url = $urlManager->getFileSyncUrl($externalFileSync, false);
         $url = ltrim($url, '/');
         if (strpos($url, "://") !== false) {
             $urlPrefix = '';
         }
         $mrss->addChild('ismUrl', $urlPrefix . $url);
         return;
     }
     if ($partner->getStorageServePriority() != StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY) {
         if ($kalturaFileSync) {
             $url = $urlManager->getFileSyncUrl($kalturaFileSync, false);
             $mrss->addChild('ismUrl', $urlPrefix . $url);
             return;
         }
     }
 }
 public function getThumbnailUrl($version = null, $protocol = null)
 {
     if (PermissionPeer::isValidForPartner(PermissionName::FEATURE_DISABLE_KMC_DRILL_DOWN_THUMB_RESIZE, $this->getPartnerId())) {
         $subType = entry::FILE_SYNC_ENTRY_SUB_TYPE_DATA;
         if ($this->getType() == entryType::MEDIA_CLIP && $this->getMediaType() != entry::ENTRY_MEDIA_TYPE_IMAGE) {
             $subType = entry::FILE_SYNC_ENTRY_SUB_TYPE_THUMB;
         }
         $syncKey = $this->getSyncKey($subType);
         $fileSync = null;
         $serveRemote = false;
         $partner = PartnerPeer::retrieveByPK($this->getPartnerId());
         switch ($partner->getStorageServePriority()) {
             case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY:
                 $serveRemote = true;
                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
                 if (!$fileSync) {
                     return null;
                 }
                 break;
             case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_FIRST:
                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
                 if ($fileSync) {
                     $serveRemote = true;
                 }
                 break;
             case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST:
                 $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
                 if ($fileSync) {
                     break;
                 }
                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
                 if (!$fileSync) {
                     return null;
                 }
                 $serveRemote = true;
                 break;
             case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY:
                 $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
                 if (!$fileSync) {
                     return null;
                 }
                 break;
         }
         if ($serveRemote && $fileSync) {
             $url = $fileSync->getExternalUrl($this->getId());
             if (!is_null($protocol)) {
                 $url = preg_replace('/^https?/', $protocol, $url);
             }
             return $url;
         }
     }
     //$path = $this->getThumbnailPath ( $version );
     $path = myPartnerUtils::getUrlForPartner($this->getPartnerId(), $this->getSubpId()) . "/thumbnail/entry_id/" . $this->getId();
     $current_version = $this->getThumbnailVersion();
     if ($version) {
         $path .= "/version/{$version}";
     } else {
         $path .= "/version/{$current_version}";
     }
     $url = myPartnerUtils::getThumbnailHost($this->getPartnerId(), $protocol) . $path;
     return $url;
 }
 private function serveRtmp()
 {
     switch ($this->entry->getType()) {
         case entryType::MEDIA_CLIP:
             $duration = $this->entry->getDurationInt();
             $flavorAssets = array();
             if ($this->flavorId) {
                 $flavorAsset = flavorAssetPeer::retrieveById($this->flavorId);
                 if (!$flavorAsset->hasTag(flavorParams::TAG_WEB)) {
                     KExternalErrors::dieError(KExternalErrors::FLAVOR_NOT_FOUND);
                 }
                 if (!$flavorAsset->getStatus() == flavorAsset::FLAVOR_ASSET_STATUS_READY) {
                     KExternalErrors::dieError(KExternalErrors::FLAVOR_NOT_FOUND);
                 }
                 $flavorAssets[] = $flavorAsset;
             } else {
                 $flavorAssets = flavorAssetPeer::retreiveReadyByEntryIdAndTag($this->entryId, flavorParams::TAG_MBR);
                 if (!count($flavorAssets)) {
                     $flavorAssets = flavorAssetPeer::retreiveReadyByEntryIdAndTag($this->entryId, flavorParams::TAG_WEB);
                 }
             }
             $flavorAssets = $this->removeMaxBitrateFlavors($flavorAssets);
             if (!$this->storageId) {
                 $partner = $this->entry->getPartner();
                 $finalFlavors = array();
                 if ($partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) {
                     foreach ($flavorAssets as $flavorAsset) {
                         $key = $flavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
                         $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($key);
                         if ($fileSync) {
                             $finalFlavors[] = $flavorAsset;
                         }
                     }
                 }
                 if (!count($finalFlavors) && $partner->getStorageServePriority() && $partner->getStorageServePriority() != StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) {
                     $storages = StorageProfilePeer::retrieveExternalByPartnerId($partner->getId());
                     if (count($storages) == 1) {
                         $this->storageId = $storages[0]->getId();
                     } elseif (count($storages)) {
                         $storagesFlavors = array();
                         foreach ($storages as $storage) {
                             $storagesFlavors[$storage->getId()] = array();
                             foreach ($flavorAssets as $flavorAsset) {
                                 $key = $flavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
                                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key, $storage->getId());
                                 if ($fileSync) {
                                     $storagesFlavors[$storage->getId()][] = $flavorAsset;
                                 }
                             }
                         }
                         $maxCount = 0;
                         foreach ($storagesFlavors as $storageId => $storageFlavors) {
                             $count = count($storageFlavors);
                             if ($count > $maxCount) {
                                 $maxCount = $count;
                                 $this->storageId = $storageId;
                                 $finalFlavors = $storageFlavors;
                             }
                         }
                         $flavorAssets = $finalFlavors;
                     } else {
                         foreach ($flavorAssets as $flavorAsset) {
                             $key = $flavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
                             $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($key);
                             if ($fileSync) {
                                 $finalFlavors[] = $flavorAsset;
                             }
                         }
                     }
                 }
             }
             foreach ($flavorAssets as $flavorAsset) {
                 $mediaInfo = mediaInfoPeer::retrieveByFlavorAssetId($flavorAsset->getId());
                 if ($mediaInfo && ($mediaInfo->getVideoDuration() || $mediaInfo->getAudioDuration() || $mediaInfo->getContainerDuration())) {
                     $duration = $mediaInfo->getVideoDuration() ? $mediaInfo->getVideoDuration() : ($mediaInfo->getAudioDuration() ? $mediaInfo->getAudioDuration() : $mediaInfo->getContainerDuration());
                     $duration /= 1000;
                     break;
                 }
             }
             $baseUrl = null;
             $flavors = array();
             if ($this->storageId) {
                 $storage = StorageProfilePeer::retrieveByPK($this->storageId);
                 if (!$storage) {
                     die;
                 }
                 $baseUrl = $storage->getDeliveryRmpBaseUrl();
                 // get all flavors with external urls
                 foreach ($flavorAssets as $flavorAsset) {
                     $key = $flavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
                     $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key, $this->storageId);
                     if (!$fileSync) {
                         continue;
                     }
                     $urlManager = kUrlManager::getUrlManagerByStorageProfile($fileSync->getDc());
                     $urlManager->setClipTo($this->clipTo);
                     $urlManager->setFileExtension($flavorAsset->getFileExt());
                     $urlManager->setProtocol(StorageProfile::PLAY_FORMAT_RTMP);
                     $url = $urlManager->getFileSyncUrl($fileSync);
                     $url = preg_replace('/^\\//', '', $url);
                     $flavors[] = array('url' => $url, 'bitrate' => $flavorAsset->getBitrate(), 'width' => $flavorAsset->getWidth(), 'height' => $flavorAsset->getHeight());
                 }
             } else {
                 $partnerId = $this->entry->getPartnerId();
                 $subpId = $this->entry->getSubpId();
                 $partnerPath = myPartnerUtils::getUrlForPartner($partnerId, $subpId);
                 $baseUrl = myPartnerUtils::getRtmpUrl($partnerId);
                 $urlManager = kUrlManager::getUrlManagerByCdn($this->cdnHost);
                 // get all flavors with kaltura urls
                 foreach ($flavorAssets as $flavorAsset) {
                     $urlManager->setClipTo($this->clipTo);
                     $urlManager->setFileExtension($flavorAsset->getFileExt());
                     $urlManager->setProtocol(StorageProfile::PLAY_FORMAT_RTMP);
                     $url = $urlManager->getFlavorAssetUrl($flavorAsset);
                     $url = preg_replace('/^\\//', '', $url);
                     $flavors[] = array('url' => $url, 'bitrate' => $flavorAsset->getBitrate(), 'width' => $flavorAsset->getWidth(), 'height' => $flavorAsset->getHeight());
                 }
             }
             if (!count($flavors)) {
                 KExternalErrors::dieError(KExternalErrors::FLAVOR_NOT_FOUND);
             }
             if (strpos($this->protocol, "rtmp") === 0) {
                 $baseUrl = $this->protocol . '://' . preg_replace('/^rtmp.*?:\\/\\//', '', $baseUrl);
             }
             return $this->buildXml(self::PLAY_STREAM_TYPE_RECORDED, $flavors, 'video/x-flv', $duration, $baseUrl);
         case entryType::LIVE_STREAM:
             $streamId = $this->entry->getStreamRemoteId();
             $streamUsername = $this->entry->getStreamUsername();
             $baseUrl = $this->entry->getStreamUrl();
             $baseUrl = rtrim($baseUrl, '/');
             $flavors = $this->entry->getStreamBitrates();
             if (count($flavors)) {
                 foreach ($flavors as $index => $flavor) {
                     $brIndex = $index + 1;
                     $flavors[$index]['url'] = str_replace('%i', $brIndex, $this->entry->getStreamName());
                 }
             } else {
                 $flavors[0]['url'] = str_replace('%i', '1', $this->entry->getStreamName());
             }
             if (strpos($this->protocol, "rtmp") === 0) {
                 $baseUrl = $this->protocol . '://' . preg_replace('/^rtmp.*?:\\/\\//', '', $baseUrl);
             }
             return $this->buildXml(self::PLAY_STREAM_TYPE_LIVE, $flavors, 'video/x-flv', null, $baseUrl);
     }
     KExternalErrors::dieError(KExternalErrors::INVALID_ENTRY_TYPE);
 }
 $lastCreatedAt = $entry->getCreatedAt(null);
 $keys = array();
 $keys[] = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_ISM);
 $keys[] = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_ISMC);
 $flavors = assetPeer::retrieveReadyFlavorsByEntryId($entry->getId());
 foreach ($flavors as $flavor) {
     if (!$flavorParamsArr || in_array($flavor->getFlavorParamsId(), $flavorParamsArr)) {
         $keys[] = $flavor->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
     }
 }
 foreach ($keys as $index => $key) {
     if (!kFileSyncUtils::fileSync_exists($key)) {
         unset($keys[$index]);
         continue;
     }
     if (kFileSyncUtils::getReadyExternalFileSyncForKey($key, $storageProfileId)) {
         unset($keys[$index]);
     }
     if (!kFileSyncUtils::getReadyInternalFileSyncForKey($key)) {
         echo 'file sync key does not have an internal file -' . serialize($key) . PHP_EOL;
         unset($keys[$index]);
     }
 }
 if (!count($keys)) {
     echo $entry->getId() . " - has no keys to export\n";
     continue;
 }
 foreach ($keys as $key) {
     $fileSync = kFileSyncUtils::createPendingExternalSyncFileForKey($key, $storageProfile);
     $dcFileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($key);
     /* @var $dcFileSync FileSync */
 /**
  * Convert entry
  * 
  * @param string $entryId Media entry id
  * @param int $conversionProfileId
  * @param KalturaConversionAttributeArray $dynamicConversionAttributes
  * @return int job id
  * @throws KalturaErrors::ENTRY_ID_NOT_FOUND
  * @throws KalturaErrors::CONVERSION_PROFILE_ID_NOT_FOUND
  * @throws KalturaErrors::FLAVOR_PARAMS_NOT_FOUND
  */
 protected function convert($entryId, $conversionProfileId = null, KalturaConversionAttributeArray $dynamicConversionAttributes = null)
 {
     $entry = entryPeer::retrieveByPK($entryId);
     if (!$entry) {
         throw new KalturaAPIException(KalturaErrors::ENTRY_ID_NOT_FOUND, $entryId);
     }
     $srcFlavorAsset = flavorAssetPeer::retrieveOriginalByEntryId($entryId);
     if (!$srcFlavorAsset) {
         throw new KalturaAPIException(KalturaErrors::ORIGINAL_FLAVOR_ASSET_IS_MISSING);
     }
     if (is_null($conversionProfileId) || $conversionProfileId <= 0) {
         $conversionProfile = myPartnerUtils::getConversionProfile2ForEntry($entryId);
         if (!$conversionProfile) {
             throw new KalturaAPIException(KalturaErrors::CONVERSION_PROFILE_ID_NOT_FOUND, $conversionProfileId);
         }
         $conversionProfileId = $conversionProfile->getId();
     }
     $srcSyncKey = $srcFlavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
     // if the file sync isn't local (wasn't synced yet) proxy request to other datacenter
     list($fileSync, $local) = kFileSyncUtils::getReadyFileSyncForKey($srcSyncKey, true, false);
     if (!$local) {
         // over come a bug in kFileSyncUtils which return an unready filesync as the filesync of a remote dc
         $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($srcSyncKey, 1 - kDataCenterMgr::getCurrentDcId());
         $fileSync = kFileSyncUtils::resolve($fileSync);
         kFile::dumpApiRequest(kDataCenterMgr::getRemoteDcExternalUrl($fileSync));
     } else {
         if (!$fileSync) {
             throw new KalturaAPIException(KalturaErrors::FILE_DOESNT_EXIST);
         }
     }
     // even if it null
     $entry->setConversionQuality($conversionProfileId);
     $entry->setConversionProfileId($conversionProfileId);
     $entry->save();
     if ($dynamicConversionAttributes) {
         $flavors = flavorParamsPeer::retrieveByProfile($conversionProfileId);
         if (!count($flavors)) {
             throw new KalturaAPIException(KalturaErrors::FLAVOR_PARAMS_NOT_FOUND);
         }
         $srcFlavorParamsId = null;
         $flavorParams = $entry->getDynamicFlavorAttributes();
         foreach ($flavors as $flavor) {
             if ($flavor->hasTag(flavorParams::TAG_SOURCE)) {
                 $srcFlavorParamsId = $flavor->getId();
             }
             $flavorParams[$flavor->getId()] = $flavor;
         }
         $dynamicAttributes = array();
         foreach ($dynamicConversionAttributes as $dynamicConversionAttribute) {
             if (is_null($dynamicConversionAttribute->flavorParamsId)) {
                 $dynamicConversionAttribute->flavorParamsId = $srcFlavorParamsId;
             }
             if (is_null($dynamicConversionAttribute->flavorParamsId)) {
                 continue;
             }
             $dynamicAttributes[$dynamicConversionAttribute->flavorParamsId][trim($dynamicConversionAttribute->name)] = trim($dynamicConversionAttribute->value);
         }
         if (count($dynamicAttributes)) {
             $entry->setDynamicFlavorAttributes($dynamicAttributes);
             $entry->save();
         }
     }
     $srcFilePath = kFileSyncUtils::getLocalFilePathForKey($srcSyncKey);
     $job = kJobsManager::addConvertProfileJob(null, $entry, $srcFlavorAsset->getId(), $srcFilePath);
     if (!$job) {
         return null;
     }
     return $job->getId();
 }
Exemple #18
0
 public function getThumbnailUrl($version = null, $protocol = null)
 {
     if (PermissionPeer::isValidForPartner(PermissionName::FEATURE_DISABLE_KMC_DRILL_DOWN_THUMB_RESIZE, $this->getPartnerId())) {
         $subType = entry::FILE_SYNC_ENTRY_SUB_TYPE_DATA;
         if ($this->getType() == entryType::MEDIA_CLIP && $this->getMediaType() != entry::ENTRY_MEDIA_TYPE_IMAGE) {
             $subType = entry::FILE_SYNC_ENTRY_SUB_TYPE_THUMB;
         }
         $syncKey = $this->getSyncKey($subType);
         $fileSync = null;
         $serveRemote = false;
         $partner = PartnerPeer::retrieveByPK($this->getPartnerId());
         switch ($partner->getStorageServePriority()) {
             case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY:
                 $serveRemote = true;
                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
                 if (!$fileSync) {
                     return null;
                 }
                 break;
             case StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_FIRST:
                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
                 if ($fileSync) {
                     $serveRemote = true;
                 }
                 break;
             case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST:
                 $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
                 if ($fileSync) {
                     break;
                 }
                 $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey);
                 if (!$fileSync) {
                     return null;
                 }
                 $serveRemote = true;
                 break;
             case StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY:
                 $fileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey);
                 if (!$fileSync) {
                     return null;
                 }
                 break;
         }
         if ($serveRemote && $fileSync) {
             $url = $fileSync->getExternalUrl($this->getId());
             if (!is_null($protocol)) {
                 $url = preg_replace('/^https?/', $protocol, $url);
             }
             return $url;
         }
     }
     //$path = $this->getThumbnailPath ( $version );
     $path = myPartnerUtils::getUrlForPartner($this->getPartnerId(), $this->getSubpId()) . "/thumbnail/entry_id/" . $this->getId();
     $partner = $this->getPartner();
     if ($partner && $this->getMediaType() == entry::ENTRY_MEDIA_TYPE_AUDIO && $partner->getAudioThumbEntryId() && $partner->getAudioThumbEntryVersion()) {
         $thumbEntryId = $partner->getAudioThumbEntryId();
         $thumbVersion = $partner->getAudioThumbEntryVersion();
         $current_version = "{$thumbVersion}/thumb_entry_id/{$thumbEntryId}";
     } elseif ($partner && in_array($this->getType(), array(entryType::LIVE_STREAM, entryType::LIVE_CHANNEL)) && $partner->getLiveThumbEntryId() && $partner->getLiveThumbEntryVersion()) {
         $thumbEntryId = $partner->getLiveThumbEntryId();
         $thumbVersion = $partner->getLiveThumbEntryVersion();
         $current_version = "{$thumbVersion}/thumb_entry_id/{$thumbEntryId}";
     } else {
         $current_version = $this->getThumbnailVersion();
     }
     if ($version) {
         $path .= "/version/{$version}";
     } else {
         $path .= "/version/{$current_version}";
     }
     $assetCacheVersion = $this->getAssetCacheVersion();
     if ($assetCacheVersion != self::DEFAULT_ASSETCACHEVERSION) {
         // If the version is not the default, include it as part of the URL in order
         // to bypass existing image cache and produce a fresh thumbnail (which will
         // persist until assetCacheVersion is modified again)
         $path .= "/acv/{$assetCacheVersion}";
     }
     $url = myPartnerUtils::getThumbnailHost($this->getPartnerId(), $protocol) . $path;
     return $url;
 }
 /**
  * @param int $duration
  * @param string $baseUrl
  * @return array
  */
 private function buildRtmpFlavorsArray(&$duration, &$baseUrl)
 {
     $flavorAssets = $this->buildRtmpFlavorAssetArray();
     $duration = $this->entry->getDurationInt();
     $flavorDuration = $this->getDurationFromFlavorAssets($flavorAssets);
     if ($flavorDuration) {
         $duration = $flavorDuration;
     }
     $flavors = array();
     if ($this->storageId) {
         $storage = StorageProfilePeer::retrieveByPK($this->storageId);
         if (!$storage) {
             die;
         }
         $baseUrl = $storage->getDeliveryRmpBaseUrl();
         $urlManager = $this->getUrlManagerByStorageProfile($this->storageId);
         // get all flavors with external urls
         foreach ($flavorAssets as $flavorAsset) {
             $key = $flavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
             $fileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($key, $this->storageId);
             if (!$fileSync) {
                 continue;
             }
             $this->setupUrlManager($urlManager, $fileSync, $flavorAsset);
             $url = $urlManager->getFileSyncUrl($fileSync, false);
             $url = ltrim($url, "/");
             $flavors[] = $this->getFlavorAssetInfo($url, '', $flavorAsset);
         }
     }
     $partner = $this->entry->getPartner();
     if (!$this->storageId || !count($flavors) && $partner->getStorageServePriority() != StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY) {
         $partnerId = $this->entry->getPartnerId();
         $subpId = $this->entry->getSubpId();
         $partnerPath = myPartnerUtils::getUrlForPartner($partnerId, $subpId);
         $baseUrl = myPartnerUtils::getRtmpUrl($partnerId);
         // allow to replace {deliveryCode} place holder with the deliveryCode parameter passed to the action
         // a publisher with a rtmpUrl set to {deliveryCode}.example.com/ondemand will be able to use different
         // cdn configuration for different sub publishers by passing a different deliveryCode to the KDP
         if ($this->deliveryCode) {
             $baseUrl = str_replace("{deliveryCode}", $this->deliveryCode, $baseUrl);
         }
         $rtmpHost = parse_url($baseUrl, PHP_URL_HOST);
         $urlManager = $this->getUrlManagerByCdn($rtmpHost);
         // get all flavors with kaltura urls
         foreach ($flavorAssets as $flavorAsset) {
             /* @var $flavorAsset flavorAsset */
             $this->setupUrlManager($urlManager, null, $flavorAsset);
             $url = $urlManager->getAssetUrl($flavorAsset, false);
             $url = ltrim($url, "/");
             $flavors[] = $this->getFlavorAssetInfo($url, '', $flavorAsset);
         }
     }
     if (strpos($this->protocol, "rtmp") === 0) {
         $baseUrl = $this->protocol . '://' . preg_replace('/^rtmp.*?:\\/\\//', '', $baseUrl);
     }
     $urlManager->finalizeUrls($baseUrl, $flavors);
     $this->tokenizer = $urlManager->getTokenizer();
     return $flavors;
 }