Go Back   CodingForums.com > :: Server side development > PHP

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 09-11-2009, 06:03 PM   PM User | #1
boeing747fp
Regular Coder

 
Join Date: Oct 2003
Posts: 599
Thanks: 1
Thanked 1 Time in 1 Post
boeing747fp is an unknown quantity at this point
xmoov.php works but...

i have a xmoov.php pseudo-flv-streaming script setup on a site and it works, but when you start loading a video, you cannot navigate the site anymore until the video is completely loaded.... why is that??

PHP Code:
<?php
$require_login
=1;
include(
"includes/config.php");
//------------------------------------------------------------------------------------------
// MEDIA PATH
//------------------------------------------------------------------------------------------
// you can configure these settings to point to video files outside the public html folder.
//
// points to server root
define('XMOOV_PATH_ROOT''');
//
// points to the folder containing the video files.
define('XMOOV_PATH_FILES''./videos/');


//------------------------------------------------------------------------------------------
// BEHAVIOR
//------------------------------------------------------------------------------------------
//
//set to TRUE to use bandwidth limiting.
define('XMOOV_CONF_LIMIT_BANDWIDTH'FALSE);
//
//set to FALSE to prohibit caching of video files.
define('XMOOV_CONF_ALLOW_FILE_CACHE'TRUE);


//------------------------------------------------------------------------------------------
// BANDWIDTH SETTINGS
//------------------------------------------------------------------------------------------
// these settings are only needed when using bandwidth limiting.
// 
// bandwidth is limited my sending a limited amount of video data(XMOOV_BW_PACKET_SIZE),
// in specified time intervals(XMOOV_BW_PACKET_INTERVAL). 
// avoid time intervals over 1.5 seconds for best results.
// 
// you can also control bandwidth limiting via http command using your video player.
// the function getBandwidthLimit($part) holds three preconfigured presets(low, mid, high),
// which can be changed to meet your needs
//
//set how many kilobytes will be sent per time interval
define('XMOOV_BW_PACKET_SIZE'90);
//
//set the time interval in which data packets will be sent in seconds.
define('XMOOV_BW_PACKET_INTERVAL'0.3);
//
//set to TRUE to control bandwidth externally via http.
define('XMOOV_CONF_ALLOW_DYNAMIC_BANDWIDTH'TRUE);


//------------------------------------------------------------------------------------------
// INCOMING GET VARIABLES CONFIGURATION
//------------------------------------------------------------------------------------------
// 
// use these settings to configure how video files, seek position and bandwidth settings are
// accessed by your player
//
define('XMOOV_GET_FILE''file');
define('XMOOV_GET_POSITION''start');
define('XMOOV_GET_AUTHENTICATION''key');
define('XMOOV_GET_BANDWIDTH''bw');


///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// END SCRIPT CONFIGURATION - do not change anything beyond this point if you do not know what you are doing //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------------------------
// PROCESS FILE REQUEST
//------------------------------------------------------------------------------------------

