2012-07-11 7 views
13

Obecnie próbuję dostarczyć wideo MP4 do użytku w wideo HTML5 (przy użyciu wideo-js) za pomocą skryptu PHP do kontrolowania dostępu do wideo. Po pewnych badaniach udało mi się uzyskać to działa, przy pomocy stackoverflow article found here. Jeśli przejdę do skryptu PHP, mogę obejrzeć film tak, jakbym oglądał go przez absolutną ścieżkę (na przykład localhost/myvideo.mp4 zamiast localhost/myscript.php) w ​​Firefox, Safari i IE. Mój problem dotyczy przeglądarki Google Chrome, która po prostu pokazuje zaciemniony ekran z małym odtwarzaczem multimedialnym pośrodku i nic nie robi.Dostarczanie wideo MP4 przez PHP kończy się niepowodzeniem w Google Chrome

Próbowałem użyć szybkiego przepisywania, takiego jak localhost/avideo.mp4, który prowadzi do skryptu PHP, ale niestety nic to nie zmieniło.

Oto mój skrypt:

if (is_file($uri)) { 
    header('Content-Type: video/mp4'); 
    if (isset($_SERVER['HTTP_RANGE'])) { 
     $this->rangeDownload($uri); 
     exit; 
    } else { 
     header("Content-Length: ".filesize($uri)); 
     $this->readfile_chunked($uri); 
     exit; 
    } 
} else { 
    //error 
} 

Sposób rangeDownload została podjęta bezpośrednio z Dodatku A this link jak zasugerowano w wyżej wymienionym artykule stackoverflow.

+0

Możesz pisać wszystko od informacji nagłówka wysyłanego? – ethrbunny

+0

Typ treści, Akceptuj zakresy, Zakres treści, Długość treści, HTTP/1.1 206 Częściowa zawartość. Nagłówki te są używane w pierwszym przypadku przy użyciu polecenia rangeDownload, które jest używane w przeglądarce Chrome, chociaż readfile_chunked używa mniej nagłówków (nadal nie działa w chrome). – AaronDS

+0

Jedyne, co mogę zasugerować, to Content-Transfer-Encoding: binary. Jestem w stanie przesłać dźwięk przez PHP do wszystkich przeglądarek za pomocą tego zestawu. – ethrbunny

Odpowiedz

2

Być może problem dotyczy adresu URL (dokładniej, rozszerzenia). Zwykle używałbyś nagłówka Content-Disposition, ale rozumiem, że nie jest to pożądane przy dostarczaniu treści do telefonów komórkowych.

Spróbuj użyć localhost/myscript.php/myvideo.mp4

Ważne jest, aby nie używać „Content-Disposition” nagłówek HTTP, ponieważ niektóre telefony odmówić przyjęcia treści podczas korzystania z niego. Dodanie nazwy pliku do adresu URL spowoduje, że telefon pomyśli, że jest to prawdziwy plik i akceptuje go.

Teraz, kiedy wysyłasz adres URL pobierania do klienta, zwykle nie wiesz jeszcze, jakie urządzenie posiada klient, więc nie wiesz, jakie formaty plików będzie obsługiwać urządzenie. Dlatego nie można podać nazwy pliku pod tym adresem URL, a po raz kolejny potrzebna będzie strona pobierania pośredniego. Po raz kolejny będziemy używać adresu URL takiego:

http://wap.mydomain.tld/get.php/123456abcdef 

tym czasie, gdy klient łączy się pobrać zawartość, skrypt get.php nie utworzy plik tymczasowy, ale punkt do innego skryptu strumieni plik zawartość. Przypuśćmy uzyskanej zawartości do pobrania będzie „image.jpg”, pośrednia strona pobierania mógłby wskazać klientowi do adresu URL, takich jak:

http://wap.mydomain.tld/download.php/123456abcdef/image.jpg 

Od (http://mobiforge.com/developing/story/content-delivery-mobile-devices)

+0

Dziękuję za odpowiedź, chociaż jak powiedziałem w moim pytaniu: "Próbowałem użyć szybkiego przepisywania, takiego jak localhost/avideo.mp4, który prowadzi do skryptu PHP, ale niestety nic to nie zmieniło.". Nie jestem pewien, co jeszcze sugerujesz, że robię inaczej? – AaronDS

+0

Różnica może wynikać z rzeczywistego adresu URL przeglądarki. Jeśli używasz przekierowania (30x), to przeglądarka ostatecznie uzyskuje końcowy URL z rozszerzeniem .php zamiast rozszerzenia .mp4 - może to być bardzo ważne. Czy próbowałeś porównać wszystkie nagłówki żądania/odpowiedzi (na przykład używając Fiddlera?) –

+0

Patrzę teraz na informacje o nagłówku w Chrome, ale nie jestem pewien, co z tym zrobić. Mogę powiedzieć, że istnieje wyraźna różnica. Będę śledzić ten post ze zrzutem ekranu w ciągu kilku godzin. – AaronDS

2

Rozumiem, że jesteś za pomocą wideo-js, ale polecam używanie html5media (sprawdź także github page, aby uzyskać więcej informacji). Musiałem zrobić filmy dostępne na stronie internetowej do pracy i próbowałem kilku rzeczy, w tym wideo-js, ale html5media był jedynym, który mogłem dostać działa we wszystkich przeglądarkach.

Notatka boczna, która może pomóc innym: Jednym z wymogów było to, że hostowaliśmy wszystkie pliki, abyśmy nie byli uzależnieni od serwerów stron trzecich w celu obsługi plików JavaScript lub flashowych odtwarzaczy, nie pamiętam, czy z video-js to było łatwe, ale wiem, że dzięki html5media mogliśmy pobrać flowplayer i mieć wszystko na naszych serwerach.

A do generowania 3 Polecam formatów wideo (MP4, WebM i Theora) użyłem Miro Video Converter

+0

Dzięki za ten post, jednak problem nie leży w Video-JS, jest on w szczególności z chromem (wideo nie jest odtwarzane na chromie z wideo-j s out obraz, a podczas korzystania z normalnego pliku wideo, wideo-js działa dobrze). Moje doświadczenia z wideo js były dobre; Użyłem hamulca ręcznego do konwersji plików i do tej pory nie natknąłem się na żadne problemy. Jednak zauważyłem html5media na wypadek, gdy potrzebuję znaleźć coś nowego w przyszłości. Twoje zdrowie. – AaronDS

+0

Nie ma problemu @Noobatron. Nie chcę zniechęcać ludzi do korzystania z wideo-js, ponieważ jeśli potrafisz to zrobić działa, to hej, świetnie! Po prostu myślałem, że ktoś może skorzystać na usłyszeniu o tym, co zrobiłem na wypadek, gdyby napotkali podobne problemy (może po prostu nie wiedziałem, co robię z wideo-js). Mam w domu hamulec ręczny, którego używam do konwertowania DVD na mój telefon z Androidem i działa to naprawdę przyjemnie. – Dean

Powiązane problemy