Blocking video streaming

Blocking video streaming

am 19.10.2009 18:29:27 von Talawa

Hello everyone,

I post a message here because i didn't find any solution yet.
I just finished video streaming service on my website. I use xmoov script (http://xmoov.com/xmoov-php/) to do that. It works like a charm, but I find an issue. When the video is buffering into the flash player, all others requests are pending until the video is loaded.

I discovered in my search that fopen() function could block php process.

Does someone know this problem ?

Thanks.



--------------= Posted using GrabIt =----------------
------= Binary Usenet downloading made easy =---------
-= Get GrabIt for free from http://www.shemes.com/ =-


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Blocking video streaming

am 19.10.2009 18:55:33 von Kim Madsen

Hey

Talawa wrote on 2009-10-19 18:29:
> Hello everyone,
>
> I post a message here because i didn't find any solution yet.
> I just finished video streaming service on my website. I use xmoov script (http://xmoov.com/xmoov-php/) to do that. It works like a charm, but I find an issue. When the video is buffering into the flash player, all others requests are pending until the video is loaded.
>
> I discovered in my search that fopen() function could block php process.
>
> Does someone know this problem ?

I've had a similar problem with zip downloads (which also use fopen), I
supect either the headers, a caching problem or latin1/utf-8

What does your headers look like? (firefox has a lovely plugin "live
http headers")

Which character encoding do you use?

Show us code bit from fopen to fclose

--
Sincerly
Kim Emax

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Blocking video streaming

am 19.10.2009 19:44:54 von Talawa

Kim Madsen a écrit :
> Hey
>
> Talawa wrote on 2009-10-19 18:29:
>> Hello everyone,
>>
>> I post a message here because i didn't find any solution yet.
>> I just finished video streaming service on my website. I use xmoov
>> script (http://xmoov.com/xmoov-php/) to do that. It works like a
>> charm, but I find an issue. When the video is buffering into the flash
>> player, all others requests are pending until the video is loaded.
>>
>> I discovered in my search that fopen() function could block php process.
>>
>> Does someone know this problem ?
>
> I've had a similar problem with zip downloads (which also use fopen), I
> supect either the headers, a caching problem or latin1/utf-8
>
> What does your headers look like? (firefox has a lovely plugin "live
> http headers")
>
> Which character encoding do you use?
>
> Show us code bit from fopen to fclose
>
I forced charset encoding in my htaccess to ISO-8859-1.

Here's the http headers I receive :
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0, max-age=0
Pragma: no-cache
Last-Modified: Mon, 19 Oct 2009 19:00:33 GMT
X-Pad: avoid browser bug
Content-Length: 14145470
Vary: User-Agent
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: video/x-flv

And here's the php code :
if (($fh = fopen($file, 'rb')) === FALSE)
return;

# assemble packet interval
$packet_interval = 0.3;

# assemble packet size
$packet_size = STREAM_SPEED * 1042;

$seekPos = intval($seekPos);
$fileSize = filesize($file) - (($seekPos > 0) ? $seekPos + 1 : 0);

session_cache_limiter("nocache");
header("Cache-Control: private",false);
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Last-Modified: " . date("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate,
post-check=0, pre-check=0, max-age=0");
header("Pragma: no-cache");
header("Content-Type: video/x-flv");
header("X-Pad: avoid browser bug");
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)) {
# 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);
}
}
fclose($fh);


Thanks for help.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Blocking video streaming

am 19.10.2009 23:27:22 von Talawa

Talawa a écrit :
> Kim Madsen a écrit :
>> Hey
>>
>> Talawa wrote on 2009-10-19 18:29:
>>> Hello everyone,
>>>
>>> I post a message here because i didn't find any solution yet.
>>> I just finished video streaming service on my website. I use xmoov
>>> script (http://xmoov.com/xmoov-php/) to do that. It works like a
>>> charm, but I find an issue. When the video is buffering into the
>>> flash player, all others requests are pending until the video is loaded.
>>>
>>> I discovered in my search that fopen() function could block php process.
>>>
>>> Does someone know this problem ?
>>
>> I've had a similar problem with zip downloads (which also use fopen),
>> I supect either the headers, a caching problem or latin1/utf-8
>>
>> What does your headers look like? (firefox has a lovely plugin "live
>> http headers")
>>
>> Which character encoding do you use?
>>
>> Show us code bit from fopen to fclose
>>
> I forced charset encoding in my htaccess to ISO-8859-1.
>
> Here's the http headers I receive :
> Expires: Thu, 19 Nov 1981 08:52:00 GMT
> Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
> pre-check=0, max-age=0
> Pragma: no-cache
> Last-Modified: Mon, 19 Oct 2009 19:00:33 GMT
> X-Pad: avoid browser bug
> Content-Length: 14145470
> Vary: User-Agent
> Keep-Alive: timeout=5, max=100
> Connection: Keep-Alive
> Content-Type: video/x-flv
>
> And here's the php code :
> if (($fh = fopen($file, 'rb')) === FALSE)
> return;
>
> # assemble packet interval
> $packet_interval = 0.3;
>
> # assemble packet size
> $packet_size = STREAM_SPEED * 1042;
>
> $seekPos = intval($seekPos);
> $fileSize = filesize($file) - (($seekPos > 0) ? $seekPos + 1 : 0);
>
> session_cache_limiter("nocache");
> header("Cache-Control: private",false);
> header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
> header("Last-Modified: " . date("D, d M Y H:i:s") . " GMT");
> header("Cache-Control: no-store, no-cache, must-revalidate,
> post-check=0, pre-check=0, max-age=0");
> header("Pragma: no-cache");
> header("Content-Type: video/x-flv");
> header("X-Pad: avoid browser bug");
> 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)) {
> # 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);
> }
> }
> fclose($fh);
>
>
> Thanks for help.

I solve the issue. I forgot to close the session before sending the stream.
Add session_write_close(); before sending.

In hope it may help.

Cheers.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php