mp4 — класс PHP VideoStream в SilverStripe

я использую VideoStream класс, и это работает очень хорошо. Я пытаюсь интегрировать его в Page_Controller и защитить видео от загрузки. Таким образом, каждый раз, когда страница загружается, ссылка на видео всегда изменяется при перезагрузке, и никто не может загрузить ее непосредственно с URL-адреса браузера.

Но класс, кажется, не работает, и я не знаю, что я пропустил. Я также использую ChunkedUpload модуль для загрузки больших файлов в CMS.

Есть идеи, как использовать этот класс?

Вот мой код

Примечание: мой код работает, я отмечу ниже «мой оригинал …»

PageVideo.ss

<video controls preload="auto" id="video1">
<% if $VideoMP4 %><source src="id/$Video($VideoMP4.ID)" type="video/mp4"><% end_if %>
Your browser does not support HTML5 video.
</video>

PageVideo.php

class PageVideo extends Page {

private static $has_one = array(
'VideoMP4' => 'File'
);

function getCMSFields() {
$fields = parent::getCMSFields();

$fields->addFieldToTab(
'Root.Main ',
$uploadField = new ChunkedUploadField(
$name = 'VideoMP4',
$title = "VideoMP4")
);

$uploadField->setFolderName('Uploads/videos/');
$uploadField->setDisplayFolderName('Uploads/videos');
$uploadField->getValidator()->allowedExtensions = array("mp4");

$sizeMB = 500 * 1024 * 1024; // 500 MB in bytes
$uploadField->getValidator()->setAllowedMaxFileSize($sizeMB);
$uploadField->setConfig('maxChunkSize', .05 * 1024 * 1024 );

return $fields;
}
}

class PageVideo_Controller extends Page_Controller {

private static $allowed_actions = array('VideoGrab');
private static $url_handlers = array('id/$hash' => 'VideoGrab');

public function VideoGrab(SS_HTTPRequest $request) {

$hash = $request->param('hash');

$file = File::get()->filter('ID', $_SESSION['keyID'])->first();

if (md5($file->Name . $_SESSION['key']) == $hash) {

$_SESSION['key'] = "";
$_SESSION['keyID'] = "";

//**************** HERE IS THE CLASS *********************
include "libraries/VideoStream.php";
$stream = new VideoStream($file->AbsoluteURL);
$stream->start();
exit;

// the original php working just for some browsing and bad codes
/*
$ext = pathinfo($file->Filename);
header('Cache-control: private');
header('Content-Type: video/' . $ext['extension']);
header('Accept-Ranges: bytes');
header("Content-Transfer-Encoding: binary");

return readfile($file->AbsoluteURL);
exit;
*/
} else {
return $this->httpError(404, "Not Found");
}
}

public function Video($n) {

$file = File::get()->filter('ID', $n)->First();
$_SESSION['key'] = time();
$_SESSION['keyID'] = $file->ID;

return md5($file->Name . $_SESSION['key']);
}
}

1

Решение

Вот один из способов сделать это.

Учебный класс

class PageVideo extends Page {

private static $has_one = array(
'VideoMP4' => 'File'
);

function getCMSFields() {
$fields = parent::getCMSFields();

$fields->addFieldToTab('Root.Video', $uploadField = UploadField::create('VideoMP4'));

$uploadField->setFolderName('Uploads/videos/');
$uploadField->getValidator()->allowedExtensions = array('mp4');

return $fields;
}
}

class PageVideo_Controller extends Page_Controller {

private static $allowed_actions = array(
'VideoStream'
);

function VideoStream() {
if ($this->VideoMP4()->exists()) {
include 'libraries/VideoStream.php';
$stream = new VideoStream($this->VideoMP4()->getFullPath());
return $stream->start();
}
return false;
}
}

шаблон

<% if $VideoMP4 %>
<video controls preload="auto" id="video1">
<source src="{$Link}VideoStream" type="video/mp4">
Your browser does not support HTML5 video.
</video>
<% end_if %>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]