PHP

2017-03-16 13 views
13

पर आधारित HTTP पर रिकॉर्डिंग फ़ाइलों से लाइव वीडियो स्ट्रीमिंग मैं PHP पर आधारित HTTP पर रिकॉर्डिंग फ़ाइलों से लाइव स्ट्रीमिंग व्यवस्थित करना चाहता हूं।

परिचय: स्ट्रीमिंग सर्वर मैं स्थानीय फ़ाइल (local_file.mpg) और जब ग्राहक से एक अनुरोध प्राप्त तो
$start_byte = filesize("local_file.mpg")-10MB; local_file.mpg से इसे करने के लिए स्ट्रीमिंग शुरू करने के लिए वीडियो लेखन पर अभी भी लिख रहा है और PHP स्क्रिप्ट यह पढ़ना जारी रखें और फ्लशिंग।

समस्या: मैं निम्नलिखित हेडर के साथ HTTP रेंज के माध्यम से स्ट्रीम:
PHP

header('HTTP/1.1 206 Partial Content'); 
header("Content-Type: video/mpeg"); 
header('Content-Length: '.($seek_end - $seek_start)); 
header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$size); 

और फ्लशिंग इस प्रकार है:

while(!feof($fp)){ 
    $buf_size = 1024*8; 
    $pos = ftell($fp); 
    if ($pos >= $item["to_byte"]){ 
      fclose($fp); 
      break; 
    } 

    if ($pos + $buf_size > $item["to_byte"]){ 
     $buf_size = $item["to_byte"] - $pos; 
    } 

    if ($buf_size > 0){ 
     echo fread($fp, $buf_size); 
    } 

    flush(); 
    ob_flush(); 
} 

मैं वीएलसी या FFplay के माध्यम से इसे खोलने, लेकिन यह जब तक खेला समय पल जब धारा का अनुरोध किया गया था। इसकी अपेक्षा की जा सकती है, क्योंकि हम फ़ाइल के आकार को निर्धारित करते हैं और अनुरोधित पक्ष को प्रदान करते हैं। लेकिन अगर हम कृत्रिम रूप से फ़ाइल आकार बढ़ाते हैं, उदाहरण के लिए
$size = filesize("local_file.mpg")+999999999999; यह भी मदद नहीं करता है, क्योंकि वीडियो प्लेयर रिकॉर्ड किए जाने पर बहुत जल्दी नए डेटा का अनुरोध करते हैं। और उस समय भी खेलना बंद कर दिया जब स्ट्रीम का अनुरोध किया गया था।

1. कृपया PHP पर आधारित HTTP पर रिकॉर्डिंग फ़ाइलों से लाइव स्ट्रीमिंग व्यवस्थित करने के लिए सलाह दें।
2. क्या HTTP रेंज तंत्र के साथ ऐसा करना संभव है या मुझे किसी अन्य तरीके का उपयोग करना चाहिए?


अद्यतन: मैं अगले कोड की कोशिश की पर this question आधार पर:

<?php 

$file = "online.mpg"; 

function flush_buffers(){ 
    ob_end_flush(); 
    ob_flush(); 
    flush(); 
    ob_start(); 
} 

header('Content-Type: video/mpeg'); 
$stream = fopen($file, "rb"); 
fseek($stream, (filesize($file)-10000000), SEEK_SET); 

while(1){ 
    $response = fread($stream, 8192); 
    echo $response; 
    flush_buffers(); 
} 

fclose($stream); 
exit(); 
?> 

और यह ffplay के माध्यम से अच्छी तरह से काम करता है, लेकिन वीएलसी के माध्यम से यह तो 1 मिनट से अधिक नहीं खेला और फिर stoped।
कृपया सलाह दें कि इसे वीएलसी पर कैसे काम करें?

+1

आप [इस सवाल] (http://stackoverflow.com/questions/32459509/php-recording-a-live-streaming से कोड लागू करने की कोशिश की करने वाली एक-फाइल)? – MifReal

+0

@MifReal टिप्पणी के लिए धन्यवाद! मैंने कोशिश की और सवाल को अद्यतन किया। क्या तुम इसे जांचोगे? –

उत्तर

3

क्या आपके पास PHP निष्पादन के लिए समय सीमा है? यदि हाँ, के साथ असीमित के लिए इसे बदल:

set_time_limit(0); 
संबंधित मुद्दे