transcoder_video.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /**
  3. * @package Dolphin Core
  4. * @copyright Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  5. * @license CC-BY - http://creativecommons.org/licenses/by/3.0/
  6. */
  7. /**
  8. * @page samples
  9. * @section transcoder_videos Transcoder Videos
  10. *
  11. * This sample shows how transcoder can be used for video files.
  12. *
  13. * @code
  14. CREATE TABLE `sample_transcoder_video_orig` (
  15. `id` int(11) NOT NULL AUTO_INCREMENT,
  16. `profile_id` int(10) unsigned NOT NULL,
  17. `remote_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  18. `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  19. `file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  20. `mime_type` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
  21. `ext` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  22. `size` int(11) NOT NULL,
  23. `added` int(11) NOT NULL,
  24. `modified` int(11) NOT NULL,
  25. `private` int(11) NOT NULL,
  26. PRIMARY KEY (`id`),
  27. UNIQUE KEY `remote_id` (`remote_id`)
  28. );
  29. INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES
  30. ('sample_transcoder_video_orig', 'Local', '', 360, 2592000, 0, 'sample_transcoder_video_orig', 'allow-deny', 'avi,flv,mpg,mpeg,wmv,mp4,m4v,mov,divx,xvid,3gp,webm', '', 0, 0, 0, 0, 0, 0);
  31. CREATE TABLE `sample_transcoder_video` (
  32. `id` int(11) NOT NULL AUTO_INCREMENT,
  33. `profile_id` int(10) unsigned NOT NULL,
  34. `remote_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  35. `path` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  36. `file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  37. `mime_type` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
  38. `ext` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  39. `size` int(11) NOT NULL,
  40. `added` int(11) NOT NULL,
  41. `modified` int(11) NOT NULL,
  42. `private` int(11) NOT NULL,
  43. PRIMARY KEY (`id`),
  44. UNIQUE KEY `remote_id` (`remote_id`)
  45. );
  46. INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES
  47. ('sample_transcoder_video', 'Local', '', 360, 2592000, 0, 'sample_transcoder_video', 'allow-deny', 'avi,flv,mpg,mpeg,wmv,mp4,m4v,mov,divx,xvid,3gp,webm,jpg', '', 0, 0, 0, 0, 0, 0);
  48. INSERT INTO `sys_objects_transcoder` (`object`, `storage_object`, `source_type`, `source_params`, `private`, `atime_tracking`, `atime_pruning`, `ts`, `override_class_name`, `override_class_file`) VALUES
  49. ('sample_video_poster', 'sample_transcoder_video', 'Storage', 'a:1:{s:6:"object";s:28:"sample_transcoder_video_orig";}', 'no', 0, 0, 0, 'BxDolTranscoderVideo', ''),
  50. ('sample_video_mp4', 'sample_transcoder_video', 'Storage', 'a:1:{s:6:"object";s:28:"sample_transcoder_video_orig";}', 'no', 0, 0, 0, 'BxDolTranscoderVideo', ''),
  51. ('sample_video_webm', 'sample_transcoder_video', 'Storage', 'a:1:{s:6:"object";s:28:"sample_transcoder_video_orig";}', 'no', 0, 0, 0, 'BxDolTranscoderVideo', '');
  52. INSERT INTO `sys_transcoder_filters` (`transcoder_object`, `filter`, `filter_params`, `order`) VALUES
  53. ('sample_video_webm', 'Webm', 'a:2:{s:1:"h";s:3:"480";s:10:"force_type";s:4:"webm";}', 0),
  54. ('sample_video_mp4', 'Mp4', 'a:2:{s:1:"h";s:3:"480";s:10:"force_type";s:3:"mp4";}', 0),
  55. ('sample_video_poster', 'Poster', 'a:2:{s:1:"h";s:3:"480";s:10:"force_type";s:3:"jpg";}', 0);
  56. * @endcode
  57. *
  58. */
  59. require_once('./../inc/header.inc.php');
  60. require_once(BX_DIRECTORY_PATH_INC . "design.inc.php");
  61. bx_import('BxDolLanguages');
  62. bx_import('BxDolTemplate');
  63. $oTemplate = BxDolTemplate::getInstance();
  64. $oTemplate->setPageNameIndex (BX_PAGE_DEFAULT);
  65. $oTemplate->setPageHeader ("Sample video transcoder");
  66. $oTemplate->setPageContent ('page_main_code', PageCompMainCode());
  67. $oTemplate->getPageCode();
  68. /**
  69. * page code function
  70. */
  71. function PageCompMainCode()
  72. {
  73. ob_start();
  74. $sTranscoderObjectPoster = 'sample_video_poster';
  75. $sTranscoderObjectMP4 = 'sample_video_mp4';
  76. $sTranscoderObjectWebM = 'sample_video_webm';
  77. $sStorageObjectOrig = 'sample_transcoder_video_orig';
  78. $iProfileId = bx_get_logged_profile_id();
  79. if (!$iProfileId) {
  80. echo "You aren't logged in.";
  81. exit;
  82. }
  83. bx_import('BxDolTranscoderVideo');
  84. $iPrunedFiles = BxDolTranscoder::pruning();
  85. if ($iPrunedFiles) {
  86. echo "iPrunedFiles: $iPrunedFiles";
  87. exit;
  88. }
  89. $oTranscoderPoster = BxDolTranscoderVideo::getObjectInstance($sTranscoderObjectPoster);
  90. $oTranscoderMP4 = BxDolTranscoderVideo::getObjectInstance($sTranscoderObjectMP4);
  91. $oTranscoderWebM = BxDolTranscoderVideo::getObjectInstance($sTranscoderObjectWebM);
  92. if (!$oTranscoderPoster || !$oTranscoderMP4 || !$oTranscoderWebM) {
  93. echo "Transcoder object is not available: " . $sTranscoderObjectPoster . ', ' . $sTranscoderObjectMP4 . ', ' . $sTranscoderObjectWebM;
  94. exit;
  95. }
  96. echo "registerHandlers poster: [" . $oTranscoderPoster->registerHandlers() . "] <br />\n";
  97. echo "registerHandlers mp4: [" . $oTranscoderMP4->registerHandlers() . "] <br />\n";
  98. echo "registerHandlers webm: [" . $oTranscoderWebM->registerHandlers() . "] <hr class='bx-def-hr' />\n";
  99. bx_import('BxDolStorage');
  100. $oStorageOrig = BxDolStorage::getObjectInstance($sStorageObjectOrig);
  101. if (!$oStorageOrig) {
  102. echo "Storage object is not available: " . $sStorageObjectOrig;
  103. exit;
  104. }
  105. if (isset($_POST['upload'])) {
  106. $iId = $oStorageOrig->storeFileFromForm($_FILES['file'], true, $iProfileId);
  107. if ($iId) {
  108. $iCount = $oStorageOrig->afterUploadCleanup($iId, $iProfileId);
  109. echo "<h2>Uploaded file id: " . $iId . "(deleted ghosts:" . $iCount . ") </h2>";
  110. // force transcode
  111. echo "Force transcode: <br />";
  112. echo "poster: " . $oTranscoderPoster->getFileUrl($iId) . '<br />';
  113. echo "mp4: " . $oTranscoderMP4->getFileUrl($iId) . '<br />';
  114. echo "webm: " . $oTranscoderWebM->getFileUrl($iId) . '<hr class="bx-def-hr" />';
  115. } else {
  116. echo "<h2>Error uploading file: " . $oStorage->getErrorString() . '</h2><hr class="bx-def-hr" />';
  117. }
  118. }
  119. elseif (isset($_POST['delete'])) {
  120. foreach ($_POST['file_id'] as $iFileId) {
  121. $bRet = $oStorageOrig->deleteFile($iFileId, $iProfileId);
  122. if ($bRet)
  123. echo "<h2>Deleted file id: " . $iFileId . '</h2><hr class="bx-def-hr" />';
  124. else
  125. echo "<h2>File deleting error: " . $oStorageOrig->getErrorString() . '</h2><hr class="bx-def-hr" />';
  126. }
  127. }
  128. else {
  129. $a = $oStorageOrig->getFilesAll();
  130. foreach ($a as $r) {
  131. $sUrlPoster = $oTranscoderPoster->getFileUrl($r['id']);
  132. $sUrlMP4 = $oTranscoderMP4->getFileUrl($r['id']);
  133. $sUrlWebM = $oTranscoderWebM->getFileUrl($r['id']);
  134. echo '<h3>' . $r['file_name'] . '</h3>
  135. <video controls="" preload="none" autobuffer="" poster="' . $sUrlPoster . '" style="width:100%; height:200px;">
  136. ' . ($sUrlWebM ? '<source type="video/webm; codecs="vp8, vorbis" src="' . $sUrlWebM . '" />' : '') . '
  137. ' . ($sUrlMP4 ? '<source type="video/mp4" src="' . $sUrlMP4 . '" />' : '') . '
  138. </video>
  139. <hr class="bx-def-hr" />';
  140. }
  141. }
  142. $a = $oStorageOrig->getFilesAll();
  143. ?>
  144. <h2>Files List</h2>
  145. <form method="POST">
  146. <?php foreach ($a as $r): ?>
  147. <input type="checkbox" name="file_id[]" value="<?=$r['id'] ?>" />
  148. <?=$r['file_name'] ?>
  149. <br />
  150. <?php endforeach; ?>
  151. <input type="submit" name="delete" value="Delete" class="bx-btn bx-btn-small bx-def-margin-sec-top" style="float:none;" />
  152. </form>
  153. <hr class="bx-def-hr" />
  154. <h2>Upload</h2>
  155. <form enctype="multipart/form-data" method="POST">
  156. <input type="file" name="file" />
  157. <br />
  158. <input type="submit" name="upload" value="Upload" class="bx-btn bx-btn-small bx-def-margin-sec-top" style="float:none;" />
  159. </form>
  160. <?php
  161. $s = ob_get_clean();
  162. return DesignBoxContent("Sample video transcoder", $s, BX_DB_PADDING_DEF);
  163. }