• Stream video via PHP Zend Framework


    public function downloadAction()
        {
            $this->_helper->viewRenderer->setNoRender();
            $this->_helper->layout->disableLayout();
            
            $videoFolder = realpath(APPLICATION_PATH . "/videos");
            
            //This is example video - it can be from a param
            $video = $videoFolder . "/zyploiifb5cja02a.mp4";
            
            $fileBaseName = basename($video);
            $fileParts = explode(".", $fileBaseName);
            $ext = $fileParts[count($fileParts)-1];
            
            switch ($ext)
            {
                case 'mp4':
                    $this->getResponse()->setHeader('Content-Type', 'video/mp4');
                    break;
                case 'flv':
                    $this->getResponse()->setHeader('Content-Type', 'video/flv');
            }
            
            $fp = fopen($video, 'rb');
            $size = filesize($video);
            $length = $size;
            
            $chunksize = 1 * (1024 * 1024);
            
            if(empty($_SERVER['HTTP_RANGE']))
            {
                $this->getResponse()->setHeader('Content-Length', $length);
                $this->getResponse()->sendHeaders();
                
                while (!feof($fp))
                {
                    echo fread($fp, $chunksize);
                    ob_flush(); 
                    flush();
                }
                fclose($fp);
                exit;
            }
            
            /*
             * FROM http://mobiforge.com/developing/story/content-delivery-mobile-devices
             */
            
            $start = 0;
            $end = $length - 1;
            
            $this->getResponse()->setHeader('Accept-Ranges', '0-'.$length);
            $this->getResponse()->setHttpResponseCode(206);
            
            $c_start = $start;
            $c_end   = $end;
            
            list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
            
            if ($range == '-')
            {
                $c_start = $size - substr($range, 1);      
            }
            else 
            {
                $range  = explode('-', $range);
                $c_start = $range[0];
                $c_end   = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
            }
            
            $c_end = ($c_end > $end) ? $end : $c_end;
            $start  = $c_start;
            $end    = $c_end;
            $length = $end - $start + 1;
            fseek($fp, $start);
            $this->getResponse()->setHeader('Content-Range', "bytes $start-$end/$size");
            $this->getResponse()->setHeader('Content-Length', $length);
            
            $this->getResponse()->sendHeaders();
            
            $bytesSent = 0;
             
            while(!feof($fp) && ($p = ftell($fp)) <= $end)
            {
                if ($p + $chunksize > $end)
                {
                    $chunksize = $end - $p + 1;    
                }
                set_time_limit(0);
                echo fread($fp, $chunksize);
                $bytesSent += $chunksize;
                ob_flush();
                flush();
            }
            
            fclose($fp);        
            die;
        }  

    转:https://gist.github.com/1602689

  • 相关阅读:
    pfofinet和S7
    A1010 Radix [二分/******]
    A1005 Spell It Right
    最大回文子串长度 [dp]
    HDU 1159 Common Subsequence [最长公共子序列]
    1045 Favorite Color Stripe [动态规划/最长不下降子序列]
    1007 Maximum Subsequence Sum [动态规划]
    数塔问题(递归/递推)
    hdu 畅通工程 [Kruskal/Prime]
    1087 All Roads Lead to Rome [dj]
  • 原文地址:https://www.cnblogs.com/shuaixf/p/2646686.html
Copyright © 2020-2023  润新知