public static function handleFlavorReady(BatchJob $dbBatchJob, $flavorAssetId) { // verifies that flavor asset created if (!$flavorAssetId) { throw new APIException(APIErrors::INVALID_FLAVOR_ASSET_ID, $flavorAssetId); } $currentFlavorAsset = assetPeer::retrieveById($flavorAssetId); // verifies that flavor asset exists if (!$currentFlavorAsset) { throw new APIException(APIErrors::INVALID_FLAVOR_ASSET_ID, $flavorAssetId); } // if the flavor deleted then it shouldn't be taken into ready calculations if ($currentFlavorAsset->getStatus() == flavorAsset::FLAVOR_ASSET_STATUS_DELETED) { return $currentFlavorAsset; } // Remarked because we want the original flavor ready behavior to work the same as other flavors // // $rootBatchJob = $dbBatchJob->getRootJob(); // // // happens in case of post convert on the original (in case of bypass) // if($rootBatchJob && $currentFlavorAsset->getIsOriginal()) // { // kJobsManager::updateBatchJob($rootBatchJob, BatchJob::BATCHJOB_STATUS_FINISHED); // return $dbBatchJob; // } $sourceMediaInfo = mediaInfoPeer::retrieveOriginalByEntryId($dbBatchJob->getEntryId()); $productMediaInfo = mediaInfoPeer::retrieveByFlavorAssetId($currentFlavorAsset->getId()); $targetFlavor = assetParamsOutputPeer::retrieveByAssetId($currentFlavorAsset->getId()); $postConvertData = $dbBatchJob->getData(); $postConvertAssetType = BatchJob::POSTCONVERT_ASSET_TYPE_FLAVOR; if ($postConvertData instanceof kPostConvertJobData) { $postConvertAssetType = $postConvertData->getPostConvertAssetType(); } // don't validate in case of bypass, in case target flavor or media info are null if ($postConvertAssetType != BatchJob::POSTCONVERT_ASSET_TYPE_BYPASS && $targetFlavor && $productMediaInfo) { try { $productFlavor = KDLWrap::CDLValidateProduct($sourceMediaInfo, $targetFlavor, $productMediaInfo); } catch (Exception $e) { KalturaLog::err('KDL Error: ' . print_r($e, true)); } $err = kBusinessConvertDL::parseFlavorDescription($productFlavor); KalturaLog::debug("BCDL: job id [" . $dbBatchJob->getId() . "] flavor params output id [" . $targetFlavor->getId() . "] flavor asset id [" . $currentFlavorAsset->getId() . "] desc: {$err}"); if (!$productFlavor->IsValid()) { $description = $currentFlavorAsset->getDescription() . "\n{$err}"; // mark the asset as ready $currentFlavorAsset->setDescription($description); $currentFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_ERROR); $currentFlavorAsset->save(); if (!kConf::get('ignore_cdl_failure')) { kJobsManager::failBatchJob($dbBatchJob, $err); return null; } } } // mark the asset as ready $currentFlavorAsset->setStatusLocalReady(); $currentFlavorAsset->save(); kFlowHelper::generateThumbnailsFromFlavor($dbBatchJob->getEntryId(), $dbBatchJob, $currentFlavorAsset->getFlavorParamsId()); return $currentFlavorAsset; }
/** * * Tests the KDLWrapCDLValidateProduct method * @param mediaInfo $cdlSourceMediaInfo * @param flavorParamsOutput $cdlTarget * @param mediaInfo $cdlProductMediaInfo * @dataProvider provideData */ public function testKDLWrapCDLValidateProduct(mediaInfo $cdlSourceMediaInfo, flavorParamsOutput $cdlTarget, mediaInfo $cdlProductMediaInfo) { $result = KDLWrap::CDLValidateProduct($cdlSourceMediaInfo, $cdlTarget, $cdlProductMediaInfo); //assert that 0 errors were generated $this->assertEquals(0, count($result->_errors)); }
public static function handleFlavorReady(BatchJob $dbBatchJob, $flavorAssetId) { // verifies that flavor asset created if (!$flavorAssetId) { throw new APIException(APIErrors::INVALID_FLAVOR_ASSET_ID, $flavorAssetId); } $currentFlavorAsset = assetPeer::retrieveById($flavorAssetId); // verifies that flavor asset exists if (!$currentFlavorAsset) { throw new APIException(APIErrors::INVALID_FLAVOR_ASSET_ID, $flavorAssetId); } // if the flavor deleted then it shouldn't be taken into ready calculations if ($currentFlavorAsset->getStatus() == flavorAsset::FLAVOR_ASSET_STATUS_DELETED) { return $currentFlavorAsset; } // Remarked because we want the original flavor ready behavior to work the same as other flavors // // $rootBatchJob = $dbBatchJob->getRootJob(); // // // happens in case of post convert on the original (in case of bypass) // if($rootBatchJob && $currentFlavorAsset->getIsOriginal()) // { // kJobsManager::updateBatchJob($rootBatchJob, BatchJob::BATCHJOB_STATUS_FINISHED); // return $dbBatchJob; // } $sourceMediaInfo = mediaInfoPeer::retrieveOriginalByEntryId($dbBatchJob->getEntryId()); /* * For intermediate source generation, both the source and the asset have the same asset id. * In this case sourceMediaInfo should be retrieved as the first version of source asset mediaInfo */ if (isset($sourceMediaInfo) && $sourceMediaInfo->getFlavorAssetId() == $flavorAssetId) { $productMediaInfo = $sourceMediaInfo; $entry = $dbBatchJob->getEntry(); $operationAttributes = $entry->getOperationAttributes(); // if in clipping operation - take the latest created mediainfo object $ascending = empty($operationAttributes) ? 1 : 0; $sourceMediaInfo = mediaInfoPeer::retrieveByFlavorAssetId($flavorAssetId, $ascending); KalturaLog::log("Intermediate source generation - assetId(" . $flavorAssetId . "),src MdInf id(" . $sourceMediaInfo->getId() . "),product MdInf id(" . $productMediaInfo->getId()) . ")"; } else { $productMediaInfo = mediaInfoPeer::retrieveByFlavorAssetId($currentFlavorAsset->getId()); } $targetFlavor = assetParamsOutputPeer::retrieveByAssetId($currentFlavorAsset->getId()); //Retrieve convert job executing engien $convertEngineType = null; if ($dbBatchJob->getParentJob()) { $dbParentBatchJob = $dbBatchJob->getParentJob(); if ($dbParentBatchJob->getJobType() == BatchJobType::CONVERT) { $convertEngineType = $dbParentBatchJob->getJobSubType(); } } $postConvertData = $dbBatchJob->getData(); $postConvertAssetType = BatchJob::POSTCONVERT_ASSET_TYPE_FLAVOR; if ($postConvertData instanceof kPostConvertJobData) { $postConvertAssetType = $postConvertData->getPostConvertAssetType(); } // don't validate in case of bypass, in case target flavor or media info are null // or ISM/ISMC manifest assets if ($postConvertAssetType != BatchJob::POSTCONVERT_ASSET_TYPE_BYPASS && $targetFlavor && $productMediaInfo && !$targetFlavor->hasTag(assetParams::TAG_ISM_MANIFEST)) { try { $productFlavor = KDLWrap::CDLValidateProduct($sourceMediaInfo, $targetFlavor, $productMediaInfo, $convertEngineType); } catch (Exception $e) { KalturaLog::err('KDL Error: ' . print_r($e, true)); } $err = kBusinessConvertDL::parseFlavorDescription($productFlavor); KalturaLog::debug("BCDL: job id [" . $dbBatchJob->getId() . "] flavor params output id [" . $targetFlavor->getId() . "] flavor asset id [" . $currentFlavorAsset->getId() . "] desc: {$err}"); if (!$productFlavor->IsValid()) { $description = $currentFlavorAsset->getDescription() . "\n{$err}"; // mark the asset as ready $currentFlavorAsset->setDescription($description); $currentFlavorAsset->setStatus(flavorAsset::FLAVOR_ASSET_STATUS_ERROR); $currentFlavorAsset->save(); if (!kConf::get('ignore_cdl_failure')) { kJobsManager::failBatchJob($dbBatchJob, $err); return null; } } } // mark the asset as ready $currentFlavorAsset->setStatusLocalReady(); $currentFlavorAsset->save(); $waitingFlavorAssets = assetPeer::retrieveByEntryIdAndStatus($currentFlavorAsset->getEntryId(), flavorAsset::FLAVOR_ASSET_STATUS_WAIT_FOR_CONVERT); $originalFlavorAsset = assetPeer::retrieveOriginalByEntryId($currentFlavorAsset->getEntryId()); foreach ($waitingFlavorAssets as $waitingFlavorAsset) { $flavor = assetParamsOutputPeer::retrieveByAsset($waitingFlavorAsset); KalturaLog::debug('Check waiting flavor asset [' . $waitingFlavorAsset->getId() . ']'); if ($dbBatchJob->getParentJob()) { $parentJob = $dbBatchJob->getParentJob(); } else { $parentJob = $dbBatchJob; } kBusinessPreConvertDL::decideFlavorConvert($waitingFlavorAsset, $flavor, $originalFlavorAsset, null, null, $parentJob); } kFlowHelper::generateThumbnailsFromFlavor($dbBatchJob->getEntryId(), $dbBatchJob, $currentFlavorAsset->getFlavorParamsId()); if ($currentFlavorAsset->getIsOriginal()) { $entry = $currentFlavorAsset->getentry(); if ($entry) { kBusinessConvertDL::checkForPendingLiveClips($entry); } } return $currentFlavorAsset; }
function runWrapperTest($contentDir, $patern) { echo "<br>\n"; $kdlSrcMedSet = getMediasetFromFile("{$contentDir}\\{$patern}"); $cdlSrcMedInf = new mediaInfo(); $cdlSrcMedInf->LoadFromMediaset($kdlSrcMedSet); $cdlFlavors[] = new flavorParams(); $cdlFlavors[0]->simulate(KDLContainerTarget::MP4, KDLVideoTarget::H264B, 0, 352, 2500, KDLAudioTarget::AAC, 96, 22050, "2,3"); $cdlTargets; $cdlTargets = KDLWrap::CDLGenerateTargetFlavors($cdlSrcMedInf, $cdlFlavors); $cmdLine = KDLWrap::CDLProceessFlavorsForCollection($cdlTargets->_targetList); if ($cdlTargets->_targetList[0]->engine_version == 0) { $cmdLine = $cdlTargets->_targetList[0]->command_lines; } else { $cmdLine = $cdlTargets->_targetList[0]->operators; $oprSets = new kOperatorSets(); // $operators = stripslashes($operators); //kLog::log(__METHOD__."\ncdlOperators(stripslsh)==>\n".print_r($operators,true)); $oprSets->setSerialized($cdlTargets->_targetList[0]->operators); $oprArr = $oprSets->getSets(); $cmdLine = $oprArr[0][0]->command; } $outFile = "aaa111.mpg"; $exec_cmd = str_replace(array(KDLCmdlinePlaceholders::InFileName, KDLCmdlinePlaceholders::OutFileName, KDLCmdlinePlaceholders::ConfigFileName), array("{$contentDir}\\{$patern}", $outFile, "mko"), $cmdLine); /* $xmlFileName = "k:\\pre.xml"; $fHd = fopen($xmlFileName, "w"); fwrite($fHd,$exec_cmd); fclose($fHd); //c:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -file C:\opt\kaltura\app\batch\batches\Convert\scripts\runee3.ps1 C:\expressionencoder\ExpressionEncoder.dll W:\/content/entry/data/29/399/0_0bybp8ez_0_t75dk08i_1.mov C:\opt\kaltura\tmp\convert\convert_0_0bybp8ez_4c24801bbb92f.xml >> "C:\opt\kaltura\tmp\convert\0_0bybp8ez_0_2.log" 2>&1 $fHd = fopen("k:\\run.bat", "w"); fwrite($fHd,"c:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe -file K:\\opt\\kaltura\\app\\batch\\batches\\Convert\\scripts\\runee3.ps1 C:\\expressionencoder\\ExpressionEncoder.dll $contentDir\\$patern $xmlFileName\npause"); fclose($fHd); */ echo "1<br>\n"; echo $exec_cmd; // exec("ffmpeg ".$exec_cmd); if (!file_exists($outFile) || kFile::fileSize($outFile) == 0) { kLog::log("\nFailed"); } else { kLog::log("\nSucceeded, Filesize:" . kFile::fileSize($outFile)); } // $cdlAsset = new flavorAsset; // KDLWrap::ConvertMediainfoCdl2FlavorAsset($cdlMedInf, $cdlAsset); $cdlMedInf = new mediaInfo(); $kdlMedSet = getMediasetFromFile("{$outFile}"); $cdlMedInf->LoadFromMediaset($kdlMedSet); kLog::log("\npre CDLValidateProduct\n"); KDLWrap::CDLValidateProduct($cdlSrclMedInf, $cdlTargets->_targetList[0], $cdlMedInf); // print_r($kdlFlavor); return; }