Ik ben bezig met een website, zodat ik op school ook mijn eigen mp3's kan streamen.
De mp3's staan buiten de publieke html map, en de website er natuurlijk binnen
Verder draai ik arch linux met apache, php en mysql. Van alles de nieuwste versie.
Om de mp3's te streamen gebruik ik een embedded mediaspeler, omdat deze alleen bestanden kan openen die in de publieke html dir staan heb ik een php functie die een mp3 inleest, en vervolgens deze met een mp3 mime type header terug geeft aan de mediaplayer.
Dit verhaal werkt perfect voor Internet Explorer, maar niet voor Mozilla Firefox (1.5)
Ik dacht eerst dat het aan de headers lag, ik verstuur de volgende:
Na wat zoeken op internet kon ik hier eigenlijk toch ook niks aan toevoegen, dit ook omdat de mp3 header wel goed is omdat hij in Internet Explorer wel gewoon werkt.
Verder heb ik nog even gekeken naar mijn php functie die dus de inhoud van een mp3 terug geeft:
Dit leek mij ook niet het probleem omdat het wel gewoon werkt in IE, en daarbij komt ook nog dat PHP toch een serverside taal is. Dus dan zou je zeggen dat hij het in IE ook niet doet. Dunkt mij.
Wat ik er misschien nog wel even bij moet vermelden is dat deze php code in een ander bestand staat, was misschien al duidelijk. Maar ik denk vermeld het nog even. Ik werk verder met classes, waar de functies instaan. De functie die de mp3 moet lezen wordt aangeroepen door de engine. En dit engine bestand wordt weer aangeroepen door de embedded player.
Ik kan deze code ook nog wel even laten zien:
Tot slot:
Ik snap dus niet hoe het kan dat mijn streaming media het wel doet in Internet Explorer en niet in Mozilla Firefox. Ik heb voor de makkelijkheid de 3 pagina's ook nog even online gezet. Misschien leest dat wat makkelijker.
De class
De engine
De embedded mediaplayer
Heeft iemand hier ervaring mee, of ziet toevallig een fout die ik totaal over het hoofd heeft gezien?
De mp3's staan buiten de publieke html map, en de website er natuurlijk binnen
Verder draai ik arch linux met apache, php en mysql. Van alles de nieuwste versie.
Om de mp3's te streamen gebruik ik een embedded mediaspeler, omdat deze alleen bestanden kan openen die in de publieke html dir staan heb ik een php functie die een mp3 inleest, en vervolgens deze met een mp3 mime type header terug geeft aan de mediaplayer.
Dit verhaal werkt perfect voor Internet Explorer, maar niet voor Mozilla Firefox (1.5)
Ik dacht eerst dat het aan de headers lag, ik verstuur de volgende:
PHP:
1
2
3
4
5
| header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-type: ".$mime); header("Content-length: ".filesize($path)); |
Na wat zoeken op internet kon ik hier eigenlijk toch ook niks aan toevoegen, dit ook omdat de mp3 header wel goed is omdat hij in Internet Explorer wel gewoon werkt.
Verder heb ik nog even gekeken naar mijn php functie die dus de inhoud van een mp3 terug geeft:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $blokGrootte = 1*(1024*1024); // 1mb $buffer = ''; $bestand = fopen($this->path, 'rb'); while(!feof($bestand)) { // Een blok opslaan in de buffer $buffer = fread($bestand, $blokGrootte); // en de buffer naar de browser sturen, zodat deze met afspelen kan beginnen echo $buffer; } fclose($bestand); |
Dit leek mij ook niet het probleem omdat het wel gewoon werkt in IE, en daarbij komt ook nog dat PHP toch een serverside taal is. Dus dan zou je zeggen dat hij het in IE ook niet doet. Dunkt mij.
Wat ik er misschien nog wel even bij moet vermelden is dat deze php code in een ander bestand staat, was misschien al duidelijk. Maar ik denk vermeld het nog even. Ik werk verder met classes, waar de functies instaan. De functie die de mp3 moet lezen wordt aangeroepen door de engine. En dit engine bestand wordt weer aangeroepen door de embedded player.
Ik kan deze code ook nog wel even laten zien:
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
26
27
28
| <object id="MediaPlayer" width=320 height=240 classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112" standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject" > <param name="FileName" value="index.php?pagina=afspelen&fileID=3"> <param name="ShowControls" value="1"> <param name="ShowDisplay" value="1"> <param name="ShowStatusBar" value="1"> <param name="AutoSize" value="0"> <param name="Volume" value="0"> <embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/windows/windowsmedia/download/" filename="index.php?pagina=afspelen&fileID=3" src="index.php?pagina=afspelen&fileID=3" name=MediaPlayer1 ShowControls=1 Volume=0 ShowDisplay=1 ShowStatusBar=1 width=320 height=240> </embed> </object> |
Tot slot:
Ik snap dus niet hoe het kan dat mijn streaming media het wel doet in Internet Explorer en niet in Mozilla Firefox. Ik heb voor de makkelijkheid de 3 pagina's ook nog even online gezet. Misschien leest dat wat makkelijker.
De class
De engine
De embedded mediaplayer
Heeft iemand hier ervaring mee, of ziet toevallig een fout die ik totaal over het hoofd heeft gezien?