2013-02-19 12 views
7

के माध्यम से यहाँस्ट्रीमिंग एमपी 3 फ़ाइल php

set_time_limit(0); 
$dirPath = "path_of_the_directory"; 
$songCode = $_REQUEST['c']; 
$filePath = $dirPath . "/" . $songCode . ".mp3"; 
$strContext=stream_context_create(
    array(
     'http'=>array(
     'method'=>'GET', 
     'header'=>"Accept-language: en\r\n" 
     ) 
    ) 
); 
$fpOrigin=fopen($filePath, 'rb', false, $strContext); 
header('content-type: application/octet-stream'); 
while(!feof($fpOrigin)){ 
    $buffer=fread($fpOrigin, 4096); 
    echo $buffer; 
    flush(); 
} 
fclose($fpOrigin); 

यह मैक मिनी और अन्य सभी पीसी पर काम कर रहा है लेकिन iPad और iPhone पर काम नहीं कर रहा php के माध्यम से एमपी 3 फ़ाइल स्ट्रीम करने के लिए मेरे php कोड है। यहां तक ​​कि स्ट्रीमिंग अन्य सभी स्मार्ट फोन पर काम कर रही है। आपकी सहायता का आभार होगा।

धन्यवाद

उत्तर

3

क्यों content-type: application/octet-stream अगर यह एक गीत है? हेडर बदलें:

set_time_limit(0); 
$dirPath = "path_of_the_directory"; 
$songCode = $_REQUEST['c']; 
$filePath = $dirPath . "/" . $songCode . ".mp3"; 
$strContext=stream_context_create(
    array(
     'http'=>array(
     'method'=>'GET', 
     'header'=>"Accept-language: en\r\n" 
     ) 
    ) 
); 
$fpOrigin=fopen($filePath, 'rb', false, $strContext); 
header('Content-Disposition: inline; filename="song.mp3"'); 
header('Pragma: no-cache'); 
header('Content-type: audio/mpeg'); 
header('Content-Length: '.filesize($filePath)); 
while(!feof($fpOrigin)){ 
    $buffer=fread($fpOrigin, 4096); 
    echo $buffer; 
    flush(); 
} 
fclose($fpOrigin); 

ले: Content-Transfer-Encoding हटा दिया और inline

+0

तदनुसार, लेकिन अभी भी iPhone और iPad पर काम नहीं कर बदल दिया है। कोड आईफोन और आईपैड को छोड़कर सभी प्लेटफार्मों और अन्य सभी स्मार्ट फोन के पीसी पर काम कर रहा है। कोड के साथ क्या गलत है? – Anindya

+0

मैंने एक फ़ाइल नाम जोड़ा है, उन शीर्षकों को भी जोड़ने का प्रयास करें। –

+0

आईफोन और काम पर परीक्षण किया। –

3
<?php 
set_time_limit(0); 
$dirPath = "path_of_the_directory"; 
$songCode = $_REQUEST['c']; 
$filePath = $dirPath . "/" . $songCode . ".mp3"; 
$bitrate = 128; 
$strContext=stream_context_create(
    array(
     'http'=>array(
     'method'=>'GET', 
     'header'=>"Accept-language: en\r\n" 
     ) 
    ) 
); 


header('Content-type: audio/mpeg'); 
header ("Content-Transfer-Encoding: binary"); 
header ("Pragma: no-cache"); 
header ("icy-br: " . $bitrate); 

$fpOrigin=fopen($filePath, 'rb', false, $strContext); 
while(!feof($fpOrigin)){ 
    $buffer=fread($fpOrigin, 4096); 
    echo $buffer; 
    flush(); 
} 
fclose($fpOrigin); 

को attachment से Content-Disposition बदल मैं जानता हूँ कि इस पोस्ट पिछले साल से था, लेकिन किसी को यह उपयोगी हो सकता है। यह सामग्री स्ट्रीम करेगा।

1

मुझे पता है कि यह पुराना है, लेकिन हम आईओएस के साथ एक ही तरह की समस्या में फंस गए।

असल में, ऐसा लगता है कि अपने अनुप्रयोग देशी खिलाड़ी का उपयोग करता है, तो फ़ाइल को पढ़ने के लिए, आप स्वीकार करें-रेंज अपनी फ़ाइल के लिए और 206 आंशिक सामग्री पढ़ने के लिए लागू करना होगा।

हमारे मामले में, क्या हो रहा था कि फ़ाइल कुल में 4 मिनट लंबी थी। ऐप लगभग 1min 50 सेकेंड के लिए खेलेंगे और फिर शुरुआत में लूप होगा। यह फ़ाइल की कुल लंबाई का पता नहीं लगाएगा।
भले ही हमने किसी को स्वीकृति-रेंज सेट अप नहीं किया था, फिर भी आईओएस इसे अनदेखा कर रहा था और अभी भी फाइल के कुछ हिस्सों के लिए पूछ रहा था। चूंकि हम पूरी चीज वापस कर रहे थे, इसलिए यह अगले "रेंज" पढ़ने पर शुरुआत में "लूपिंग" था।

आंशिक सामग्री के कार्यान्वयन के लिए, हम https://mobiforge.com/design-development/content-delivery-mobile-devices इस्तेमाल किया, परिशिष्ट A: थॉमस थोमसन

द्वारा एप्पल iPhone के लिए स्ट्रीमिंग मुझे आशा है कि यह किसी को मदद मिलती है

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