Простейший медиасервер прямо на коленке.
Решил написать статейку, возможно, кому-то подобный "хэлоуворлд" будет интересен и расскажет что-то новое, или сподвигнет на дальнейшее изучение фич, которые были использованы, ну и проч проч. Задача - в десяток строк кода сделать видеохостинг. Все опыты проводились на Ubuntu 16.04.
Все, что для этого (ffmpeg, python, bash) вроде как есть из коробки.
Для начала вкратце объясню, как это работает. Есть такая технология - CGI. Оно выполняет скрипты на стороне сервера и показывает stdout в виде либо текста, либо html. Запилим такой скрипт:
#!/bin/bash
echo "Content-Type: text/html"
echo
echo "<html>"
echo "<head><title>Media_test</title></head>"
echo "<body>"
for file in *; do if [[ "$file" == *.mp4 ]]; then
echo "<h3> "$file" <h3>"
echo "<video src=\"../$file\" controls type="video/mp4"></video>";
fi
done
echo "</body></html>"
Назовем его, скажем, test, создадим в папке с вашими медиафайлами папочку cgi-bin, кинем туда этот скрипт (не забудьте сделать его исполняемым).
Что делает скрипт?
Сначала - стандартная заглушка для html, заголовок, потом он перебирает файлы, и если находит видео mp4, выводит название и само видео тегом <video>.
Где подвох?
Подвох в том, что html5 умеет очень ограниченное количество форматов, и обычные mkv, которые, как правило, h264+ac3, в этот список не входят. Но можно перепаковать их сравнительно малой кровью в mp4 h264+aac такой командой в папке с медиафайлами:
for i in *mkv; do ffmpeg -i "$i" -strict experimental -c:v copy -c:a aac -b:a 192k "$i".mp4; done
И, в финале, нам нужен http-сервер. Т.к пример у нас хэллоуворлдный, воспользуемся встроенным в питон. Выполним в папке с медиафайлами:
python3 -m http.server --cgi
Все! Вы великолепны! Перейдите по адресу 127.0.0.1:8000/cgi-bin/test и полюбуйтесь проделанной работой))
Ну и ложка дегтя. Питоновский сервер слаб на обе ноги, и потому страничка с большим количеством жирных файлов будет подгружаться очень долго. Для серьезных вещей он, ясен хрен, не годится.
Я бы посоветовал не заниматься сбором плеера из говна и палок, а воспользоваться уже готовым и более, чем красивым. Есть Plex Server. Работает так же из коробки, нужно только установить. Красивый web-интерфейс, интуитивное управление, доступ из любой точки. + взаимодействие со Smart TV.
Ставил у себя на FreeBSD. Но раз заработало там, то на линуксе запустится еще быстрей и проще
А что, в убунте вернули ffmpeg? Вроде avconv был некоторое время (я сейчас не на линуксе).
А ещё, хром по крайней мере, умеет mkv - на нем основан контейнер для webm, но кодеки в него положить можно любые которые может хром, в том числе h264 (а вот ac3 врядли). Safari жрет все что прожевывает QuickTime (правда это не много). Короче есть некоторые возможности сверх определенных стандартов.
Меня волнует другой вопрос, вы это делали с целью последующего практического применения сего сервера или баловства (проверки навыков) ради?
А разве этот скрипт работает?
В for цикле вы ищите в текущей директории(откуда был запущен скрипт, это $PWD), а ссылку делаете на уровень ниже. Я понимаю что скрипт находится в папке cgi-bin, а файлы в ../test, но как тогда работает for? У меня есть предположение почему он может работать, но при изменении конфига апача, работать скорее всего перестанет.