Хотя я пытаюсь получить длину FLV-видеофайла, я получаю 0 секунду, когда это происходит только с некоторыми видео, иначе моя функция работает нормально.
ниже мой код.
<?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
любая идея будет оценена.
спасибо
Этот тип проблемы возникает, когда метаинформация видео частично или полностью сопоставлена. Чтобы устранить эту проблему, используйте инструмент commf-line 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
Прежде всего, я боюсь, что ваша функция может вообще перестать работать, учитывая достаточно большой видеофайл FLV и попав в память memory_limit PHP
$contents = fread($handle, filesize($file));
потому что вы фактически загружаете весь файл в память.
Тогда, неработающий файл также кажется поврежденным мне. flvmeta дает следующий результат:
$ 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 , который отлично справляется с обработкой даже самых экзотических видеофайлов, не изменяя их, как ffmpeg. ,
Его можно вызывать из PHP, как любая программа из командной строки, а его вывод управляется с помощью аргументов командной строки:
$ MediaInfo --Inform="Video;%Duration%" not_working_copy.flv 130000
который отображает продолжительность видео в миллисекундах.
Вы можете извлекать метаданные flv-видео, вы найдете всю информацию, такую как длина, размер и т. Д. См. Ссылку http://code.google.com/p/flv4php/ Удача sujeet