[PHP] embed movie via header werkt niet in safari

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Lentje
  • Registratie: Juni 2001
  • Laatst online: 12-09 17:04
Ik ben een soort van anti leech systeem aan het bouwen. Een php file valideert of een bezoeker wel eerst op de site is geweest. Dan streamt de file een quicktime bestand via de readfile functie van php.

Dit is de embed tag die we gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="400" height="315" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0">
          <param name="src" value="click.mov">
          <param name="controller" value="true">
          <param name="autoplay" value="false">
          <param name="bgcolor" value="000000">
          <param name="cache" value="true">
          <param name="target" value="myself">
          <param name="href" value="videostream.php?id=1">
          <param name="pluginspage" value="http://www.apple.com/quicktime/download/indext.html">
        <embed width="400" height="315" controller="yes" cache="true" target="myself" href="videostream.php?id=1" src="click.mov" bgcolor="000000" border="0" pluginspage="http://www.apple.com/quicktime/download/indext.html" autoplay="false"></embed>


Hieronder dan het bestand wat de video streamt, een gedeelte ervan.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$data = file_get_contents($check);

$data = unserialize($data);

//print_r($data);

if($data['error'] != 1)
{
    header('Content-type: video/quicktime');                                    // Output a quicktime 
    //header('Content-Disposition: attachment; filename="movie.mov"');     // file name 
    //header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 
    //header("Cache-Control: post-check=0, pre-check=0", false); 
    //header("Pragma: no-cache"); // HTTP/1.0 
    readfile($data['URL']); 
    
}
else
{
    echo 'Wrong session!';
}


In IE en Firefox (ook op mac) werkt dit allemaal perfect. Echter, in safari op een mac werkt het niet. Het filmpje wordt niet afgespeeld, ook niet als je videostream.php direct aanroept. De bovenste headers hebben allemaal gaan effect.

Iemand enig idee hoe dit te verhelpen? Mis ik cruciale headers? Op internet is er maar één geval te vinden van dit probleem, en daar is geen antwoord uitgekomen.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Krijg je wel een filmpje via opslaan als? Probeer anders eens een content-length mee te sturen.
PHP:
1
header(sprintf('Content-Length: %d',filesize($data['URL'])));

Acties:
  • 0 Henk 'm!

  • Lentje
  • Registratie: Juni 2001
  • Laatst online: 12-09 17:04
Heb er een content-lenght bij gedaan, zelfde probleem, met safari kan je het ook niet opslaan.

Acties:
  • 0 Henk 'm!

  • Lentje
  • Registratie: Juni 2001
  • Laatst online: 12-09 17:04
Chem adviseerde mij de headers die firefox (via livehttpheaders) terugkrijgt erin te zetten. Dit was

PHP:
1
2
3
4
5
6
7
8
9
10
    //Header('HTTP/1.x 206 Partial Content'); 
Header('Date: Sun, 27 Nov 2005 11:44:34 GMT'); 
//Header('Server: Apache/2.0.50 (Fedora)'); 
Header('Last-Modified: Mon, 14 Nov 2005 14:17:18 GMT'); 
Header('Etag: "e9c58f-1676382-20ed7780"'); 
Header('Accept-Ranges: bytes'); 
Header('Content-Length: 20075443'); 
Header('Content-Range: bytes 3477455-23552897/23552898'); 
Header('Connection: close'); 
Header('Content-Type: video/quicktime');


Maar zelfs dan doet hij het nog niet in safari.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

oeh die content-range moet je er zeker niet bijzetten, en de accept-ranges ook niet. Tenzij je dat 'even' gaat implementeren; idem met de connection: close, dat handelt apache voor je af.

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Lentje
  • Registratie: Juni 2001
  • Laatst online: 12-09 17:04
Als ik dit gebruik:
PHP:
1
2
3
4
5
Header('Etag: "e9c58f-1676382-20ed7780"'); 
    Header('Content-Type: video/quicktime'); 
    Header("Content-disposition: attachment; filename=videostream.mov");                         
    header(sprintf('Content-Length: %d',filesize($data['URL']))); 
    readfile($data['URL']);


Dan lukt het nog niet in Mac en Safari. Alleen het is dan wel te downloaden met opslaan als in safari. Alleen als ik Content-disposition: inline doe dan werkt het allebei nie meer.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Probeer het eens met een simpele (valid) object-tag (embed is sowieso deprecated en ook niet nodig aangezien standards-compliant browsers gewoon het object-element ondersteunen - alleen dan niet op de manier zoals IE):
HTML:
1
<object type="video/quicktime" data="videostream.php?id=1" width="400" height="315"></object>

In feite zou je php enkel nog de juiste content-type header hoeven sturen + de data; m.i. zou dat gewoon goed moeten werken.
(hoe je dit dan ook voor IE werkend krijgt moet je zelf maar even opzoeken ;) )

[ Voor 9% gewijzigd door crisp op 27-11-2005 15:09 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Lentje
  • Registratie: Juni 2001
  • Laatst online: 12-09 17:04
Dat doet het zelfs niet. Maar als ik de embed shit gebruik met een direct link. Dan doet hij het wel, dus ik denk dat het wel aan de php file moet liggen.

Acties:
  • 0 Henk 'm!

  • Lentje
  • Registratie: Juni 2001
  • Laatst online: 12-09 17:04
*Schop

crisp, dat doet het zelfs niet op een mac met safari... Dus het moet echt aan de php file liggen.
Pagina: 1