Пример #1
0
 /**
  * @param BatchJob $dbBatchJob
  * @param kPullJobData $data
  * @param BatchJob $twinJob
  * @return BatchJob|BatchJob
  */
 public static function handlePullFinished(BatchJob $dbBatchJob, kPullJobData $data, BatchJob $twinJob = null)
 {
     if ($dbBatchJob->getAbort()) {
         return $dbBatchJob;
     }
     // creates a child extract meida job
     $extractMediaData = new kExtractMediaJobData();
     $extractMediaData->setSrcFileSyncLocalPath($data->getDestFileLocalPath());
     kJobsManager::addJob($dbBatchJob->createChild(), $extractMediaData, BatchJobType::EXTRACT_MEDIA, mediaInfo::ASSET_TYPE_FLAVOR_INPUT);
     return $dbBatchJob;
 }
Пример #2
0
 public static function addExtractMediaJob(BatchJob $parentJob, $inputFileSyncLocalPath, $flavorAssetId)
 {
     $profile = null;
     try {
         $profile = myPartnerUtils::getConversionProfile2ForEntry($parentJob->getEntryId());
         KalturaLog::debug("profile [" . $profile->getId() . "]");
     } catch (Exception $e) {
         KalturaLog::err($e->getMessage());
     }
     $mediaInfoEngine = mediaParserType::MEDIAINFO;
     if ($profile) {
         $mediaInfoEngine = $profile->getMediaParserType();
     }
     $extractMediaData = new kExtractMediaJobData();
     $srcFileSyncDescriptor = new kSourceFileSyncDescriptor();
     $srcFileSyncDescriptor->setFileSyncLocalPath($inputFileSyncLocalPath);
     $extractMediaData->setSrcFileSyncs(array($srcFileSyncDescriptor));
     $extractMediaData->setFlavorAssetId($flavorAssetId);
     $batchJob = $parentJob->createChild(BatchJobType::EXTRACT_MEDIA, $mediaInfoEngine, false);
     $batchJob->setObjectId($flavorAssetId);
     $batchJob->setObjectType(BatchJobObjectType::ASSET);
     KalturaLog::log("Creating Extract Media job, with source file: " . $extractMediaData->getSrcFileSyncLocalPath());
     return self::addJob($batchJob, $extractMediaData, BatchJobType::EXTRACT_MEDIA, $mediaInfoEngine);
 }
Пример #3
0
 public static function addExtractMediaJob(BatchJob $parentJob, $inputFileSyncLocalPath, $flavorAssetId, $assetType)
 {
     $extractMediaData = new kExtractMediaJobData();
     $extractMediaData->setSrcFileSyncLocalPath($inputFileSyncLocalPath);
     $extractMediaData->setFlavorAssetId($flavorAssetId);
     $batchJob = $parentJob->createChild(false);
     KalturaLog::log("Creating Extract Media job, with source file: " . $extractMediaData->getSrcFileSyncLocalPath());
     return self::addJob($batchJob, $extractMediaData, BatchJobType::EXTRACT_MEDIA, $assetType);
 }
