рассчитать длину видеофайла FLV? используя чистую php

Каков наилучший способ рассчитать длину FLV-файла с помощью php с внешними зависимостями, такими как ffmpege, потому что клиентский сайт работает на общем хостинге, itry http://code.google.com/p/flv4php/ , но он извлекает метаданные, а не все видео содержат метаданные?

    Это не слишком сложный способ сделать это.

    Файлы FLV имеют определенную структуру данных, которые позволяют анализировать их в обратном порядке, предполагая, что файл хорошо сформирован.

    Просто скопируйте файл и найдите 4 байта до конца файла.

    Вы получите 32-значное значение большого конца, представляющее размер тега непосредственно перед этими байтами (FLV-файлы сделаны из тегов). Вы можете использовать функцию unpack с спецификацией формата «N».

    Затем вы можете вернуться к количеству найденных байтов, что приведет вас к началу последнего тега в файле.

    Тег содержит следующие поля:

    • один байт, сигнализирующий тип тега
    • большое 24-битное целочисленное целое число, представляющее длину тела для этого тега (должно быть значение, которое вы нашли раньше, минус 11 … если нет, то что-то не так)
    • большое 24-битное целочисленное целое число, представляющее метку времени тега в файле, в миллисекундах, плюс 8-битное целое число, увеличивающее временную метку до 32 бит.

    Итак, все, что вам нужно сделать, это пропустить первые 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 могут быть факторизованы, но я оставил их для ясности.

    Изменить: исправлен код после некоторого тестирования

    Расчет для получения продолжительности фильма примерно такой:

    size of file in bytes / (bitrate in kilobits per second / 8)