Что лучший способ состоит в том, чтобы вычислить длину flv файла с помощью php с внешними зависимостями как ffmpege, потому что клиентский сайт работает на общем хостинге, itry http://code.google.com/p/flv4php/, но это извлекает метаданные, и не все видео содержат метаданные?
Есть не слишком сложный способ сделать это.
Файлы FLV имеют особую структуру данных, которая позволяет анализировать их в обратном порядке при условии, что файл правильно сформирован.
Просто откройте файл и найдите 4 байта до конца файла.
Вы получите 32-битное значение с прямым порядком байтов, которое представляет размер тега непосредственно перед этими байтами (файлы FLV состоят из тегов). Вы можете использовать функцию unpack
со спецификацией формата «N».
Затем вы можете вернуться к количеству байтов, которое вы только что нашли, что приведет вас к началу последнего тега в файле.
Тег содержит следующие поля:
Итак, все, что вам нужно сделать, это пропустить первые 32 бита и распаковать ('N', ...) значение временной метки, которое вы прочитали.
Поскольку продолжительность тега FLV обычно очень мала, он должен давать достаточно точную продолжительность файла.
Вот пример кода:
$flv = fopen("flvfile.flv", "rb");
fseek($flv, -4, SEEK_END);
$arr = unpack('N', fread($flv, 4));
$last_tag_offset = $arr[1];
fseek($flv, -($last_tag_offset + 4), SEEK_END);
fseek($flv, 4, SEEK_CUR);
$t0 = fread($flv, 3);
$t1 = fread($flv, 1);
$arr = unpack('N', $t1 . $t0);
$milliseconds_duration = $arr[1];
Два последних fseek можно разложить на множители, но я оставил их оба для ясности.
Редактировать: Исправлен код после некоторого тестирования
Расчет продолжительности фильма примерно таков:
размер файла в байтах / (битрейт в килобитах в секунду / 8)