Домашний медиа-сервер

Aerorus

Всем привет!

Некоторое время назад обещал написать небольшую заметку про создание домашнего файлового хранилища и медиа-сервера. Данное руководство подразумевает что вы имеете минимальные навыки пользования гуглом.
Так вот:

Задача:
Создать удобное файловое хранилище с удаленным доступок к файлам и возможностью просмотра и редактирования на различных девайсах в т.ч. и SmartTV.

Что есть:
Старый комп на базе Core2Duo E8400, 8Gb DDR2, 2*ATI Radeon 4850, Kingston SSD 256Gb и с десяток разных HDD от мала до велика с различным объемом данных.
Сайт WordPress на хостинге для опытов.

Введение.

Первое с чем я столкнулся это невозможность подключить большое количество HDD к компу, так как блок питания был не готов что с него будут спрашивать 10 sata power.
пришлось идти в магазин за новым блоком, выбор пал на Zalman с 6 SATA power и 3 Molex которые были превращены в еще 6 SATA power с помощью переходников.

Сборка.

Я думаю подробно расписывать процесс сборки сервера не имеет смысла, вставил HDD в салазки, закрепил, подключил. Операционную систему решено было ставить на SSD для быстродействия.

Установка ОС

Отказавшись от серверной ОС, я установил Ubuntu 16.04 LTS
С дровами и установкой мучаться не пришлось. Убунта поставилась с флешки без каких либо заиканий. Кстати сервер стоит за NAT и аппаратным FireWall 😁.

Fine Tune OS

По конфигурации жестких дисков было выбрано следующее:

SSD диск 256 GB для OS
Массив в 10Тб для постоянных данных (облачное хранилище)
Массив в 5ТБ для медиа-файлов (фильмы, торренты и прочее)
Массив в 2ТБ для резервирования особо важных данных по расписанию.

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

Сервер разместил на работе, так как здесь имеется интернет линк в 300 мбит.

Установка дополнительного ПО

ОС установлена, массивы созданы, теперь самое главное, как заставить все это работать так как нужно. К этому времени появилась хотелка: заставить сервер качать торренты загружаемые в папку X с любого устройства (даже с iphone).

  1. Установка клиента Яндекс Диск, это универсальный клиент, который позволяет создать виртуальную локальную папку и делиться ей. Клиент установлен на:
    -сервер
    -телефоны
    -планшет
    -ноутбуки
    -рабочий компьютер

Далее создаем папку Torrents и получаем ее локальный адрес на нашем сервере: /home/pavel/Yandex.Disk/Torrents
Сюда мы будет скачивать наши торрент файлы со всех устройств.

  1. Устанавливаем Utorrent на наш сервер и настраиваем его чтобы он слушал локальную папочку Torrents на ЯндексДиске.
    Как только в этой папке появляется файл он его читает и ставит задачу на скачивание и удаляет. Параллельно настраиваем пути куда будут скачиваться наши файлы.

Итак, на данный момент, мы можем скачивать torrent файлы в общую папку на ЯндексДиске, сервер будет хватать их и скачивать нам нужный файл.

  1. Plex Media Server

Для того чтобы была возможность обращаться к файлам с любого устройства не прибегая к ssh и sftp я решил установить Plex.
Он умеет создавать библиотеки из медиа файлов, структурировать их, подтягивать постеры, описания и рейтинги к фильмам исходя из метаданных файла, имеет SmartTV app. В общем обладает всеми теми характеристиками, которые необходимы для моих задач.
Есть 2 версии Платная и Бесплатная.
Я уже долгое время использую Бесплатную версию, она предлагает весь необходимый функционал, но если вам будет нужно создать дополнительных пользователей или получать аналитику просмотра файлов, то платите. Около 120$ за вечную лицензию.
Выглядит так:

Кроме всего прочего нет необходимости пробрасывать порты (как же так, у нас же фаерволл и нат??? 😁). Plex использует хитрый протокол и ходит по порту 32400.

  1. Настройка Plex

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

  1. PLEX на SmartTV

Устанавливаем PLEX из магазина SmartTV и проходим процедуру авторизации.
После этого видим все наши библиотеки (Ура!).
Так как приложение ходит напрямую к нашему серверу, имеем возможность смотреть FullHD фильмы в кодеке h264 с полной разверткой без лагов даже по WiFi(!)

  1. Flussonic, ffmpeg и yotube-dl для хотелок

С помощью этих трех программ/утилит мы можем создать свой собственный канал и вещать его в сеть и на телевизоры.

-устанавливаем Flussonic Media Server

Он использует библиотеку ffmpeg. Flussonic понадобится нам
для захвата и раздачи потока.

-Устанавливаем утилиту Youtube-dl

Эта утилита позволяет загружать плейлисты и отдельные ролики без
рекламы с Youtube.
Команда для скачивания выглядит следующим образом:

Как именно работает команда можно разобрать здесь.
Выбираем плейлист и скачиваем файлы в папку на сервере к примеру на /mnt/sda1/Youtube

  1. Настраиваем Flussonic так, чтобы он слушал стрим по localhost/MyLive/x11 (например)
    Для этого нужно создать новый стрим в Publishing Locations и назвать его MyLive

  2. В папке Youtube, куда мы успешко скачали файлы, которые нам любезно подготовил Youtube в одном формате и одном протоколе с единым кодеком создаем файл streaming.sh

sudo touch streaming.sh

открываем файл

sudo nano streaming.sh

вписываем в наш файл скрипт

while true; do
for file in $(ls -1); do
ffmpeg -re -i “$file” -vcodec copy -bsf:v h264_mp4toannexb -acodec copy -f flv rtmp://localhost/mylive/x11
done
done

выполняем команду

sudo chmod +x ./streaming.sh

и запускаем наш скрипт

sudo ./streaming.sh

После этого получаем зацикленный аккуратный поток из файлов который можно вещать куда угодно из Flussonic.

С тем, что получилось на выходе можно ознакомиться здесь.

После этого из Flussonic можно забирать наш готовый поток в различных протоколах и размещать где душе угодно.

Преимущество в том, что можно докачивать файлы в папку с помощью Youtube-dl и скрипт будет подхватывать их на новом цикле, все ошибки будет пропускать и идти дальше.

В итоге получаем стрим с набором видео, которые крутятся на телефизоре пока вы готовите 😒, а главное, без рекламы.

Организуем SSH доступ и заодно получаем sftp доступ к нашему серверу.

P.S. Для того чтобы открыть картинку, открывайте ее правой кнопкой мыши в новой вкладке.