[PHP] Fast-Forwarding by "on-demand" streaming van MP3

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • robertpNL
  • Registratie: Augustus 2003
  • Niet online
Hallo :)

Voor een radiostation beheer en programmeer ik vrijwillig de website met een live-stream en kunnen bezoekers enkele eerder uitgezonden uitzendingen terug beluisteren ("on-demand"). Dit zijn .MP3 bestanden op de webserver. Zodra op een eerder uitgezonden uitzending wordt geklikt, wordt het .mp3-bestand gestreamd naar de client en wordt vaak WMP gestart. Maar helaas kunnen de bezoekers niet doorspoelen (fast-forwarding) binnen het bestand. En dus ben ik gaan zoeken hoe ik dit voor elkaar kan krijgen.

Bij het zoeken kwam ik dit tegen. Dit gaf mij wat ideeen om te testen. Uiteraard ook verder gezocht, maar kwam niet verder dan de vele informatie over te gebruiken headers.

Dit is wat ik nu heb gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$file= "http://xxx/uitzending.mp3";

header("HTTP/1.1 206 Partial content");
$offset = sscanf($headers["Range"], "bytes=%d-");
$length = $line["size"] - $offset[0];
header("Content-Length: " . $length);
$byteoffset = $offset[0] . "-" . (string)($line["size"] - 1) . "/" . $line["size"];
header("Content-Range: bytes $byteoffset");

Header("Accept-Ranges: bytes"); 
Header("Connection: close");
Header("Content-Type: audio/mpeg");
Header("Content-disposition: inline; filename=uitzending.mp3");

$mp3 = @fopen($file);
fseek($mp3, $offset[0]);
fpassthru($mp3);
exit;


Dit werkt niet. Ook had ik dit nog getest:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$file= "http://xxx/uitzending.mp3";


Header("Accept-Ranges: bytes"); 
Header("Connection: close");
Header("Content-Type: audio/mpeg");
Header("Content-disposition: inline; filename=uitzending");


$fp = fopen ($file, "rb"); 
fpassthru($fp); 
fclose($fp); 

exit;


Hiermee wordt het streamen wel gestart, maar kan nietverder worden gespoeld.

Iemand die mij eventueel verder kan helpen? :)

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
Met videobestanden is het zo dat er pas gespoeld kan worden als het gehele bestand binnen is. (tenzij in het bestand (meestal asf) het spoelen is uitgeschakeld)...

/dev/null


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien een idee om er wmv bestanden van te maken? Hiermee kun je volgens mij wel makkelijk spoelen naar een volgend stukje.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Ik denk dat het helemaal van de speler af hangt. Ik heb geen zin om die scriptjes te checken, maar in theorie kun je via HTTP streamen (dat is de essentie van ShoutCast bijvoorbeeld) en als je partial content ondersteunt dan heeft de client alles wat 'ie nodig heeft om te spoelen.

Maar het fundamentele probleem is dat de 'gangbare' clients (Windows Media Player, Real Player misschien en die Apple troep) allemaal nogal slechte en vooral erg verschillende ondersteuning hebben voor streaming van HTTP. Microsoft wil natuurlijk dat je gewoon die Windows-file-formats gebruikt, Apple zal wel QuickTime-achtige audio ondersteunen, en Real Player natuurlijk hun eigen formaat. Ondersteuning voor een open standaard als HTTP hoef je daarvan niet te verwachten.

Je kunt je dus beter eerst afvragen welke spelers je wil ondersteunen en daar je implementatie op afstemmen.

Acties:
  • 0 Henk 'm!

  • supergert
  • Registratie: December 2001
  • Niet online
Heb je al eens naar ffmpeg (en ffserver) gekeken?

ZX81 > C64 > Amiga > BeBox > PowerMac > pc-klonen...