<?php
   require_once 'video_streamer_chunked_basic.php';
   require_once 'video_streamer_range_basic.php';
   require_once 'video_streamer_range_random_chunk.php';
   require_once 'video_streamer_range_throttled.php';

   class VideoStreamerFactory {
      protected $_video_path = "";
      protected $_require_cookie = false;
      protected $_use_range_request = false;
      protected $_use_random_chunk_size = false;
      protected $_chunk_size = 0;
      protected $_min_chunk_size = 0;
      protected $_max_chunk_size = 0;
      protected $_chunk_size_step_number = 0;
      protected $_target_byterate = 0;

      public function __construct($video_path, $require_cookie, $use_range_request,
                                  $use_random_chunk_size, $chunk_size, $min_chunk_size,
                                  $max_chunk_size, $chunk_size_step_number, $target_byterate) {
         $this->_video_path = $video_path;
         $this->_require_cookie = $require_cookie;
         $this->_use_range_request = $use_range_request;
         $this->_use_random_chunk_size = $use_random_chunk_size;
         $this->_chunk_size = $chunk_size;
         $this->_min_chunk_size = $min_chunk_size;
         $this->_max_chunk_size = $max_chunk_size;
         $this->_chunk_size_step_number = $chunk_size_step_number;
         $this->_target_byterate = $target_byterate;
      }

      public function createStreamer() {
         if (!$this->_use_range_request) {
            return new VideoStreamerChunkedBasic(
               $this->_video_path, $this->_require_cookie, $this->_chunk_size);
         }
         if ($this->_use_random_chunk_size) {
            return new VideoStreamerRangeRandomChunk(
               $this->_video_path, $this->_require_cookie,
               $this->_min_chunk_size, $this->_max_chunk_size, $this->_chunk_size_step_number);
         }
         if ($this->_target_byterate > 0) {
            return new VideoStreamerRangeThrottled(
               $this->_video_path, $this->_require_cookie,
               $this->_chunk_size, $this->_target_byterate);
         }
         return new VideoStreamerRangeBasic(
            $this->_video_path, $this->_require_cookie, $this->_chunk_size);
      }
   }
?>