PageRenderTime 46ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/package/app/app/infra/cdl/kdl/KDLWrap.php

https://bitbucket.org/pandaos/kaltura
PHP | 692 lines | 486 code | 68 blank | 138 comment | 65 complexity | 37f703ef1e88216a580df17f5b3bbe02 MD5 | raw file
Possible License(s): AGPL-3.0, GPL-3.0, BSD-3-Clause, LGPL-2.1, GPL-2.0, LGPL-3.0, JSON, MPL-2.0-no-copyleft-exception, Apache-2.0
  1. <?php
  2. include_once("KDLMediaInfoLoader.php");
  3. include_once('KDLProcessor.php');
  4. include_once 'KDLUtils.php';
  5. /* ===========================
  6. * KDLWrap
  7. */
  8. class KDLWrap
  9. {
  10. public $_targetList = array();
  11. public $_errors = array();
  12. public $_warnings = array();
  13. public $_rv=true;
  14. static $TranscodersCdl2Kdl = array(
  15. conversionEngineType::KALTURA_COM=>KDLTranscoders::KALTURA,
  16. conversionEngineType::ON2=>KDLTranscoders::ON2,
  17. conversionEngineType::FFMPEG=>KDLTranscoders::FFMPEG,
  18. conversionEngineType::MENCODER=>KDLTranscoders::MENCODER,
  19. conversionEngineType::ENCODING_COM=>KDLTranscoders::ENCODING_COM,
  20. conversionEngineType::FFMPEG_AUX=>KDLTranscoders::FFMPEG_AUX,
  21. conversionEngineType::FFMPEG_VP8=>KDLTranscoders::FFMPEG_VP8,
  22. conversionEngineType::EXPRESSION_ENCODER3=>KDLTranscoders::EE3,
  23. // "expressionEncoder.ExpressionEncoder"=>KDLTranscoders::EXPRESSION_ENCODER,
  24. "quickTimeTools.QuickTimeTools"=>KDLTranscoders::QUICK_TIME_PLAYER_TOOLS,
  25. // "fastStart.FastStart"=>KDLTranscoders::QT_FASTSTART,
  26. // "avidemux.Avidemux"=>KDLTranscoders::AVIDEMUX,
  27. // conversionEngineType::PDF2SWF=>KDLTranscoders::PDF2SWF,
  28. // conversionEngineType::PDF_CREATOR=>KDLTranscoders::PDF_CREATOR,
  29. );
  30. /* ------------------------------
  31. * function CDLGenerateTargetFlavors
  32. */
  33. public static function CDLGenerateTargetFlavors(mediaInfo $cdlMediaInfo=null, $cdlFlavorList)
  34. {
  35. $kdlWrap = new KDLWrap();
  36. return $kdlWrap->generateTargetFlavors($cdlMediaInfo, $cdlFlavorList);
  37. }
  38. /* ------------------------------
  39. * function CDLGenerateTargetFlavorsCmdLinesOnly
  40. */
  41. public static function CDLGenerateTargetFlavorsCmdLinesOnly($fileSizeKb, $cdlFlavorList)
  42. {
  43. $kdlWrap = new KDLWrap();
  44. if($fileSizeKb<KDLSanityLimits::MinFileSize) {
  45. $kdlWrap->_rv = false;
  46. $kdlWrap->_errors[KDLConstants::ContainerIndex][] = KDLErrors::ToString(KDLErrors::SanityInvalidFileSize, $fileSizeKb);
  47. return $kdlWrap;
  48. }
  49. return $kdlWrap->generateTargetFlavors(null, $cdlFlavorList);
  50. }
  51. /* ------------------------------
  52. * function generateTargetFlavors
  53. */
  54. private function generateTargetFlavors(mediaInfo $cdlMediaInfo=null, $cdlFlavorList)
  55. {
  56. $mediaSet = new KDLMediaDataSet();
  57. if($cdlMediaInfo!=null) {
  58. self::ConvertMediainfoCdl2Mediadataset($cdlMediaInfo, $mediaSet);
  59. }
  60. KalturaLog::log( "...S-->".$mediaSet->ToString());
  61. $profile = new KDLProfile();
  62. foreach($cdlFlavorList as $cdlFlavor) {
  63. $kdlFlavor = self::ConvertFlavorCdl2Kdl($cdlFlavor);
  64. $profile->_flavors[] = $kdlFlavor;
  65. KalturaLog::log( "...F-->".$kdlFlavor->ToString());
  66. }
  67. $trgList = array();
  68. {
  69. $dlPrc = new KDLProcessor();
  70. $dlPrc->Generate($mediaSet, $profile, $trgList);
  71. $this->_errors = $this->_errors + $dlPrc->get_errors();
  72. $this->_warnings = $this->_warnings + $dlPrc->get_warnings();
  73. if(count($this->_errors)>0)
  74. $this->_rv = false;
  75. else
  76. $this->_rv = true;
  77. }
  78. foreach ($trgList as $trg){
  79. KalturaLog::log("...T-->".$trg->ToString());
  80. $this->_targetList[] = self::ConvertFlavorKdl2Cdl($trg);
  81. }
  82. return $this;
  83. }
  84. /* ------------------------------
  85. * function CDLValidateProduct
  86. */
  87. public static function CDLValidateProduct(mediaInfo $cdlSourceMediaInfo=null, flavorParamsOutput $cdlTarget, mediaInfo $cdlProductMediaInfo)
  88. {
  89. $kdlProduct = new KDLFlavor();
  90. KDLWrap::ConvertMediainfoCdl2Mediadataset($cdlProductMediaInfo, $kdlProduct);
  91. $kdlTarget = KDLWrap::ConvertFlavorCdl2Kdl($cdlTarget);
  92. $kdlSource = new KDLFlavor();
  93. // Do not run product validation when the source is undefined
  94. // in most cases - ForceCommand case
  95. if($cdlSourceMediaInfo){
  96. KDLWrap::ConvertMediainfoCdl2Mediadataset($cdlSourceMediaInfo, $kdlSource);
  97. $kdlTarget->ValidateProduct($kdlSource, $kdlProduct);
  98. }
  99. $product = KDLWrap::ConvertFlavorKdl2Cdl($kdlProduct);
  100. return $product;
  101. }
  102. /* ------------------------------
  103. * function CDLProceessFlavorsForCollection
  104. */
  105. public static function CDLProceessFlavorsForCollection($cdlFlavorList)
  106. {
  107. $kdlFlavorList = array();
  108. foreach($cdlFlavorList as $cdlFlavor) {
  109. $kdlFlavor = KDLWrap::ConvertFlavorCdl2Kdl($cdlFlavor);
  110. $kdlFlavorList[]=$kdlFlavor;
  111. }
  112. $xml=KDLProcessor::ProceessFlavorsForCollection($kdlFlavorList);
  113. KalturaLog::log(__METHOD__."-->".$xml."<--");
  114. return $xml;
  115. }
  116. /* ------------------------------
  117. * function CDLMediaInfo2Tags
  118. */
  119. public static function CDLMediaInfo2Tags(mediaInfo $cdlMediaInfo, $tagList)
  120. {
  121. KalturaLog::log(__METHOD__."==>\n");
  122. $mediaSet = new KDLMediaDataSet();
  123. self::ConvertMediainfoCdl2Mediadataset($cdlMediaInfo, $mediaSet);
  124. KalturaLog::log( "...S-->".$mediaSet->ToString());
  125. $tagsOut = array();
  126. $tagsOut = $mediaSet->ToTags($tagList);
  127. return $tagsOut;
  128. }
  129. /* ------------------------------
  130. * function CDLIsFLV
  131. */
  132. public static function CDLIsFLV(mediaInfo $cdlMediaInfo)
  133. {
  134. KalturaLog::log(__METHOD__."==>\n");
  135. $tagList[] = "flv";
  136. $mediaSet = new KDLMediaDataSet();
  137. self::ConvertMediainfoCdl2Mediadataset($cdlMediaInfo, $mediaSet);
  138. KalturaLog::log("...S-->".$mediaSet->ToString());
  139. $tagsOut = array();
  140. $tagsOut = $mediaSet->ToTags($tagList);
  141. if(count($tagsOut)==1) {
  142. KalturaLog::log("... an FLV file");
  143. return true;
  144. }
  145. else {
  146. KalturaLog::log("... NOT an FLV file");
  147. return false;
  148. }
  149. }
  150. /* ------------------------------
  151. * function ConvertFlavorKdl2Cdl
  152. */
  153. public static function ConvertFlavorKdl2Cdl(KDLFlavor $target){
  154. $flavor = new flavorParamsOutputWrap();
  155. $flavor->setFlavorParamsId($target->_id);
  156. $flavor->setName($target->_name);
  157. $flavor->setType($target->_type);
  158. $flavor->setTags($target->_tags);
  159. if($target->_cdlObject)
  160. {
  161. $flavor->setReadyBehavior($target->_cdlObject->getReadyBehavior());
  162. // $flavor->setSourceRemoteStorageProfileId($target->_cdlObject->getSourceRemoteStorageProfileId());
  163. // $flavor->setMediaParserType($target->_cdlObject->getMediaParserType());
  164. }
  165. if($target->IsRedundant()) {
  166. $flavor->_isRedundant = true;
  167. }
  168. else {
  169. $flavor->_isRedundant = false;
  170. }
  171. if($target->IsNonComply()) {
  172. $flavor->_isNonComply = true;
  173. }
  174. else {
  175. $flavor->_isNonComply = false;
  176. }
  177. if($target->_clipStart)
  178. $flavor->setClipOffset($target->_clipStart);
  179. if($target->_clipDur)
  180. $flavor->setClipDuration($target->_clipDur);
  181. $flavor->_errors = $flavor->_errors + $target->_errors;
  182. $flavor->_warnings = $flavor->_warnings + $target->_warnings;
  183. if($target->_container)
  184. $flavor->setFormat($target->_container->GetIdOrFormat());
  185. if($target->_video) {
  186. //echo "\n target->_video - "; print_r($target->_video); echo "\n";
  187. $flavor->setVideoCodec($target->_video->GetIdOrFormat());
  188. $flavor->setVideoBitrate($target->_video->_bitRate);
  189. $flavor->setWidth($target->_video->_width);
  190. $flavor->setHeight($target->_video->_height);
  191. $flavor->setFrameRate($target->_video->_frameRate);
  192. $flavor->setGopSize($target->_video->_gop);
  193. if($target->_video->_arProcessingMode)
  194. $flavor->setAspectRatioProcessingMode($target->_video->_arProcessingMode);
  195. if($target->_video->_forceMult16)
  196. $flavor->setForceFrameToMultiplication16($target->_video->_forceMult16);
  197. }
  198. if($target->_audio) {
  199. $flavor->setAudioCodec($target->_audio->GetIdOrFormat());
  200. $flavor->setAudioBitrate($target->_audio->_bitRate);
  201. $flavor->setAudioChannels($target->_audio->_channels);
  202. $flavor->setAudioSampleRate($target->_audio->_sampleRate);
  203. }
  204. if($target->_pdf)
  205. $flavor->putInCustomData('readonly',$target->_pdf->_readonly);
  206. $cdlOprSets = KDLWrap::convertOperatorsKdl2Cdl($target->_transcoders);
  207. if($target->_engineVersion==1) {
  208. KalturaLog::log(__METHOD__."\noperators==>\n".print_r($cdlOprSets,true));
  209. $flavor->setOperators($cdlOprSets->getSerialized());
  210. $flavor->setEngineVersion(1);
  211. }
  212. else {
  213. $flavor->setEngineVersion(0);
  214. $convEnginesAssociated = null;
  215. $commandLines = array();
  216. foreach($target->_transcoders as $key => $transObj) {
  217. $extra = $transObj->_extra;
  218. /* -------------------------
  219. * Translate KDL transcoders enums to CDL
  220. */
  221. $str = null;
  222. $cdlTrnsId=array_search($transObj->_id,self::$TranscodersCdl2Kdl);
  223. if($cdlTrnsId!==false){
  224. $str = $cdlTrnsId;
  225. $commandLines[$cdlTrnsId]=$transObj->_cmd;
  226. }
  227. // Add qt-faststart processing for mp4 targets (relevant to pre-opertors mode)
  228. if($flavor->getFormat()=="mp4" && ($cdlTrnsId==conversionEngineType::FFMPEG || $cdlTrnsId==conversionEngineType::FFMPEG_AUX || $cdlTrnsId==conversionEngineType::MENCODER)){
  229. $fsAddonStr = kConvertJobData::CONVERSION_MILTI_COMMAND_LINE_SEPERATOR.kConvertJobData::CONVERSION_FAST_START_SIGN;
  230. $commandLines[$cdlTrnsId].=$fsAddonStr;
  231. }
  232. if($convEnginesAssociated!==null) {
  233. $convEnginesAssociated = $convEnginesAssociated.",".$str;
  234. }
  235. else {
  236. $convEnginesAssociated = $str;
  237. }
  238. //echo "transcoder-->".$key." flag:".$flag." str:".$trnsStr."<br>\n";
  239. }
  240. $flavor->setCommandLines($commandLines);
  241. $flavor->setConversionEngines($convEnginesAssociated);
  242. }
  243. $flavor->setFileExt($target->EvaluateFileExt());
  244. $flavor->_errors = $flavor->_errors + $target->_errors;
  245. //echo "target errs "; print_r($target->_errors);
  246. //echo "flavor errs "; print_r($flavor->_errors);
  247. $flavor->_warnings = $flavor->_warnings + $target->_warnings;
  248. //echo "target wrns "; print_r($target->_warnings);
  249. //echo "flavor wrns "; print_r($flavor->_warnings);
  250. //echo "flavor "; print_r($flavor);
  251. //KalturaLog::log(__METHOD__."\nflavorOutputParams==>\n".print_r($flavor,true));
  252. return $flavor;
  253. }
  254. /* ------------------------------
  255. * function ConvertFlavorCdl2Kdl
  256. */
  257. public static function ConvertFlavorCdl2Kdl($cdlFlavor)
  258. {
  259. $kdlFlavor = new KDLFlavor();
  260. $kdlFlavor->_name = $cdlFlavor->getName();
  261. $kdlFlavor->_id = $cdlFlavor->getId();
  262. $kdlFlavor->_type = $cdlFlavor->getType();
  263. $kdlFlavor->_tags = $cdlFlavor->getTags();
  264. if($cdlFlavor instanceof flavorParams)
  265. {
  266. $kdlFlavor->_clipStart = $cdlFlavor->getClipOffset();
  267. $kdlFlavor->_clipDur = $cdlFlavor->getClipDuration();
  268. }
  269. $kdlFlavor->_cdlObject = $cdlFlavor;
  270. /*
  271. * Media container initialization
  272. */
  273. {
  274. $kdlFlavor->_container = new KDLContainerData();
  275. $kdlFlavor->_container->_id=$cdlFlavor->getFormat();
  276. // $kdlFlavor->_container->_duration=$api->getContainerDuration();
  277. // $kdlFlavor->_container->_bitRate=$api->getContainerBitRate();
  278. // $kdlFlavor->_container->_fileSize=$api->getFileSize();
  279. if($kdlFlavor->_container->IsDataSet()==false)
  280. $kdlFlavor->_container = null;
  281. }
  282. /*
  283. * Video stream initialization
  284. */
  285. {
  286. $kdlFlavor->_video = new KDLVideoData();
  287. $kdlFlavor->_video->_id = $cdlFlavor->getVideoCodec();
  288. // $kdlFlavor->_video->_format = $api->getVideoFormat();
  289. // $kdlFlavor->_video->_duration = $api->getVideoDuration();
  290. $kdlFlavor->_video->_bitRate = $cdlFlavor->getVideoBitRate();
  291. $kdlFlavor->_video->_width = $cdlFlavor->getWidth();
  292. $kdlFlavor->_video->_height = $cdlFlavor->getHeight();
  293. $kdlFlavor->_video->_frameRate = $cdlFlavor->getFrameRate();
  294. $kdlFlavor->_video->_gop = $cdlFlavor->getGopSize();
  295. $kdlFlavor->_isTwoPass = $cdlFlavor->getTwoPass();
  296. $kdlFlavor->_video->_arProcessingMode = $cdlFlavor->getAspectRatioProcessingMode();
  297. $kdlFlavor->_video->_forceMult16 = $cdlFlavor->getForceFrameToMultiplication16();
  298. if($cdlFlavor instanceof flavorParams) {
  299. $kdlFlavor->_video->_cbr = $cdlFlavor->getVideoConstantBitrate();
  300. $kdlFlavor->_video->_bt = $cdlFlavor->getVideoBitrateTolerance();
  301. }
  302. // $flavor->_video->_dar = $api->getVideoDar();
  303. if($kdlFlavor->_video->IsDataSet()==false)
  304. $kdlFlavor->_video = null;
  305. }
  306. /*
  307. * Audio stream initialization
  308. */
  309. {
  310. $kdlFlavor->_audio = new KDLAudioData();
  311. $kdlFlavor->_audio->_id = $cdlFlavor->getAudioCodec();
  312. // $flavor->_audio->_format = $cdlFlavor->getAudioFormat();
  313. // $flavor->_audio->_duration = $cdlFlavor->getAudioDuration();
  314. $kdlFlavor->_audio->_bitRate = $cdlFlavor->getAudioBitRate();
  315. $kdlFlavor->_audio->_channels = $cdlFlavor->getAudioChannels();
  316. $kdlFlavor->_audio->_sampleRate = $cdlFlavor->getAudioSampleRate();
  317. $kdlFlavor->_audio->_resolution = $cdlFlavor->getAudioResolution();
  318. if($kdlFlavor->_audio->IsDataSet()==false)
  319. $kdlFlavor->_audio = null;
  320. }
  321. $operators = $cdlFlavor->getOperators();
  322. $transObjArr = array();
  323. //KalturaLog::log(__METHOD__."\nCDL Flavor==>\n".print_r($cdlFlavor,true));
  324. if(!empty($operators) || $cdlFlavor->getEngineVersion()==1) {
  325. $transObjArr = KDLWrap::convertOperatorsCdl2Kdl($operators);
  326. $kdlFlavor->_engineVersion = 1;
  327. }
  328. else {
  329. $kdlFlavor->_engineVersion = 0;
  330. $trnsStr = $cdlFlavor->getConversionEngines();
  331. $extraStr = $cdlFlavor->getConversionEnginesExtraParams();
  332. $transObjArr=KDLUtils::parseTranscoderList($trnsStr, $extraStr);
  333. if($cdlFlavor instanceof flavorParamsOutputWrap || $cdlFlavor instanceof flavorParamsOutput) {
  334. $cmdLines = $cdlFlavor->getCommandLines();
  335. foreach($transObjArr as $transObj){
  336. $transObj->_cmd = $cmdLines[$transObj->_id];
  337. }
  338. }
  339. KalturaLog::log(__METHOD__."\ntranscoders==>\n".print_r($transObjArr,true));
  340. }
  341. KDLUtils::RecursiveScan($transObjArr, "transcoderSetFuncWrap", self::$TranscodersCdl2Kdl, "");
  342. $kdlFlavor->_transcoders = $transObjArr;
  343. if($cdlFlavor instanceof flavorParamsOutputWrap) {
  344. if($cdlFlavor->_isRedundant) {
  345. $kdlFlavor->_flags = $kdlFlavor->_flags | KDLFlavor::RedundantFlagBit;
  346. }
  347. if($cdlFlavor->_isNonComply) {
  348. $kdlFlavor->_flags = $kdlFlavor->_flags | KDLFlavor::BitrateNonComplyFlagBit;
  349. }
  350. $kdlFlavor->_errors = $kdlFlavor->_errors + $cdlFlavor->_errors;
  351. $kdlFlavor->_warnings = $kdlFlavor->_warnings + $cdlFlavor->_warnings;
  352. }
  353. if($cdlFlavor instanceof SwfFlavorParams || $cdlFlavor instanceof SwfFlavorParamsOutput) {
  354. $kdlFlavor->_swf = new KDLSWFData();
  355. $kdlFlavor->_swf->_flashVersion = $cdlFlavor->getFlashVersion();
  356. $kdlFlavor->_swf->_zoom = $cdlFlavor->getZoom();
  357. $kdlFlavor->_swf->_zlib = $cdlFlavor->getZlib();
  358. $kdlFlavor->_swf->_jpegQuality = $cdlFlavor->getJpegQuality();
  359. $kdlFlavor->_swf->_sameWindow = $cdlFlavor->getSameWindow();
  360. $kdlFlavor->_swf->_insertStop = $cdlFlavor->getInsertStop();
  361. $kdlFlavor->_swf->_useShapes = $cdlFlavor->getUseShapes();
  362. $kdlFlavor->_swf->_storeFonts = $cdlFlavor->getStoreFonts();
  363. $kdlFlavor->_swf->_flatten = $cdlFlavor->getFlatten();
  364. }
  365. if($cdlFlavor instanceof PdfFlavorParams || $cdlFlavor instanceof PdfFlavorParamsOutput) {
  366. $kdlFlavor->_pdf = new KDLPDFData();
  367. $kdlFlavor->_pdf->_resolution = $cdlFlavor->getResolution();
  368. $kdlFlavor->_pdf->_paperHeight = $cdlFlavor->getPaperHeight();
  369. $kdlFlavor->_pdf->_paperWidth = $cdlFlavor->getPaperWidth();
  370. $kdlFlavor->_pdf->_readonly = $cdlFlavor->getReadonly();
  371. }
  372. //KalturaLog::log(__METHOD__."\nKDL Flavor==>\n".print_r($kdlFlavor,true));
  373. return $kdlFlavor;
  374. }
  375. /* ------------------------------
  376. * function ConvertMediainfoCdl2Mediadataset
  377. */
  378. public static function ConvertMediainfoCdl2Mediadataset(mediaInfo $cdlMediaInfo, KDLMediaDataSet &$medSet)
  379. {
  380. // KalturaLog::log(__METHOD__."->".$cdlMediaInfo->getRawData());
  381. $medSet->_container = new KDLContainerData();
  382. $medSet->_streamsCollectionStr = $cdlMediaInfo->getMultiStreamInfo();
  383. $medSet->_container->_id=$cdlMediaInfo->getContainerId();
  384. $medSet->_container->_format=$cdlMediaInfo->getContainerFormat();
  385. $medSet->_container->_duration=$cdlMediaInfo->getContainerDuration();
  386. $medSet->_container->_bitRate=$cdlMediaInfo->getContainerBitRate();
  387. $medSet->_container->_fileSize=$cdlMediaInfo->getFileSize();
  388. if($medSet->_container->IsDataSet()==false)
  389. $medSet->_container = null;
  390. $medSet->_video = new KDLVideoData();
  391. $medSet->_video->_id = $cdlMediaInfo->getVideoCodecId();
  392. $medSet->_video->_format = $cdlMediaInfo->getVideoFormat();
  393. $medSet->_video->_duration = $cdlMediaInfo->getVideoDuration();
  394. $medSet->_video->_bitRate = $cdlMediaInfo->getVideoBitRate();
  395. $medSet->_video->_width = $cdlMediaInfo->getVideoWidth();
  396. $medSet->_video->_height = $cdlMediaInfo->getVideoHeight();
  397. $medSet->_video->_frameRate = $cdlMediaInfo->getVideoFrameRate();
  398. $medSet->_video->_dar = $cdlMediaInfo->getVideoDar();
  399. $medSet->_video->_rotation = $cdlMediaInfo->getVideoRotation();
  400. $medSet->_video->_scanType = $cdlMediaInfo->getScanType();
  401. /* {
  402. $medLoader = new KDLMediaInfoLoader($cdlMediaInfo->getRawData());
  403. $md = new KDLMediadataset();
  404. $medLoader->Load($md);
  405. if($md->_video)
  406. $medSet->_video->_scanType = $md->_video->_scanType;
  407. }
  408. */
  409. if($medSet->_video->IsDataSet()==false)
  410. $medSet->_video = null;
  411. $medSet->_audio = new KDLAudioData();
  412. $medSet->_audio->_id = $cdlMediaInfo->getAudioCodecId();
  413. $medSet->_audio->_format = $cdlMediaInfo->getAudioFormat();
  414. $medSet->_audio->_duration = $cdlMediaInfo->getAudioDuration();
  415. $medSet->_audio->_bitRate = $cdlMediaInfo->getAudioBitRate();
  416. $medSet->_audio->_channels = $cdlMediaInfo->getAudioChannels();
  417. $medSet->_audio->_sampleRate = $cdlMediaInfo->getAudioSamplingRate();
  418. $medSet->_audio->_resolution = $cdlMediaInfo->getAudioResolution();
  419. if($medSet->_audio->IsDataSet()==false)
  420. $medSet->_audio = null;
  421. return $medSet;
  422. }
  423. /* ------------------------------
  424. * function ConvertMediainfoCdl2Mediadataset
  425. */
  426. public static function ConvertMediainfoCdl2FlavorAsset(mediaInfo $cdlMediaInfo, flavorAsset &$fla)
  427. {
  428. KalturaLog::log(__METHOD__."==>");
  429. KalturaLog::log("\nCDL mediaInfo==>\n".print_r($cdlMediaInfo,true));
  430. /*
  431. $flavorAsset->setWidth($mediaInfoDb->getVideoWidth());
  432. $flavorAsset->setHeight($mediaInfoDb->getVideoHeight());
  433. $flavorAsset->setFrameRate($mediaInfoDb->getVideoFrameRate());
  434. $flavorAsset->setBitrate($mediaInfoDb->getContainerBitRate());
  435. $flavorAsset->setSize($mediaInfoDb->getFileSize());
  436. $flavorAsset->setContainerFormat($mediaInfoDb->getContainerFormat());
  437. $flavorAsset->setVideoCodecId($mediaInfoDb->getVideoCodecId());
  438. */
  439. $medSet = new KDLMediaDataSet();
  440. self::ConvertMediainfoCdl2Mediadataset($cdlMediaInfo, $medSet);
  441. KalturaLog::log("\nKDL mediaDataSet==>\n".print_r($medSet,true));
  442. // $fla = new flavorAsset();
  443. if(!is_null($medSet->_container)){
  444. $fla->setContainerFormat($medSet->_container->GetIdOrFormat());
  445. }
  446. $fla->setSize($cdlMediaInfo->getFileSize());
  447. $vidBr = 0;
  448. if($medSet->_video){
  449. $fla->setWidth($medSet->_video->_width);
  450. $fla->setHeight($medSet->_video->_height);
  451. $fla->setFrameRate($medSet->_video->_frameRate);
  452. $vidBr = $medSet->_video->_bitRate;
  453. $fla->setVideoCodecId($medSet->_video->GetIdOrFormat());
  454. }
  455. if($vidBr==0)
  456. $fla->setBitrate($medSet->_container->_bitRate);
  457. else
  458. $fla->setBitrate($vidBr);
  459. KalturaLog::log("\nCDL fl.Asset==>\n".print_r($fla,true));
  460. return $fla;
  461. }
  462. /* ------------------------------
  463. * function convertOperatorsCdl2Kdl
  464. */
  465. public static function convertOperatorsCdl2Kdl($operators)
  466. {
  467. KalturaLog::log(__METHOD__."\ncdlOperators==>\n".print_r($operators,true));
  468. $transObjArr = array();
  469. $oprSets = new kOperatorSets();
  470. // $operators = stripslashes($operators);
  471. //KalturaLog::log(__METHOD__."\ncdlOperators(stripslsh)==>\n".print_r($operators,true));
  472. $oprSets->setSerialized($operators);
  473. KalturaLog::log(__METHOD__."\noperatorSets==>\n".print_r($oprSets,true));
  474. foreach ($oprSets->getSets() as $oprSet) {
  475. if(count($oprSet)==1) {
  476. $opr = $oprSet[0];
  477. KalturaLog::log(__METHOD__."\n1==>\n".print_r($oprSet,true));
  478. $kdlOpr = new KDLOperationParams($opr);
  479. $transObjArr[] = $kdlOpr;
  480. }
  481. else {
  482. $auxArr = array();
  483. foreach ($oprSet as $opr) {
  484. KalturaLog::log(__METHOD__."\n2==>\n".print_r($oprSet,true));
  485. $kdlOpr = new KDLOperationParams($opr);
  486. $auxArr[] = $kdlOpr;
  487. }
  488. $transObjArr[] = $auxArr;
  489. }
  490. }
  491. return $transObjArr;
  492. }
  493. /* ------------------------------
  494. * function convertOperatorKdl2Cdl
  495. */
  496. public static function convertOperatorKdl2Cdl($kdlOperator, $id=null)
  497. {
  498. $opr = new kOperator();
  499. if(!$id || $id===false)
  500. $opr->id = $kdlOperator->_id;
  501. else
  502. $opr->id = $id;
  503. $opr->extra = $kdlOperator->_extra;
  504. $opr->command = $kdlOperator->_cmd;
  505. $opr->config = $kdlOperator->_cfg;
  506. return $opr;
  507. }
  508. /* ------------------------------
  509. * function convertOperatorsKdl2Cdl
  510. */
  511. public static function convertOperatorsKdl2Cdl($kdlOperators)
  512. {
  513. $cdlOprSets = new kOperatorSets();
  514. foreach($kdlOperators as $transObj) {
  515. $auxArr = array();
  516. if(is_array($transObj)) {
  517. foreach($transObj as $tr) {
  518. $key=array_search($tr->_id,self::$TranscodersCdl2Kdl);
  519. // $opr = new kOperator();
  520. // if($key===false)
  521. // $opr->id = $tr->_id;
  522. // else
  523. // $opr->id = $key;
  524. // $opr->extra = $tr->_extra;
  525. // $opr->command = $tr->_cmd;
  526. // $opr->config = $tr->_cfg;
  527. // $auxArr[] = $opr;
  528. $auxArr[] = KDLWrap::convertOperatorKdl2Cdl($tr, $key);
  529. }
  530. }
  531. else {
  532. $key=array_search($transObj->_id,self::$TranscodersCdl2Kdl);
  533. // $opr = new kOperator();
  534. // if($key===false)
  535. // $opr->id = $transObj->_id;
  536. // else
  537. // $opr->id = $key;
  538. // $opr->extra = $transObj->_extra;
  539. // $opr->command = $transObj->_cmd;
  540. // $opr->config = $transObj->_cfg;
  541. // $auxArr[] = $opr;
  542. $auxArr[] = KDLWrap::convertOperatorKdl2Cdl($transObj, $key);
  543. }
  544. $cdlOprSets->addSet($auxArr);
  545. }
  546. return $cdlOprSets;
  547. }
  548. }
  549. /* ===========================
  550. * flavorParamsOutputWrap
  551. */
  552. class flavorParamsOutputWrap extends flavorParamsOutput {
  553. /* ---------------------
  554. * Data
  555. */
  556. public $_isRedundant=false;
  557. public $_isNonComply=false;
  558. public $_force=false;
  559. public $_create_anyway=false;
  560. public $_errors=array(),
  561. $_warnings=array();
  562. /* ------------------------------
  563. * IsValid
  564. */
  565. public function IsValid()
  566. {
  567. return (count($this->_errors)==0);
  568. }
  569. }
  570. /* ---------------------------
  571. * transcoderSetFuncWrap
  572. */
  573. function transcoderSetFuncWrap($oprObj, $transDictionary, $param2)
  574. {
  575. $trId = KDLUtils::trima($oprObj->_id);
  576. if(!is_null($transDictionary) && array_key_exists($trId, $transDictionary)){
  577. $oprObj->_id = $transDictionary[$trId];
  578. }
  579. // $oprObj->_engine = KDLWrap::GetEngineObject($oprObj->_id);
  580. $id = $oprObj->_id;
  581. KalturaLog::log(__METHOD__.":operators id=$id :");
  582. $engine=null;
  583. if(isset($oprObj->_className) && class_exists($oprObj->_className)){
  584. try {
  585. $engine = new $oprObj->_className($id);
  586. }
  587. catch(Exception $e){
  588. $engine=null;
  589. }
  590. }
  591. if(isset($engine)) {
  592. KalturaLog::log(__METHOD__.": the engine was successfully overloaded with $oprObj->_className");
  593. }
  594. else {
  595. switch($id){
  596. case KDLTranscoders::KALTURA:
  597. case KDLTranscoders::ON2:
  598. case KDLTranscoders::FFMPEG:
  599. case KDLTranscoders::MENCODER:
  600. case KDLTranscoders::ENCODING_COM:
  601. case KDLTranscoders::FFMPEG_AUX:
  602. case KDLTranscoders::FFMPEG_VP8:
  603. case KDLTranscoders::EE3:
  604. $engine = new KDLOperatorWrapper($id);
  605. break;
  606. case KDLTranscoders::QUICK_TIME_PLAYER_TOOLS:
  607. $engine = KalturaPluginManager::loadObject('KDLOperatorBase', "quickTimeTools.QuickTimeTools");
  608. break;
  609. default:
  610. // KalturaLog::log("in default :operators id=$id :");
  611. $engine = KalturaPluginManager::loadObject('KDLOperatorBase', $id);
  612. break;
  613. }
  614. }
  615. if(is_null($engine)) {
  616. KalturaLog::log(__METHOD__.":ERROR - plugin manager returned with null");
  617. }
  618. else {
  619. $oprObj->_engine = $engine;
  620. KalturaLog::log(__METHOD__."Engine object from plugin mgr==>\n".print_r($oprObj->_engine,true));
  621. }
  622. return;
  623. }
  624. ?>