PHP ile HTML5 ses iPad / iPhone üzerinde çalışmıyor

3 Cevap php

Tamam, ben iPad üzerinde bir HTML ses kodu oynamaya çalışıyorum ama çalışmıyor.

Ben HTML5 ses koduna MP3 isteği göndermek için bir PHP komut dosyası oluşturulur

mp3_file_player.php? n = mp3file.mp3

The player is here: http://www.avault.com/news/podcast-news/john-romero-podcast-episode-80/

Hatta benim iPod Touch desteklenen bir tarayıcı her HTML5 üzerinde çalıştığını göreceksiniz. Ama (ben iyi çalıştı, Safari / Windows denedim) hatta Mac OSX üzerinde Safari, iPad / iPhone üzerinde çalışmıyor

Bu benim PHP kodu:

header("X-Powered-By: ");
header("Accept-Ranges: bytes");
header("Content-Length: ". (string)(filesize($episode_filename)) ."");
header("Content-type: audio/mpeg");
readfile($episode_filename);
exit();

Her şey çalışıyor, MP3 direkt mp3 okuma gibi aynı başlıkları vardır.

Doğrudan dosya erişimi HTTP Başlıkları:

(Status-Line) HTTP/1.1 200 OK
Date Mon, 31 May 2010 20:27:31 GMT
Server Apache/2.2.9
Last-Modified Wed, 26 May 2010 13:39:19 GMT
Etag "dac0039-41d91f8-4877f669cefc0"
Accept-Ranges bytes
Content-Length 50656162
Content-Range bytes 18390614-69046775/69046776
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type audio/mpeg

Benim PHP komut dosyası HTTP Başlığı:

(Status-Line) HTTP/1.1 200 OK
Date Mon, 31 May 2010 20:27:08 GMT
Server Apache/2.2.9
Accept-Ranges bytes
Content-Length 69046776
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type audio/mpeg

Bu kadar farklı tek şey Content-Range, ben bile eklemek için çalıştı, ama bunu kullanırsanız oyuncu benim Ipod Touch çalışmaz. Yani kaldırıldı.

Çok teşekkür ederim.

3 Cevap

Try remove header("Accept-Ranges: bytes"); as your not sending a portion of the file. Remove the header("X-Powered-By: "); as Apache serves that anyway

$etag = md5(serialize(fstat($fp))); 
fclose($fp); 
header('Etag: '.$etag); 

^ ^ Elektronik Etiket Ekle

Ve bir gitmek vermek!

Content-Range durumu 206 ile geçerlidir.

Sizin kodu (eğer Range başlık ayrıştırmak ve buna bağlı vücut tepki, ve Content-Length = filesize($episode_filename) birbirine birleştirirseniz olurdu hiç kısmi istekleri desteklemek için görünmüyor ) hemen hemen her durumda geçersiz olacaktır.

HTTP sunucu içinde HTTP sunucusu uygulamak için gidiyoruz değil, Apache MP3 hizmet edelim.

Eğer erişim denetimi PHP uygulamaya ihtiyacınız varsa, X-Sendfile uzantısını kontrol veya tahmin edilemeyen dosya ile sembolik oluşturmak ve orada müşterileri yönlendirmek.

If you really want to do HTTP partial downloads the hard way, read RFC 2616 or find library that will do it all for you. Don't just blindly send whatever HTTP headers you find.

i bir müzik çalara mp3'ler kadar hizmet ediyordu .. Ben de benzer başlıklar vardı. Bazı mp3 ipad oynadı. diğerleri vermedi.

i found this article fixed my issues. http://mobiforge.com/developing/story/content-delivery-mobile-devices Basically that Apple iPhone uses HTTP byte-ranges for requesting audio and video files.

benim başlıkları şunlardır:

header("X-Powered-By: ");
header('Content-Length: '. (string)filesize($path)); // provide file size
header('Content-type: audio/mpeg');

if(isset($_SERVER['HTTP_RANGE']))  { // any device that supports byte-ranges
 rangeDownload($path); // function from article mentioned above
}

$fp = fopen($_SERVER["SCRIPT_FILENAME"], "r");
$etag = md5(serialize(fstat($fp))); 
fclose($fp); 
header('Etag: '.$etag); 
readfile($path);