[PHP] streaming van realmedia *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jb044
  • Registratie: December 2002
  • Laatst online: 16-09 08:05
Ben bezig met een nieuwe versie van een website waar ook real en windows media clips staan.

De oude situatie was een mysql tabel met metadata en een publiek toegankelijke map met alle clips, erg goed te leechen dus en je moest ook nog de clips met de hand uploaden. Ik heb besloten om dit geheel te automatiseren maar dan wel goed:

Er is een algemene tabel 'files' en een 'clips' tabel die hier weer gebruikt van maakt. De files tabel bevat alleen metadata. Aangezien de binaire data door php wordt weggeschreven en uitgelezen en niet publiek toegankelijk is, is dit dus wel transparant voor de eindgebruiker:

Bestanden roep je op via script + argumenten: http://domein/?function=files&id=<id>
En dus niet http://domein/map/bestand.extentie

Dit werkt maar alleen als ik de bestanden via bovenstaande url aanroep. Voor real heb je een 'ramgen' nodig, tenminste dat heb ik begrepen, en dat werkt dus niet.

Ik gebruik deze php code:

header("Content-Type: audio/x-pn-realaudio");
header("Content-Disposition: filename=\"$file.ram\" ");
print("http://laser.lokaal.net/livebands_new/index.php?function=files&id=$fid");

$file en $fid worden door de juiste waarde vervangen, getest door Content-Type op text/html te zetten. Alleen realplayer komt niet verder 'Contacting....' :( Als ik een 'normale' url gebruik: zeg http://domein/test.rm, werkt het wel. Nogmaals direct aanroepen (dus zonder ram file 'snelkoppeling') werkt wel. Wat doe ik fout, of weet iemand een methode die wel werkt???


Denk niet dat dit erg relevant is maar voor alle duidelijkheid om deze (test) server gaat het:

Analyse: 'laser.lokaal.net' werd gevonden in 1 hops (TTL=64). It is een HTTP server (running Apache/1.3.27 (Unix) (Red-Hat/Linux) Midgard/1.5.0/SG mod_ssl/2.8.12 OpenSSL/0.9.6 DAV/1.0.2 PHP/4.1.2 mod_perl/1.24_01 mod_throttle/3.1.2)

Acties:
  • 0 Henk 'm!

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 20-09 12:29

Snow_King

Konijn is stoer!

moet je niet in plaats van print, fpassthru gebruiken?

Acties:
  • 0 Henk 'm!

  • jb044
  • Registratie: December 2002
  • Laatst online: 16-09 08:05
Nee dat is het niet, met de uiteindelijke file is niks mis. Het gaat me om de ram file, dat is in feite niks meer dan een snelkoppeling, er wordt gewoon een url geprint en om de een of andere reden slikt realplayer die niet.

De url direct openen vanuit realplayer zelf werkt daarentegen weer wel, erg vaag allemaal...

Acties:
  • 0 Henk 'm!

  • jb044
  • Registratie: December 2002
  • Laatst online: 16-09 08:05
Opgelost: Zowel onder Linux als Windows werd er een verkeerd mimetype meegegeven voor real betsnaden (.rm), application/m en application/x-vnd-real of iets dergelijkt. Dit moet audio/x-pn-realaudio zijn.

Voor het zoeken: real files uploaden via een html form met php of asp kan problemen opleveren met mimetypes, realplayer kan zo'n file weigeren.

Moderator gooi dit topic maar op slot :)

Acties:
  • 0 Henk 'm!

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 20-09 12:29

Snow_King

Konijn is stoer!

hmm, in je startpost staat ook al header() met audio/x-pn-realaudio er in.

Geef eens de source van het wel werkende script?

Acties:
  • 0 Henk 'm!

  • jb044
  • Registratie: December 2002
  • Laatst online: 16-09 08:05
ach waarom niet:

Wat fragmentjes code eerst de metafile dan de echt real, windowsmedia of quicktime file:

//Playa :)
$sql = "SELECT files.id AS fid, files.file AS file, clips.format AS format FROM files, clips WHERE clips.id = $id AND clips.fid = files.id";
$result = mysql_query($sql, $db) or die(mysql_error());
$row = mysql_fetch_object($result);
$format = $row->format;
$file = $row->file;
$fid = $row->fid;
if ($format == "real") {
$file = preg_replace("/\./i", "", $file);
header("Content-Type: audio/x-pn-realaudio");
header("Content-Disposition: filename=\"$file.ram\" ");
print "http://laser.lokaal.net/livebands_new/?function=files&id=$fid";
} elseif ($format == "windowsmedia") {
$file = preg_replace("/\./i", "", $file);
header("Content-Type: audio/x-ms-asf");
header("Content-Disposition: filename=\"$file.asx\" ");
print "<asx version = \"3.0\">";
print "<entry><ref href = \"http://laser.lokaal.net/livebands_new/?function=files&id=$fid\" />";
print "</entry></asx>";
} elseif ($format == "quicktime") {
$file = preg_replace("/\./i", "", $file);
header("Content-Type: audio/x-quicktime-media-link");
header("Content-Disposition: filename=\"$file.qtl\" ");
print "<?xml version=\"1.0\"?>";
print "<?quicktime type=\"application/x-quicktime-media-link\"?>";
print "<embed src=\"http://laser.lokaal.net/livebands_new/?function=files&id=$fid\" />";
} else {
print "<p><b>Unknown clip format!</b></p>";
die(einde());
}
}

mysql_close();

-------------------

function files($id, $style, $menu) {
include('database.php');
$sql = "SELECT mimetype, file FROM files WHERE id = $id";
$result = mysql_query($sql, $db) or die(mysql_error());
$num = mysql_num_rows($result);
mysql_close();
if ($num == "1") {
$row = mysql_fetch_object($result);
$type = $row->mimetype;
$name = $row->file;
$file = md5($id);
$path = "/var/www/html/livebands_new/blobs/";
$file = $path . $file;
$handle = fopen($file, "rb");
if ($handle) {
header( "Content-type: $type");
header("Content-Disposition: filename=\"$name\"");
set_magic_quotes_runtime(0);
while(!feof($handle)) {
echo fread($handle, 192*1024);
flush();
sleep(1);
}
set_magic_quotes_runtime(get_magic_quotes_gpc());
fclose($handle);
} else {
if (!function_exists('begin')) {
include('templates.php');
}
$title = "Fout";
begin($title, $style, $menu, 1);
print("<h3>Error 404. File not found, Bestand niet gevonden!</h3>");
einde();
}
} else {
if (!function_exists('begin')) {
include('templates.php');
}
$title = "Fout";
begin($title, $style, $menu, 1);
print("<h3>Error 404. File not found, Bestand niet gevonden!</h3>");
einde();
}
}

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je kunt het leesbaar maken door er PHP tags omheen te zetten...
Pagina: 1