Re: Serving local windows media files via PHP



Hi,

Seeking usually involves a partial GET request (http://www.w3.org/
Protocols/rfc2616/rfc2616-sec14.html#sec14.35).

You could handle the range request in your script and send the byte
range specified in $_SERVER['HTTP_RANGE'] along with appropriate
headers. Example here: http://us2.php.net/manual/en/function.fread.php#84115

Alternatively, you can let Apache send the requested part directly by
using mod_rewrite and a map containing authorized sessions. Good
example here: http://bytes.com/forum/thread10523.html

The first is more flexible in terms of authorization and logging etc.
The second method would have slightly better performance, but I
wouldn't worry about it unless you're handling very high loads.

Regards,

John Peters

On Jul 30, 12:52 pm, AeonOfTime <s.mordz...@xxxxxxxxx> wrote:
Hi everyone,

I am working on a project where I have .wmv files stored outside of
the server's www root, and want to serve them via a custom web
interface. It's all on windows, and is only intended to work locally
on the physical machine it runs on (don't ask, the customer is
king...).

Right now I have a working prototype in which I use a PHP script
(called movie.php) to serve the target file. In the HTML page, I have
an OBJECT tag that refers to the script, like so:

<OBJECT ID="MediaPlayer" WIDTH="512" HEIGHT="384"
CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
STANDBY="Loading Windows Media Player components..."
TYPE="application/x-oleobject">
<PARAM NAME="FileName" VALUE="movie.php?fileID=12345">
<PARAM name="ShowControls" VALUE="true">
<param name="ShowStatusBar" value="true">
<PARAM name="ShowDisplay" VALUE="true">
<PARAM name="autostart" VALUE="true">
<EMBED TYPE="application/x-mplayer2"
SRC="movie.php?fileID=12345"
NAME="MediaPlayer"
WIDTH="512"
HEIGHT="384"
ShowControls="1"
ShowStatusBar="1"
ShowDisplay="1"
autostart="1"
pluginspage="http://www.microsoft.com/windows/windowsmedia/download/
default.asp">
</EMBED>
</OBJECT>

The movie.php script itself is pretty simple too (stripped down to the
essentials):

<?php

$timeout = 60 * 60 * 24 * 2;
header( 'Cache-Control', 'private, max-age=' . $timeout . '' );
header( 'Pragma', 'private, max-age=' . $timeout . '' );
header( 'Expires', gmdate( 'D, d M Y H:i:s', time() + $timeout ) . '
GMT' );
header( 'Content-Type:video/x-ms-wmv' );
readfile( $file );

?>

This gives me a working player, but the big downside is the player
won't let me skip the clips :(

The seek bar does not respond to any requests to skip ahead, and
pausing the video resets it to the start. Any idea on how I can fix
this so I can skip ahead as much as I wish?

Thanks a lot!

.



Relevant Pages

  • Re: notice and warning
    ... You expect some piece of data from a post in your script, ... So you use $_REQUEST["userid"] which works perfectly fine as long as you get the userid in via POST. ... Now you find yourself in the situation that when you call this script for any reason without the POST info, you will delete yourself if you prefer $_REQUEST over $_POST. ... Saying that using $_REQUEST 'scales better' is utter nonsense. ...
    (comp.lang.php)
  • Re: notice and warning
    ... You expect some piece of data from a post in your script, ... prefer $_REQUEST over $_POST. ... the different meanings the input should have based on how it arrives. ... that's bad design. ...
    (comp.lang.php)
  • Re: notice and warning
    ... You expect some piece of data from a post in your script, eg: userid. ... prefer $_REQUEST over $_POST. ... in this instance, it scales more 'easily'. ...
    (comp.lang.php)
  • Re: Reading remote Session ID
    ... i use a pink wand, just like your blue wand, but pink. ... Perhaps you can just make it harder for the script by ... require that the IP that makes the request for the page be the same ...
    (alt.php)
  • Re: [PHP] How does the Zend engine behave?
    ... include files compiled when the script is first compiled, ... Now suppose a second request ... PHP script to be executed. ... not actually the PHP tokenization. ...
    (php.general)