Beispiel #1
0
 /**
  * Execute vlcwrapper initialization on the first request
  */
 private function lazyInit()
 {
     if ($this->_initialized === false) {
         $options = $this->options;
         $adapterConf = $options->get('adapter', new Zend_Config(array()));
         $adapter = $adapterConf->get('name', "X_Vlc_Adapter_" . (X_Env::isWindows() ? 'Windows' : 'Linux'));
         X_Debug::i("Adapter: {$adapter}");
         $this->adapter = new $adapter($options);
         $commanderConf = $options->get('commander', new Zend_Config(array()));
         $commander = $commanderConf->get('name', '');
         $commanderPath = $commanderConf->get('path', '');
         if ($commanderPath != '' && file_exists($commanderPath)) {
             X_Debug::i("Including commanderPath: {$commanderPath}");
             include_once $commanderPath;
         }
         if (class_exists($commander, true) && array_key_exists('X_Vlc_Commander', class_parents($commander))) {
             X_Debug::i("Commander: {$commander}");
             $commander = new $commander($options);
             $this->adapter->setCommander($commander);
         } else {
             X_Debug::w("Commander: no selection");
         }
         $this->_conf_vlcArgs = $options->get('args', "{%source%} --play-and-exit --sout=\"#{%profile%}:{%output%}\" --sout-keep {%subtitles%} {%audio%} {%filters%}");
         $this->_conf_vlcPath = $options->get('path', "vlc");
         $this->_initialized = true;
     }
 }
 public function startEngine(X_Threads_Thread $thread)
 {
     // assume all parameters are ready
     $thread->log("Spawning RTMPDump (rtmpdump-weebtv | vlc)...");
     $source = $this->getParam('source');
     // set the path
     if (X_Env::isWindows()) {
         X_RtmpDumpWeebTv::getInstance()->setPath(APPLICATION_PATH . '/../bin/rtmpdump-weebtv-win/rtmpdump-weebtv.exe');
     } else {
         X_RtmpDumpWeebTv::getInstance()->setPath(APPLICATION_PATH . '/../bin/rtmpdump-weebtv-linux/rtmpdump-weebtv');
     }
     $weebPlugin = X_VlcShares_Plugins::broker()->getPlugins('weebtv');
     if ($weebPlugin instanceof X_VlcShares_Plugins_WeebTv && X_VlcShares_Plugins::helpers()->streamer()->isRegistered('vlc')) {
         // try to get reference to vlc-streamer
         /* @var $vlcStreamer X_Streamer_Engine_Vlc */
         $vlcStreamer = X_VlcShares_Plugins::helpers()->streamer()->get('vlc');
         // get the channel id
         $source = substr($source, strlen('rtmpdump-weebtv://'));
         // make the plugin to parse params from server and build a rtmpdump-weebtv uri
         $source = $weebPlugin->getLinkParams($source);
         // always live
         $command = (string) X_RtmpDumpWeebTv::getInstance()->parseUri($source);
         $vlcStreamer->getVlcWrapper()->setPipe($command);
         $vlcStreamer->setSource('-');
         $vlcStreamer->setParam('profile', "#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:{$weebPlugin->getStreamingPort()}/stream}");
         // redirect std error to null
         // and force quite
         //X_Env::execute("$command -q 2> /dev/null", X_Env::EXECUTE_OUT_NONE, X_Env::EXECUTE_PS_WAIT);
         //X_Env::execute($command, X_Env::EXECUTE_OUT_NONE, X_Env::EXECUTE_PS_WAIT);
         $vlcStreamer->getVlcWrapper()->spawn();
         $thread->log("RTMPDump execution finished");
     } else {
         $thread->log("RTMPDump-weebtv cannot be started without weebtv plugin and vlc streamer");
     }
 }
 public function forceKill()
 {
     if (!X_Env::isWindows()) {
         X_Env::execute("kill -9 `ps aux | grep {$this->path} | grep -v grep | awk '{print \$2}'`", X_Env::EXECUTE_OUT_NONE, X_Env::EXECUTE_PS_WAIT);
     } else {
         X_Env::execute("taskkill /IM SopCast.exe /F", X_Env::EXECUTE_OUT_NONE, X_Env::EXECUTE_PS_WAIT);
     }
 }
 /**
  * 
  * @param DirectoryIterator $entry
  */
 private function _checkEntry($entry)
 {
     if (X_Env::isWindows()) {
         return !$this->_isHiddenOnWindows($entry);
     } else {
         // in linux, hidden files start with .
         if (substr(pathinfo($entry, PATHINFO_BASENAME), 0, 1) == '.') {
             return false;
         }
     }
     return true;
 }
 /**
  * This hook can be used check vlc status just before
  * spawn is called
  * 
  * @param X_Vlc $vlc vlc wrapper object
  * @param string $provider id of the plugin that should handle request
  * @param string $location to stream
  * @param Zend_Controller_Action $controller the controller who handle the request
  */
 public function preSpawnVlc(X_Vlc $vlc, $provider, $location, Zend_Controller_Action $controller)
 {
     // TODO port to newer api when ready
     // when newer X_Vlc's api will be ready
     // i will need change this to
     // $source = $vlc->getSource();
     // and double quote removal will be automatic
     $source = $vlc->getArg('source');
     $provider = X_VlcShares_Plugins::broker()->getPlugins($provider);
     //if ( X_Env::isWindows() && !X_Env::startWith($source, 'http://') && !X_Env::startWith($source, 'https://') ) {
     if (X_Env::isWindows() && is_a($provider, 'X_VlcShares_Plugins_FileSystem')) {
         // with newer api this will be useless
         $source = realpath(trim($source, '"'));
         // when newer X_Vlc's api will be ready
         // i will need change this to
         // $vlc->setSource($source);
         // and double quotation will be automatic
         $vlc->registerArg('source', "\"{$source}\"");
     }
 }
 public function autosearchAction()
 {
     $autosearch_LINUX = array('/usr/bin/vlc', '/bin/vlc', '/usr/local/bin/vlc');
     $autosearch_WINDOWS = array('C:\\Programmi\\VideoLan\\Vlc\\vlc.exe', 'C:\\Programmi\\Vlc\\vlc.exe', 'C:\\Programmi\\VideoLan\\vlc.exe', 'C:\\Program files\\VideoLan\\Vlc\\vlc.exe', 'C:\\Program files\\Vlc\\vlc.exe', 'C:\\Program files\\VideoLan\\vlc.exe', 'C:\\Program files (x86)\\VideoLan\\Vlc\\vlc.exe', 'C:\\Program files (x86)\\Vlc\\vlc.exe', 'C:\\Program files (x86)\\VideoLan\\vlc.exe');
     $searchPath = X_Env::isWindows() ? $autosearch_WINDOWS : $autosearch_LINUX;
     $found = false;
     foreach ($searchPath as $path) {
         if (file_exists($path)) {
             $found = $path;
             break;
         }
     }
     if ($found !== false) {
         $found = array('path' => $found, 'isError' => false);
     } else {
         $found = array('path' => '', 'isError' => true);
     }
     /*
     $this->_helper->viewRenderer->setNoRender(true);
     $this->_helper->layout->disableLayout();
     */
     $this->_helper->json($found);
 }
 private function _invoke()
 {
     $source = $this->_location;
     $osTweak = X_Env::isWindows() ? '2>&1' : '2>&1';
     $ffmpeg = "\"{$this->options->path}\"";
     $str = X_Env::execute("{$ffmpeg} -i \"{$source}\" {$osTweak}", X_Env::EXECUTE_OUT_ARRAY, X_Env::EXECUTE_PS_WAIT);
     return $str;
 }