if(isset($_GET[XMOOV_GET_FILE]))
{
// PROCESS VARIABLES
// get seek position - JWMP doesn't send pos on the first request
$seekPos = isset($_GET[XMOOV_GET_POSITION]) ? intval($_GET[XMOOV_GET_POSITION]) : 0;
// get file name
$fileName htmlspecialchars($_GET[XMOOV_GET_FILE]);
// assemble file path
$file XMOOV_PATH_ROOT XMOOV_PATH_FILES $fileName;
// assemble packet interval
$packet_interval = (XMOOV_CONF_ALLOW_DYNAMIC_BANDWIDTH && isset($_GET[XMOOV_GET_BANDWIDTH])) ? getBandwidthLimit('interval') : XMOOV_BW_PACKET_INTERVAL;
// assemble packet size
$packet_size = ((XMOOV_CONF_ALLOW_DYNAMIC_BANDWIDTH && isset($_GET[XMOOV_GET_BANDWIDTH])) ? getBandwidthLimit('size') : XMOOV_BW_PACKET_SIZE) * 1042;

// security improved by by TRUI www.trui.net
if (!file_exists($file))
{
print(
'<b>ERROR:</b> xmoov-php could not find (' $fileName ') please check your settings.'); 
exit();
}

if(
file_exists($file) && strrchr($fileName'.') == '.flv' && strlen($fileName) > && !eregi(basename($_SERVER['PHP_SELF']), $fileName) && ereg('^[^./][^/]*$'$fileName))
{
$fh fopen($file'rb') or die ('<b>ERROR:</b> xmoov-php could not open (' $fileName ')');

$fileSize filesize($file) - (($seekPos 0) ? $seekPos 0);

// SEND HEADERS
if(!XMOOV_CONF_ALLOW_FILE_CACHE)
{
// prohibit caching (different methods for different clients)
session_cache_limiter("nocache");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
}

// content headers
header("Content-Type: video/x-flv");
// header("Content-Disposition: attachment; filename=\"" . $fileName . "\"");
header("Content-Length: " $fileSize);

// FLV file format header
if($seekPos != 0
{
print(
'FLV');
print(
pack('C'1));
print(
pack('C'1));
print(
pack('N'9));
print(
pack('N'9));
}

// seek to requested file position
fseek($fh$seekPos);

// output file
while(!feof($fh)) 
{
// use bandwidth limiting - by Terry
if(XMOOV_CONF_LIMIT_BANDWIDTH)
{
// get start time
list($usec$sec) = explode(' 'microtime());
$time_start = ((float)$usec + (float)$sec);
// output packet
print(fread($fh$packet_size));
// get end time
list($usec$sec) = explode(' 'microtime());
$time_stop = ((float)$usec + (float)$sec);
// wait if output is slower than $packet_interval
$time_difference $time_stop $time_start;
if(
$time_difference < (float)$packet_interval)
{
usleep((float)$packet_interval 1000000 - (float)$time_difference 1000000);
}
}
else
{
// output file without bandwidth limiting
while (!feof($fh))
{
print(
fread($fh16384));
}
}
}
}
}


//------------------------------------------------------------------------------------------
// DYNAMIC BANDWIDTH CONTROL
//------------------------------------------------------------------------------------------
//
function getBandwidthLimit($part)
{
switch(
$part)
{
case 
'interval' :
switch(
$_GET[XMOOV_GET_BANDWIDTH])
{
case 
'low' :
return 
1;
break;
case 
'mid' :
return 
0.5;
break;
case 
'high' :
return 
0.3;
break;
default :
return 
XMOOV_BW_PACKET_INTERVAL;
break;
}
break;
case 
'size' :
switch(
$_GET[XMOOV_GET_BANDWIDTH])
{
case 
'low' :
return 
10;
break;
case 
'mid' :
return 
40;
break;
case 
'high' :
return 
90;
break;
default :
return 
XMOOV_BW_PACKET_SIZE;
break;
}
break;
}
}

?>
boeing747fp is offline   Reply With Quote
Old 09-11-2009, 06:06 PM   PM User | #2
angst
Senior Coder

 
angst's Avatar
 
Join Date: Apr 2004
Location: Toronto, Ontario
Posts: 2,112
Thanks: 15
Thanked 122 Times in 122 Posts
angst is on a distinguished road
are you sure this isn't to due with too many server connections from your browser?
angst is offline   Reply With Quote
Old 09-11-2009, 07:55 PM   PM User | #3
boeing747fp
Regular Coder

 
Join Date: Oct 2003
Posts: 599
Thanks: 1
Thanked 1 Time in 1 Post
boeing747fp is an unknown quantity at this point
Quote:
Originally Posted by angst View Post
are you sure this isn't to due with too many server connections from your browser?
how would i be able to know that? theres no errors it just wont navigate
boeing747fp is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 11:24 AM.


Advertisement
Log in to turn off these ads.