2010-05-31 12 views
7

ठीक है पर काम नहीं करता, मैं iPad पर एक HTML ऑडियो कोड चलाने का प्रयास कर रहा हूँ, लेकिन काम नहीं करता।HTML5 ऑडियो iPad/iPhone

मैं एक PHP स्क्रिप्ट बनाया HTML5 ऑडियो कोड

mp3_file_player.php लिए एमपी 3 अनुरोध करने के लिए भेजने के लिए एन = mp3file.mp3

खिलाड़ी यहाँ है: http://www.avault.com/news/podcast-news/john-romero-podcast-episode-80/

आप देखेंगे कि मेरे आईपॉड टच पर भी हर HTML5 समर्थित ब्राउज़र पर काम करता है। लेकिन iPad/iPhone के पर काम नहीं करता है, यहां तक ​​कि पर मैक OSX सफारी पर (मैं सफारी/विंडोज पर की कोशिश की है, ठीक काम किया)

यह मेरा PHP कोड है:

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

सब कुछ ठीक काम करता है, एमपी 3 है एमपी 3 पढ़ने के समान ही हेडर।

(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 

केवल एक चीज अलग यह सामग्री रेंज है, मैं भी कोशिश की इसे जोड़ने के लिए: मेरे PHP स्क्रिप्ट से

(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 

HTTP हैडर:

HTTP प्रत्यक्ष फ़ाइल पहुँच से हेडर , लेकिन अगर मैं इसका इस्तेमाल करता हूं तो खिलाड़ी मेरे आईपॉड टच पर काम नहीं करेगा। तो मैंने हटा दिया।

बहुत बहुत धन्यवाद।

+0

वर्क्स में अच्छी तरह से। – zneak

+0

लाइव प्रसारण वास्तव में मेरे लिए सफारी पर चीजों को गड़बड़ कर रहा है। – thouliha

उत्तर

2

अपनी फ़ाइल के एक हिस्से के रूप में नहीं भेज header("Accept-Ranges: bytes"); हटाने का प्रयास करें। header("X-Powered-By: "); निकालें के रूप में कार्य करता है अपाचे कि वैसे भी

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

एक इलेक्ट्रॉनिक टैग जोड़ें

और यह एक जाना दे ^^!

+0

धन्यवाद, मैंने इसे सब कुछ बदल दिया, इसे आजमाएं और परिणाम देखें। लेकिन आपके $ etag में $ fp गुम है, मुझे यह ऑनलाइन मिला: $ fp = fopen ($ _ सर्वर ["SCRIPT_FILENAME"], "r"); सही? धन्यवाद। मैंने अभी लागू किया है, आईपैड के साथ एक दोस्त से यह परीक्षण करने के लिए कहेंगे। – saulob

+0

रॉबर्टपिट, वह था। मैंने स्वीकृति-रेंज हटा दी और एटाग जोड़ें, मैंने एक्स-पावर्ड को नहीं हटाया। लेकिन यह काम किया। सबकुछ अब चिकना है। धन्यवाद। – saulob

+2

ईटाग की आवश्यकता नहीं है, खासकर जब आप कैश सत्यापन लागू नहीं कर रहे हैं। – Kornel

3

Content-Range स्थिति के साथ ही मान्य है 206.

आपका कोड बिल्कुल आंशिक अनुरोध का समर्थन करने के लिए प्रतीत नहीं होता है (यदि आप Range हैडर पार्स करने के लिए है और एक साथ पिरो तदनुसार शरीर की प्रतिक्रिया चाहते हैं, और Content-Length = filesize($episode_filename) होगा लगभग हर मामले में अवैध)।

आप HTTP सर्वर के भीतर HTTP सर्वर को लागू करने के लिए नहीं जा रहे हैं, अपाचे एमपी 3 की सेवा करते हैं।

यदि आपको PHP में लागू नियंत्रण नियंत्रण की आवश्यकता है, तो एक्सटेंशन देखें या अनजान फ़ाइल नामों के साथ सिम्लिंक बनाएं और वहां ग्राहकों को पुनर्निर्देशित करें।

तुम सच में HTTP आंशिक डाउनलोड मुश्किल तरीके से करते हैं, RFC 2616 पढ़ने के लिए या पुस्तकालय कि यह सब आप के लिए क्या करेंगे पता लगाना चाहते हैं। जो भी HTTP हेडर आपको मिलते हैं उन्हें अंधेरे से न भेजें।

+0

मुझे अपाचे तक पहुंच नहीं है, धन्यवाद ... – saulob

3

मैं एमपी 3 के ऊपर सेवारत थे एक म्यूजिक प्लेयर के लिए .. मैं इसी तरह के हेडर था। कुछ एमपी 3 आईपैड पर खेला जाता है। दूसरों ने नहीं किया।

मैंने पाया कि यह आलेख मेरे मुद्दों को ठीक करता है। http://mobiforge.com/developing/story/content-delivery-mobile-devices असल में ऐप्पल आईफोन ऑडियो और वीडियो फ़ाइलों का अनुरोध करने के लिए HTTP बाइट-रेंज का उपयोग करता है।

मेरी हेडर हैं:

मैक ओएस एक्स पर नवीनतम वेबकिट निर्माण (हालांकि यह कहते हैं, "सीधा प्रसारण" के बजाय) से
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); 
+0

अच्छा! यह मेरे लिए काम किया, बहुत बहुत धन्यवाद! – timing

संबंधित मुद्दे