2016-10-25 5 views
1

私はVideoStreamクラスを使用しています。とてもうまく動作します。私はそれをPage_Controllerの中に統合しようとし、ビデオがアップロードされないようにしています。したがって、ページが読み込まれるたびに、ビデオリンクは常にリロード時に変更され、誰もブラウザのURLから直接ダウンロードすることはできません。SilverStripeのPHP VideoStreamクラス

しかし、クラスは動作していないようだし、私は逃したものがわからない。また、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']); 
    } 
} 
+0

結果ページ(映像部分)のソースコードは何ですか? src = ""属性の期待値はでしたか? –

+0

ビデオソースVideoMP4は、ページモデルにhas_one配列で保持されます。シルバーストライプの経験はありましたか? – StefGuev

+0

@ 3dgoo、英語とコードを清掃してくれてありがとう!あなたは答えがありますか?あなたはSilverstripeコーディングの教祖のようです。 – StefGuev

答えて

0

これを行う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

魅力的な作品! $ stream変数をあなたのものに置き換えるだけです。 $ stream = new VideoStream($ this-> VideoMP4() - > getFullPath()); ありがとう、ありがとう。私はgetFullPath()コマンドを知らなかった。 – StefGuev

関連する問題