2010-07-12 4 views
1

В соответствии с этим Mozilla article on Ogg media средства массовой информации работают более плавно в браузере с заголовком X-Content-Duration, давая длину в секундах от фрагмента.Неинформативные пользовательские HTTP-заголовки

Если предположить, что у меня есть, что длина где-то хранить (конечно, в базе данных, может быть, и в самом имени файла (video-file-name.XXX.ogv, где XXX это время в секундах)), есть ли способ, чтобы сформировать этот дополнительный заголовок, используя только Apache .htaccess настройки? Я спрашиваю, потому что загрузка файла в PHP-скрипт кажется неуклюжим, особенно когда PHP по умолчанию добавляет другие заголовки, которые отключают кеширование, и не будут правильно реагировать на запросы диапазона (частичного контента). Да, много кода можно было бы написать на PHP, чтобы поддерживать ETags и запросы диапазона, но похоже, что излишний способ сделать все это просто для добавления одного заголовка, когда у Apache есть все функциональные возможности.

+0

Одна из проблем, которые я вижу с этой идеей, заключается в том, что длина файла (в секундах или как-то еще) не является размером файла. –

ответ

1

Это домен mod_cern_meta. Он позволяет статически назначать дополнительные HTTP-заголовки файлам.

Вы можете использовать задание cron и создать файл * .meta для каждого видео.

+0

Я никогда не слышал о mod_cern_meta. Выглядит интересно. – TRiG

+0

@TRiG: Это довольно старый модуль, возможно, от времени до Apache. Но это, скорее всего, самое эффективное решение для изменения заголовков. – mario

+0

Я провел некоторое тестирование и получил его на работу, поэтому я решил пойти с этим. Проецируемый рабочий процесс: '1' Пользователь загружает видео или аудиофайл. '2' PHP вызывает FFmpeg, чтобы узнать различную информацию о медиа-файле (контейнер, кодеки, продолжительность). '3' PHP вызывает FFmpeg для создания версий файла во всех форматах, необходимых для HTML5 (если исходная загрузка уже находится в одном таком формате, и в этом случае у нас будет немного меньше работы). '4' PHP использует информацию о длительности, полученную им ранее из FFmpeg, для создания файлов' .meta' для каждого файла Ogg.Я еще не начал загрузку! – TRiG

1

Я не есть примеры, но вы должны иметь возможность использовать mod_header для указания заголовков HTTP Response на уровне .htaccess.

Конечно, вопрос о том, где я должен добавить заголовок, действительно зависит от того, как вы к нему обращаетесь. Если вы просто нажимаете статический ресурс для загрузки, добавление его через Apache имеет смысл. Однако вы упоминаете БД. Если вы решите сохранить эти файлы в базе данных, тогда у вас есть API, предоставляющий этот файл, и в этом случае реализация API должна добавить заголовок, а не отключить его до apache.

Кроме того, если динамические данные, которые вы хотите когда-либо, требуют обработки для определения (не в имени файла или т. Д.), То вы уже используете какой-то движок кода для его достижения, просто добавьте этот заголовок.

+0

Видео или аудиофайл в идеале был бы статическим файлом, хотя HTML, в который он встроен, был написан PHP. – TRiG

1

Это то, что вы делаете с расширением mod_perl, чтобы перехватить эти запросы и добавить дополнительные заголовки, прежде чем разрешать Apache продолжать его обработку.

Один чисто PHP подход, который мог бы работа должна иметь маршрут запросов через PHP, используя mod_rewrite, добавить дополнительный заголовок, а затем пусть Apache справиться с остальными с помощью функции virtual.

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

+0

Функция 'virtual()' выглядит увлекательной, и я благодарю вас за то, что привлек мое внимание к фрагменту PHP, о котором я ничего не знал, но я решил пойти с 'mod_cern_meta'. – TRiG

Смежные вопросы