1
0

BxDolTranscoderProxy.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaCore UNA Core
  7. * @{
  8. */
  9. /**
  10. * This transcoder can be used as universal transcoder for videos and images.
  11. * Depending on original file MIME type it calls the appropriate transcoder.
  12. * Proxied transcoders names are specified in 'source_params' array:
  13. * - object: original file storage object
  14. * - image: image transcoder name
  15. * - video_poster: video transcoder name for video poster image
  16. * - video: video transcoders array to force conversion for
  17. */
  18. class BxDolTranscoderProxy extends BxDolTranscoder implements iBxDolFactoryObject
  19. {
  20. protected function __construct($aObject, $oStorage)
  21. {
  22. parent::__construct($aObject, $oStorage);
  23. $this->_oDb = new BxDolTranscoderImageQuery($aObject, false);
  24. $this->_sQueueTable = $this->_oDb->getQueueTable();
  25. }
  26. /**
  27. * check if transcoder suppors given file mime type
  28. */
  29. public function isMimeTypeSupported($sMimeType)
  30. {
  31. if (!empty($this->_aObject['source_params']['image']))
  32. $sTranscoder = $this->_aObject['source_params']['image'];
  33. elseif (!empty($this->_aObject['source_params']['video_poster']))
  34. $sTranscoder = $this->_aObject['source_params']['video_poster'];
  35. elseif (!empty($this->_aObject['source_params']['video']))
  36. $sTranscoder = $this->_aObject['source_params']['video'];
  37. else
  38. return false;
  39. if (!($oTranscoder = BxDolTranscoder::getObjectInstance($sTranscoder)))
  40. return false;
  41. return $oTranscoder->isMimeTypeSupported($sMimeType);
  42. }
  43. /**
  44. * Depending on original file mime type call appropriate transcoder
  45. */
  46. public function getFileUrl($mixedHandler)
  47. {
  48. $oStorageOriginal = BxDolStorage::getObjectInstance($this->_aObject['source_params']['object']);
  49. if (!$oStorageOriginal)
  50. return false;
  51. $aFile = $oStorageOriginal->getFile($mixedHandler);
  52. if (!$aFile)
  53. return false;
  54. $sTranscoder = '';
  55. if (0 === strncmp($aFile['mime_type'], 'image/', 6) && !empty($this->_aObject['source_params']['image'])) {
  56. $sTranscoder = $this->_aObject['source_params']['image'];
  57. }
  58. elseif (0 === strncmp($aFile['mime_type'], 'video/', 6) && !empty($this->_aObject['source_params']['video_poster'])) {
  59. $sTranscoder = $this->_aObject['source_params']['video_poster'];
  60. // if additional video transcoders provided call it to force video conversion
  61. if (!empty($this->_aObject['source_params']['video']))
  62. foreach ($this->_aObject['source_params']['video'] as $sVideoTranscoder) {
  63. if (!($oTranscoder = BxDolTranscoderVideo::getObjectInstance($sVideoTranscoder)))
  64. continue;
  65. $oTranscoder->getFileUrl($mixedHandler);
  66. }
  67. }
  68. if (!$sTranscoder)
  69. return false;
  70. if (!($oTranscoder = BxDolTranscoderImage::getObjectInstance($sTranscoder)))
  71. return false;
  72. return $oTranscoder->getFileUrl($mixedHandler);
  73. }
  74. }
  75. /** @} */