BxDolTranscoderProxy.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 ($this->_isImage($sMimeType) && !empty($this->_aObject['source_params']['image']))
  32. $sTranscoder = $this->_aObject['source_params']['image'];
  33. elseif ($this->_isVideo($sMimeType) && !empty($this->_aObject['source_params']['video_poster']))
  34. $sTranscoder = $this->_aObject['source_params']['video_poster'];
  35. else
  36. return false;
  37. $oTranscoder = BxDolTranscoder::getObjectInstance($sTranscoder);
  38. if (!$oTranscoder)
  39. return false;
  40. return $oTranscoder->isMimeTypeSupported($sMimeType);
  41. }
  42. /**
  43. * Depending on original file mime type call appropriate transcoder
  44. */
  45. public function getFileUrl($mixedHandler)
  46. {
  47. $oStorageOriginal = BxDolStorage::getObjectInstance($this->_aObject['source_params']['object']);
  48. if (!$oStorageOriginal)
  49. return false;
  50. $aFile = $oStorageOriginal->getFile($mixedHandler);
  51. if (!$aFile)
  52. return false;
  53. $sTranscoder = '';
  54. if ($this->_isImage($aFile['mime_type']) && !empty($this->_aObject['source_params']['image'])) {
  55. $sTranscoder = $this->_aObject['source_params']['image'];
  56. }
  57. elseif ($this->_isVideo($aFile['mime_type']) && !empty($this->_aObject['source_params']['video_poster'])) {
  58. $sTranscoder = $this->_aObject['source_params']['video_poster'];
  59. // if additional video transcoders provided call it to force video conversion
  60. if (!empty($this->_aObject['source_params']['video']))
  61. foreach ($this->_aObject['source_params']['video'] as $sVideoTranscoder) {
  62. if (!($oTranscoder = BxDolTranscoderVideo::getObjectInstance($sVideoTranscoder)))
  63. continue;
  64. $oTranscoder->getFileUrl($mixedHandler);
  65. }
  66. }
  67. if (!$sTranscoder)
  68. return false;
  69. if (!($oTranscoder = BxDolTranscoderImage::getObjectInstance($sTranscoder)))
  70. return false;
  71. return $oTranscoder->getFileUrl($mixedHandler);
  72. }
  73. protected function _isImage($sMimeType)
  74. {
  75. return strncmp($sMimeType, 'image/', 6) === 0;
  76. }
  77. protected function _isVideo($sMimeType)
  78. {
  79. return strncmp($sMimeType, 'video/', 6) === 0;
  80. }
  81. }
  82. /** @} */