/** * @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; }
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; }
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; }
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(); }
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; }