2011-06-02 13 views
5

जबकि मैं मैं 0 दूसरे जहां के रूप में यह केवल कुछ वीडियो के साथ होता है, और मेरी समारोह ठीक काम करता है पाने के लिए एक flv वीडियो फ़ाइल की लंबाई प्राप्त करने की कोशिश।मिल flv वीडियो लंबाई

नीचे मेरा कोड है।

<?php 
function mbmGetFLVDuration($file){ 
    // read file 
    if (file_exists($file)){ 
    $handle = fopen($file, "r"); 
    $contents = fread($handle, filesize($file)); 
    fclose($handle); 
    // 
    if (strlen($contents) > 3){ 
     if (substr($contents,0,3) == "FLV"){ 
     $taglen = hexdec(bin2hex(substr($contents,strlen($contents)-3))); 
     if (strlen($contents) > $taglen){ 
      $duration = hexdec(bin2hex(substr($contents,strlen($contents)-$taglen,3))) ; 
      return $duration; 
     } 
     } 
    } 
    } 
} 
// not working video file 
$result = ceil(mbmGetFLVDuration('not_working_copy.flv')/1000); 
// working video file 
//$result = ceil(mbmGetFLVDuration('working_copy.flv')/1000); 
echo date('H:i:s',mktime(0,0,$result)) 
?> 

मैं संलग्न किया है दोनों काम कर रहे हैं और नीचे दिए गए लिंक में flv वीडियो काम नहीं कर रहा:

काम कर वीडियो: http://blog.developeronhire.com/wp-content/uploads/downloads/2011/06/working_copy.flv

नहीं काम कर वीडियो: http://blog.developeronhire.com/wp-content/uploads/downloads/2011/06/not_working_copy.flv

किसी भी विचार की सराहना की जाएगी।

आप

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/3282273/calculate-flv-video-file-length-using-pure-php –

+0

@Mr। काला: खेद है कि यह नकल नहीं है। कृपया मेरी समस्या पहले पढ़ें और टिप्पणी करें। – Sujeet

+1

एक फ़ाइल पर काम कर रहा है और दूसरी ओर यह काम नहीं कर रहा है, क्या यह FLV फ़ाइल की वीडियो लंबाई प्राप्त करने के लिए डुप्लिकेट प्रश्न है? –

उत्तर

7

समस्या इस प्रकार का होता है देखें मिल जाएगा जब किसी वीडियो की मेटा जानकारी आंशिक रूप से या पूरी तरह से corrputed है। इस समस्या को हल करने के लिए, अपलोड करते समय ऐसी दूषित फ़ाइल की मरम्मत के लिए, FFMPEG कमांड लाइन टूल का उपयोग करें। नीचे एक कोड स्निपेट है जो FFMPEG का उपयोग करके वीडियो अवधि निकालता है।

<?php 
    ob_start(); 
    passthru("ffmpeg -i working_copy.flv 2>&1"); 
    $duration = ob_get_contents(); 
    $full = ob_get_contents(); 
    ob_end_clean(); 
    $search = "/duration.*?([0-9]{1,})/"; 
    print_r($duration); 
    $duration = preg_match($search, $duration, $matches, PREG_OFFSET_CAPTURE, 3); 
    print_r('<pre>'); 
print_r($matches[1][0]); 
print_r($full); 
?> 

FFMPEG को http://www.ffmpeg.org

0

धन्यवाद flv वीडियो के मेटा डेटा निकाल सकते हैं, तो आप लंबाई, आकार आदि जैसे सभी जानकारी लिंक http://code.google.com/p/flv4php/ गुड लक सुजीत

+0

लेकिन क्या यह सभी प्रकार की वीडियो फाइलों के लिए है ?? –

1

सबसे पहले जाना डाउनलोड करने के लिए, मुझे डर अपने कार्य, सब पर काम कर रहे एक पर्याप्त बड़ी FLV वीडियो फ़ाइल को देखते हुए, और मार PHP के memory_limit बंद हो सकता है कर रहा हूँ

$contents = fread($handle, filesize($file)); 

क्योंकि आप वास्तव में पूरी फ़ाइल को स्मृति में लोड कर रहे हैं।

फिर, गैर काम कर फ़ाइल भी मेरे लिए भ्रष्ट लगता है।

$ flvmeta --check not_working_copy.flv 
0x00488473: error E30013: unknown tag type 250 
0x00488477: error E40023: timestamps are decreasing from 130543 to 0 
2 error(s), 0 warning(s) 

आप कुशलता से एक फ़ाइल से अवधि कि भ्रष्ट हो सकता है, या गैर मानक टैग युक्त पाने के लिए की जरूरत है, मैं तुम्हें MediaInfo उपयोग करने के लिए सलाह देते हैं, जिस पर एक बहुत अच्छा काम करता है: flvmeta निम्नलिखित उत्पादन देता है ffmpeg की तरह उन्हें बदलने के बिना, सबसे विदेशी वीडियो फ़ाइलों को संभालने में भी।

यह किसी भी कमांड लाइन प्रोग्राम की तरह PHP से बुलाया जा सकता है और इसके उत्पादन आदेश पंक्ति तर्क के माध्यम से नियंत्रित:

$ MediaInfo --Inform="Video;%Duration%" not_working_copy.flv 
130000 

जो मिलीसेकेंड में वीडियो की अवधि को प्रदर्शित करता है।

+0

उस समय के लिए बहुत धन्यवाद। हां आपका समाधान ठीक काम करता है। फिर से धन्यवाद – Sujeet