Имеется некий абстрактный сервер, который отдает видео-контент в flv. Он так же умеет отдавать любой фрагмент файла любой длины. Всегда известно — полный размер файла, в каком формате закодировано видео и аудио.
Допустим есть видео ролик длиной 5 минут. Возможно ли не скачивая весь ролик, сохранить только выбранный видео фрагмент, допустим в 1 минуту, как уже полноценный ролик?
Какая дополнительная информация нужна для реализации?
Будет проще, если дадите ссылку на этот сервис.
ffmpeg умеет качать медиафайлы, так что этот вариант может прокатить, даже если не знаете длины файла изначально
Не совсем понятно, в чем проблема, если умеет отдавать любой фрагмент файла любой длины. В случае с псевдостримингом, обычно если сделать запрос типа example.com/video.flv?start=10&stop=30, то на выходе получим 20-секундный flv ролик, который можно скачать и сохранить.
Я имел в виду, что отдается кусок файла. То есть сервер просто читает с файла данные и отдает без какого либо преобразования(тупая дозагрузка если коротко).
Kicker, вы писали, что Всегда известно — полный размер файла, в каком формате закодировано видео и аудио. А точнее? Если известны битрейт, контейнер и кодеки, то можно вычислить и время, а соответственно, и «кусок в байтах»
Да известно. Время ролика в секундах тоже известно(забыл упомянуть). Подскажите пожалуйста как основываясь на этих данных можно вычислить смещение на кусок и соответственно саму длину куска в байтах? И как после получения фрагмента правильно сохранить файл для последующего проигрывания? Спасибо!
Я не подскажу, но, мне кажется, что валидный файл вы не получите, если просто скачаете кусок с N байта длиной в K. Тут лучше использовать ffmpeg, как сказано выше.
В начале flv файла есть таблица с соответствием смещения в байтах для каждой секунды ролика. Формат не подскажу, но уверен, что утилиты для просмотра этой таблицы есть (можно попробовать github.com/unnu/flvtool2). Далее, можно скачать ролик начиная с нужного офсета и добавить перед этим куском 13-байтный заголовок «FLV\x1\x5\0\0\0\x9\0\0\0\0», должен получиться валидный flv файл.