Пример #4
0
 /**
  * @param BatchJob $dbBatchJob
  * @param kExtractMediaJobData $data
  * @return BatchJob/null
  */
 protected static function fixWebCamSources(BatchJob &$rootBatchJob, BatchJob &$dbBatchJob, kExtractMediaJobData $data)
 {
     $mediaInfo = mediaInfoPeer::retrieveById($data->getMediaInfoId());
     /*
      * Check validity of web-cam sources, for:
      * - h263/sorenson video
      * - nellymoser audio
      * - and for following params:
      * -- Duration>100hrs (KDLSanityLimits::MaxDuration) or 
      * -- Bitrate<10Kbps (KDLSanityLimits::MinBitrate)
      * then run the webcam-flv-fix procedure
      */
     $webCamVideoCodecs = array("h.263", "h263", "sorenson spark", "vp6");
     if (isset($mediaInfo) && (in_array($mediaInfo->getVideoFormat(), $webCamVideoCodecs) || in_array($mediaInfo->getVideoCodecId(), $webCamVideoCodecs)) && (in_array($mediaInfo->getAudioFormat(), array("nellymoser")) || in_array($mediaInfo->getAudioCodecId(), array("nellymoser")))) {
         if ($mediaInfo->getVideoDuration() > 0) {
             $durToTest = $mediaInfo->getVideoDuration();
         } else {
             if ($mediaInfo->getAudioDuration() > 0) {
                 $durToTest = $mediaInfo->getAudioDuration();
             } else {
                 if ($mediaInfo->getContainerDuration() > 0) {
                     $durToTest = $mediaInfo->getContainerDuration();
                 } else {
                     $durToTest = 0;
                 }
             }
         }
         if ($durToTest > 0) {
             $calcBrToTest = $mediaInfo->getFileSize() * 8000 / $durToTest;
         } else {
             $calcBrToTest = 0;
         }
         if ($mediaInfo->getVideoBitRate() > 0) {
             $brToTest = $mediaInfo->getVideoBitRate();
         } else {
             if ($mediaInfo->getContainerBitRate() > 0) {
                 $brToTest = $mediaInfo->getContainerBitRate();
             } else {
                 $brToTest = $calcBrToTest;
             }
         }
         KalturaLog::log("durToTest({$durToTest}),brToTest({$brToTest}),calcBrToTest({$calcBrToTest})");
         if ($durToTest > KDLSanityLimits::MaxDuration || $calcBrToTest > 0 && $calcBrToTest < KDLSanityLimits::MinBitrate || $brToTest > 0 && $brToTest < KDLSanityLimits::MinBitrate) {
             KalturaLog::err("invalid source, should be fixed");
             $flavorAsset = assetPeer::retrieveById($data->getFlavorAssetId());
             if ($flavorAsset && $flavorAsset->getVersion() < 40) {
                 $flavorAsset->incrementVersion();
                 $flavorAsset->save();
                 $fixedFileName = $data->getSrcFileSyncLocalPath() . ".fixed";
                 myFlvHandler::fixFlvTimestamps($data->getSrcFileSyncLocalPath(), $fixedFileName);
                 $syncKey = $flavorAsset->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET);
                 kFileSyncUtils::moveFromFile($fixedFileName, $syncKey);
                 $syncPath = kFileSyncUtils::getLocalFilePathForKey($syncKey);
                 /*
                  * Finish the current extract medi job and start a new one
                  */
                 kJobsManager::updateBatchJob($dbBatchJob, BatchJob::BATCHJOB_STATUS_FINISHED);
                 kJobsManager::addExtractMediaJob($rootBatchJob, $syncPath, $data->getFlavorAssetId());
                 return $dbBatchJob;
             }
         }
     }
     return null;
 }
 /**
  * @param BatchJob $dbBatchJob
  * @param kExtractMediaJobData $data
  * @param BatchJob $twinJob
  * @return BatchJob
  */
 public static function handleExtractMediaClosed(BatchJob $dbBatchJob, kExtractMediaJobData $data, BatchJob $twinJob = null)
 {
     KalturaLog::debug("Extract media closed");
     if ($dbBatchJob->getAbort()) {
         return $dbBatchJob;
     }
     $rootBatchJob = $dbBatchJob->getRootJob();
     if (!$rootBatchJob) {
         return $dbBatchJob;
     }
     if ($twinJob) {
         // copy media info
         $twinData = $twinJob->getData();
         if ($twinData->getMediaInfoId()) {
             $twinMediaInfo = mediaInfoPeer::retrieveByPK($twinData->getMediaInfoId());
             if ($twinMediaInfo) {
                 $mediaInfo = $twinMediaInfo->copy();
                 $mediaInfo->setFlavorAssetId($data->getFlavorAssetId());
                 $mediaInfo = kBatchManager::addMediaInfo($mediaInfo);
                 $data->setMediaInfoId($mediaInfo->getId());
                 $dbBatchJob->setData($data);
                 $dbBatchJob->save();
             }
         }
     }
     if ($dbBatchJob->getStatus() == BatchJob::BATCHJOB_STATUS_FINISHED) {
         $entry = entryPeer::retrieveByPKNoFilter($dbBatchJob->getEntryId());
         if ($entry->getStatus() != entryStatus::READY && $entry->getStatus() != entryStatus::DELETED) {
             kBatchManager::updateEntry($dbBatchJob->getEntryId(), entryStatus::PRECONVERT);
         }
     }
     if ($rootBatchJob->getJobType() == BatchJobType::CONVERT_PROFILE) {
         kBusinessPreConvertDL::decideProfileConvert($dbBatchJob, $rootBatchJob, $data->getMediaInfoId());
         // handle the source flavor as if it was converted, makes the entry ready according to ready behavior rules
         $currentFlavorAsset = assetPeer::retrieveById($data->getFlavorAssetId());
         if ($currentFlavorAsset && $currentFlavorAsset->getStatus() == asset::FLAVOR_ASSET_STATUS_READY) {
             $dbBatchJob = kBusinessPostConvertDL::handleConvertFinished($dbBatchJob, $currentFlavorAsset);
         }
     }
     return $dbBatchJob;
 }