Beispiel #8
0
 public function getDefaultVlcArg()
 {
     $host = $this->options->get('commander', new Zend_Config(array()))->get('nc_host', '127.0.0.1');
     $port = $this->options->get('commander', new Zend_Config(array()))->get('nc_port', '4212');
     if (X_Env::isWindows()) {
         return '-I oldrc --rc-host="' . $host . ':' . $port . '"';
     } else {
         return '-I rc --rc-host="' . $host . ':' . $port . '" --rc-fake-tty';
     }
 }
 private function _ffmpegCheck($path)
 {
     if (file_exists($path)) {
         if (X_Env::isWindows()) {
             // windows check
             if (is_file($path)) {
                 $filename = pathinfo($path, PATHINFO_BASENAME);
                 if (strtolower($filename) == 'ffmpeg.exe') {
                     return true;
                 }
             }
         } else {
             if (is_file($path)) {
                 $filename = pathinfo($path, PATHINFO_BASENAME);
                 if (strtolower($filename) == 'ffmpeg') {
                     return true;
                 }
             }
         }
     }
     return false;
 }
 public function forceKill()
 {
     if (!X_Env::isWindows()) {
         X_Env::execute("killall rtmpgw-own3d", X_Env::EXECUTE_OUT_NONE, X_Env::EXECUTE_PS_WAIT);
     } else {
         X_Env::execute("taskkill /IM rtmpgw-own3d.exe /F", X_Env::EXECUTE_OUT_NONE, X_Env::EXECUTE_PS_WAIT);
     }
 }
// ============================================ //
// check if db needs manipulation
foreach ($dbInits as $dbInit => $enabled) {
    if ($enabled) {
        $schemaSql = file_get_contents($dbInit);
        // use the connection directly to load sql in batches
        $dbAdapter->getConnection()->exec($schemaSql);
    }
}
foreach ($neededDirectories as $dir) {
    if (!file_exists($dir)) {
        mkdir($dir, 0777, true);
    }
}
foreach ($neededLinks as $linkFrom => $linkTo) {
    if (X_Env::isWindows()) {
        // symlink doesn't work:
        // i need to copy the file everytime
        // and the old file will be overwritten
        copy($linkFrom, $linkTo);
    } else {
        symlink($linkFrom, $linkTo);
    }
}
// let's add models classes
foreach ($includeFiles as $file) {
    @(include_once $file);
}
// let's add views path in view
foreach ($viewScriptsPath as $viewScriptPath) {
    $view->addScriptPath($viewScriptPath);