[PHP] Flash video (flv) stream werkt niet goed.

Pagina: 1
Acties:
  • 656 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27
Probleem:
Server 1 heeft -> map met FLV filmpjes & een database met een overzicht van deze filmpjes. (Geindentificeerd door een md5 van filmnaam+timestamp van de upload)

Server 2 heeft -> de volgende code:
HTML:
1
2
3
4
5
6
7
8
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0 " width="320" height="240" id="FLVPlayer">
        <param name="movie" value="FLVPlayer_Progressive.swf" />
        <param name="salign" value="lt" /> 
        <param name="quality" value="high" />
        <param name="scale" value="noscale" />
        <param name="FlashVars" value="&MM_ComponentVersion=1&skinName=Clear_Skin_3&streamName=http://streamer.dev.tdxsports.nl/getFile.php?videoId=9b935aa0a88f91e92d9bd5c222e4681e&autoPlay=true&autoRewind=true" />
        <embed src="FLVPlayer_Progressive.swf" flashvars="&MM_ComponentVersion=1&skinName=Clear_Skin_3&streamName=http://streamer.dev.tdxsports.nl/getFile.php?videoId=9b935aa0a88f91e92d9bd5c222e4681e&autoPlay=true&autoRewind=true" quality="high" scale="noscale" width="320" height="240" name="FLVPlayer" salign="LT" type="application/x-shockwave-flash" pluginspage=" http://www.macromedia.com/go/getflashplayer" />  
    </object>


Waarbij http://streamer.dev.tdxsp...0a88f91e92d9bd5c222e4681e de volgende code op server 1 aanroept:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if(isset($_GET['videoId'])) {
    $dbConn = mysql_connect("localhost","****","****") or die(mysql_error());
    mysql_select_db("flvplayer") or die(mysql_error()); 
    $sql = "SELECT * FROM videos WHERE vidHash = '". $_GET['videoId'] ."'";
    $return = mysql_query($sql) or die(mysql_error());
    mysql_close($dbConn) or die(mysql_error());
    
    $result =  mysql_fetch_assoc($return) or die(mysql_error());
    
    $baseDir = "/path/to/the/videos/";
    $movieDir = $baseDir.$result['vidNieuweNaam'];
    
    $fp = fopen($movieDir, 'r') or die("Fout met openen!");
    stream_set_blocking($fp, 0);
    stream_set_write_buffer($fp, 0);
    
    $headers = stream_get_meta_data($fp) or die("Error");
    print_r($headers);
    
//  header("Content-Type: video/x-flv");
//  header("Content-length: ". filesize($fp)); 
//  fpassthru($fp);
}
?>


Dit geeft dan de volgende headers:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Array
(
    [wrapper_type] => plainfile
    [stream_type] => STDIO
    [mode] => r
    [unread_bytes] => 0
    [seekable] => 1
    [uri] => /path/to/the/videos/1181663011_maartenver.flv
    [timed_out] => 
    [blocked] => 1
    [eof] => 
)


Terwijl ik in deze post > Verwijderd in "[php] fpassthru 'vergeet' headers" < ook nog wat headers zie die mee zouden moeten naar de browser.

Als alternatief had ik dus zelf geprobeerd de headers te maken, maar het werkt niet. De flv komt gewoon niet aan bij het embed van server 2 :(

Ik heb het geprobeerd door 1 van de bestanden een PDF te maken & de header daarop aan te passen en als ik dan in FF de url met hash aanroep komt er netjes een PDF tevoorschijn, in IE overigens niet. Maar als ik het wil omzetten naar FLV werkt het gewoon helemaal niet :(

Iemand een idee?

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27
Update:

Middels 'mod rewrite' heb ik het ophaal adres weten te reduceren tot:
http://streamer.dev.tdxsp...0a88f91e92d9bd5c222e4681e

Dit heb ik gedaan om te voorkomen dat het stukje
HTML:
1
streamName=http://streamer.dev.tdxsports.nl/getFile.php?videoId=9b935aa0a88f91e92d9bd5c222e4681e&autoPlay=true&autoRewind=true

in de war raakt door het stukje "getFile.php?videoId=....

Maargoed, resultaat nog altijd hetzelde, geen video :(

edit:
hmm, reactie ipv edit :(

[ Voor 4% gewijzigd door Spooksel op 13-06-2007 13:28 ]

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27
Na weer eens een middagje proberen is het dan eindelijk gelukt. De oorzaak van het probleem lag in de player die in gebruikte die gewoon simpelweg niet overweg kon met een door script gereturnde video.

Het gebruik van een andere player verhielp dit probleem direct.

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 21:46
Je probleem heb je zelf al opgelost, maar toch wil ik je aanraden om wat te lezen over SQL injection (hoewel je rewrite het hoogst waarschijnlijk een stuk bemoeilijkt).

PHP:
1
2
3
4
5
<?php
if(isset($_GET['videoId']) && preg_match('/[a-z0-9]{32}/i', $_GET['videoId'])) {
    $dbConn = mysql_connect("localhost","****","****") or die(mysql_error());
    mysql_select_db("flvplayer") or die(mysql_error()); 
    $sql = "SELECT * FROM videos WHERE vidHash = '". mysql_real_escape_string($_GET['videoId'] )."'";


Dit is dubbelop, maar ik ben nou eenmaal paranoid. :+

Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27
Hmm, ik moet alles nog netjes in een class verwerken enzo. Er zitten nog nergens checks atm, maar dat maakt niet uit. De development server is niet publiek toegangkelijk anyway :P

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb nog steeds een vergelijkbaar probleem..
Ik gebruik de player van jeroenwijering al

<embed src="http://www.jeroenwijering.com/embed/mediaplayer.swf"
width="260"
height="160"
allowfullscreen="true"
allowscriptaccess="always"
flashvars="&file=http://domain/getmediafile.php" />

In de mediafile.php staat het volgende:
$movieDir = "/afraid.flv";
$fp = fopen($movieDir, 'r') or die("Fout met openen!");
stream_set_blocking($fp, 0);
stream_set_write_buffer($fp, 0);
$headers = stream_get_meta_data($fp) or die("Error");
header("Content-Type: video/x-flv");
header('Content-Disposition: attachment; filename="jurriaan.flv";');
fpassthru($fp);

Als ik het mediafile.php komt de browser met de vraag of ik hem wil downloaden.
Lijkt me goed dus.. Echter krijg ik geen spelende mediaplayer te zien.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Waarom attachment en niet inline?
Pagina: 1