2017-07-12 6 views
1

Ich versuche, MP4-Dateien mit PHP, mein ursprünglichen CodeWie mit PHP Video/mp4 öffnen

$file = 'https://s3-sa-east-1.amazonaws.com/onlytestes/video.mp4'; 
header('Content-type: video/mp4'); 
readfile($file); 

war zu lesen, aber auf diese Weise ich nicht die Länge Leiste des Videos verwenden könnte, überspringen oder gehen Sie sogar zurück, bis das Video zu 100% geladen ist. Natürlich, wenn ich die Datei direkt (video.mp4) lese, ist alles in Ordnung. ich dieses Problem mit dem folgenden Code gelöst:

$request = 'video.mp4'; 
$file = $request; 
$fp = @fopen($file, 'rb'); 
$size = filesize($file); // File size 
$length = $size;   // Content length 
$start = 0;    // Start byte 
$end = $size - 1;  // End byte 
header('Content-type: video/mp4'); 
header("Accept-Ranges: 0-$length"); 
if (isset($_SERVER['HTTP_RANGE'])) { 
    $c_start = $start; 
    $c_end = $end; 
    list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); 
    if (strpos($range, ',') !== false) { 
     header('HTTP/1.1 416 Requested Range Not Satisfiable'); 
     header("Content-Range: bytes $start-$end/$size"); 
     exit; 
    } 
    if ($range == '-') { 
     $c_start = $size - substr($range, 1); 
    }else{ 
     $range = explode('-', $range); 
     $c_start = $range[0]; 
     $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size; 
    } 
    $c_end = ($c_end > $end) ? $end : $c_end; 
    if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) { 
     header('HTTP/1.1 416 Requested Range Not Satisfiable'); 
     header("Content-Range: bytes $start-$end/$size"); 
     exit; 
    } 
    $start = $c_start; 
    $end = $c_end; 
    $length = $end - $start + 1; 
    fseek($fp, $start); 
    header('HTTP/1.1 206 Partial Content'); 
} 
header("Content-Range: bytes $start-$end/$size"); 
header("Content-Length: ".$length); 
$buffer = 1024 * 8; 
while(!feof($fp) && ($p = ftell($fp)) <= $end) { 
    if ($p + $buffer > $end) { 
     $buffer = $end - $p + 1; 
    } 
    set_time_limit(0); 
    echo fread($fp, $buffer); 
    flush(); 
} 
fclose($fp); 
exit(); 

Aber es funktioniert nur mit lokalen Dateien, ich denke HTTP_RANGE nicht funktioniert, es gibt die folgenden Fehler in der Konsole ‚‘ fehlgeschlagen Ressource laden: der Server reagiert mit dem Status 416 (angeforderten Bereich nicht erfüllbar) ‚‘

ich brauche Amazon S3 Videos, zum Beispiel zu lesen: video here

Hat jemand irgendwelche Ideen?

Antwort

0

Haben Sie das Dokument Manual Amazon SDK .. gelesen?

(1) Download neueste stabile Version von SDK

(2) Entpacken Sie die ZIP-Datei & in wamp/www Ordner

(3) Umbenennen config-sample.inc.php Datei config .inc.php

(4) in dem Zugriffsschlüssel & geheime Schlüssel (abgerufen von Amazon S3-Konto) in über Datei speichern & Ausfahrt

(5) erstellen eine Beispieldatei public/private Objekte von Amazon S3

+0

sehe ich tat alles, was Sie gesagt haben, aber es hat nicht funktioniert. Wie sieht der Code in der Beispieldatei aus, um die Datei in Amazon S3 anzuzeigen? Entschuldigung für mein schlechtes Englisch –

+0

Haben Sie 'streamWrapper' mit Ihrem s3 Client registriert? –

+0

https://prnt.sc/fuob6y Ja, aber wie lese ich das Video im Browser zurück? Ich habe bereits versucht, in $ contents = file_get_contents ("s3: // {$ bucket}/{$ key}") zu echotieren, aber es funktioniert nicht –

Verwandte Themen