Nas-server для мультимедиа под ключ

| Сен 5, 2017 | Нет комментариев

Рассчитано на пользователей, знакомых с проектом XPEnology!

Этот мануал является руководством по сборке и настройке NAS-сервера аналогично DS916+ (по праву считающимся пользователями мультимедиа-комбайном) на базе комплектующих, немного превосходящих в своей производительности оригинальные, но стоящих гораздо меньших денег. В частности, вместо CPU Pentium N3710 мы используем Celeron J3455.

 

    4x SATA 6G — max. 550MB/s pro Port
   1x M.2 für W-LAN
    AESNi — Ускорение шифрования и дешифрования
   Vtx, Vtx EPT, VTd — Возможности виртуализации
   2x USB 3.0 + 1x Front-USB 3.0
    2x USB 2.0 + 2x Front-USB 2.0
   1x Gigabit LAN (Realtek RTL8111GR, Wake-On-Lan, Wake-On-Wan, 802.3az EEE, PXE)
   1x HDMI 2.0, 1x DVI + 1x VGA Display
 1x PCIe 2.0 x1

Список комплектующих:

  • Материнская плата: ASRock J3455-ITX
  • ОЗУ: Kingston ValueRAM SO-DIMM 4GB, DDR3L-1600, CL11-11-11 (KVR16LS11/4)
  • Блок питания: Be quiet! System Power 8 400W ATX 2.4 (BN240)
  • Корпус: Fractal Design Core 500 schwarz, Mini-ITX (FD-CA-CORE-500-BK)

Установка операционной системы будет происходить в два этапа:

  1. Запись на USB-флешку отредактированного образа загрузчика.
  2. Старт сервера с USB-флешки, установка и настройка ОС Synology DSM 6.1.x.

Необходимый инструментарий:

Перед записью образа загрузчика на флешку его следует немного подправить с помощью OSFMount в Notepad++

Находим файл grub.cfg и правим его с помощью Notepad++

set extra_initrd="extra.lzma"
set info="info.txt"

set vid=0x090C to vid=0x[your usb drive vid]
set pid=0x1000 to pid=0x[your usb drive pid]
set sn=C7LWN09761 to sn=generate your sn here with DS model
set mac1=0011322CA785 to mac1=[your NIC MAC address]. You can also add set mac2=[your NIC MAC address #2] and so on until mac4 if you have multiple NICs. However, this is not necessary. 
set mac2=xxxxxxxxxxxx
set rootdev=/dev/md0
set netif_num=2
set extra_args_916=''

set common_args_916='syno_hdd_powerup_seq=1 HddHotplug=0 syno_hw_version=DS916+ vender_format_version=2 console=ttyS0,115200n8 withefi elevator=elevator quiet syno_hdd_detect=0 syno_port_thaw=1'

#for testing on VM
set sata_args='SataPortMap=2'

set default='0'
set timeout='4' #timeout='1' to set timeout='4' - This will allow you more time to make a selection in the Grub Boot Menu when it appears
set fallback='1'

Есть ещё один способ установки, при котором образ загрузчика править вовсе не нужно!
Его суть:

  1. Во время загрузки при появлении меню необходимо в течение 1 секунды клавишу «C» (в латиннице).
  2. Для изменения VID введите следующее: vid 0xхххх, где хххх — это 4 цифры VID вашей флешки.
  3. То же самое для PID, SN и MAC1. После каждой команды необходимо нажать «Enter».
  4. Если при вводе цифр была допущена ошибка, просто повторно введите команду с верным значением. После окончания нажмите «Esc».

Ниже приведен пример как это выглядит в среде командной строки Grub:

Подробнее и источник  можете найти здесь

Все образы для загрузчика собраны также здесь

Если с правкой образа загрузчика всё прошло правильно то в итоге после того как задали в консоли команду

cat /usr/syno/etc/codec/activation.conf

должно получится следующее:

а в настройках приложения Video Station должна появится птичка для активации аппаратного ускорения при преобразовании кода

При проигрывании видео будет задействован gst-launch-1.0 (GStreamer) и ffmpeg

Если у вас есть учётка   то вы можете использовать бету версию плекса которую можно найти здесь

актуальная версия PlexMediaServer-1.8.1.4140-82ea538ca-x86_64.spk

отдельно фикс здесь

который заключается в следующем:

#добавляем группу
root@DIMI-NAS:~# synogroup --get video
Group Name:
Group Type: [AUTH_LOCAL]
Group ID: [65536]
Group Members:
0:[plex]

#потом в /etc/group правим ид на  65537

#правим файл /lib/udev/rules.d/60-fix-plex-hw-transcoding.rules

#вместо `SUBSYSTEM=="dvb", GROUP="video"

#делаем

SUBSYSTEM=="drm", GROUP="video", MODE="0660"

#и перегружаем полностью нас

 

 

После чего в настройках плекса также появится «птичка» — в этом случае с плексом уже отвечает интеловский модуль i965_dri_video.so

Отдельная тема — это возможность просмотра IPTV.

Для этого у меня в репо докера есть уже несколько готовых контейнеров с уже установленными компонентами требуемыми для просмотра контента как по технологии acestream так и по noxbit

расмотрим на примере эту сборку на базе ubuntu:17.10 в которой присутствуют элементы небольшой автоматизации реализованнной с помощью простых скриптов по вытягиванию из сети контента для создания плей листов .m3u и которые в свою очередь будут доступны для скачивания с нашего мини сервера для любых клиентов как домашней локальной так и внешней сети.

Создание контейнера:

  1. На вкладке «Реестр« введите ключевое слово «sybdata»
  2. В результатах поиска выберите нужный контейнер(sybdata/ace3.1-as). Нажмите расположенную выше кнопку «Загрузить« или просто дважды щелкните его, чтобы начать загрузку. Или выполнить команду в консоли:
    docker pull sybdata/ace3.1-as

     

  3. Перейдите на вкладку Изображение и вы увидите там свой файл изображения.
  4. Контейнер можно создать с помощью мастера, вводя данные вручную, или посредством команды Docker Run. Мы создадим контейнер с помощью мастера.
  5. Пробросить следующие порты: 8621 62062 9944 9903 6878 8000
  6. Активируйте веб сервер если ещё не сделали это раньше и создайте такую папку, например: /web/tv/m3u
  7. Смонтировать следующие папки:
  8. Стартуем контейнер

Работа скрипт генерации плейлистов

Скрипт качает json плейлист с ресурса в сети, парсит его, и генерит стандартный m3u плейлист и m3u плейлист в формате Kodi, для любителей PVR, в папку m3u.
Вам надо только заменить ip адрес в переменной url_prefix на ip вашего сервера, скрипт можно посмотреть здесь: ace.hls_parser.sh

Для редактирования скрипта зайдём в контейтер:

root@nas916:~# docker exec -it as31 /bin/bash
root@as31:/#

 

путь для редактирования:

root@as31:/# nano /mnt/media/playlists/ace.hls_parser.sh

там же в контейнере осталось прописать и запустить в кроне:

crontab -e

Добавьте строчки и сохраните, будет обновляться раз в 2 часа:

0 */6 * * * /mnt/media/playlists/ace.hls_parser.sh > /dev/null 2>&1
@reboot sleep 20 && /mnt/media/playlists/ace_parser.sh > /dev/null 2>&1

Добавте туда же очистку кеша:

0 */1 * * * rm -r /tmp/.ACEStream/.acestream_cache/* > /dev/null 2>&1

Перезапустите крон:

service cron restart

Перезапускаем контейнер

Если всё корректно сделали то плейлисты будут доступны по такому адресу: http//ip nas/tv/m3u/as.m3u

Этот же плейлист можно запустить в трансляцию с помощью плекса и для этого понадобится соответствующий плагин

который можно скачать здесь

распаковать и бросить по этой директории:

/volume1/Plex/Library/Application Support/Plex Media Server/Plug-ins/IPTV.bundle

немного подправил образ контейнера

перекачать образ

реализована сотировка каналов через AceProxy, подписка ттв не требуется

трансляция hls от движка и дальше в прокси через vlc(установлен v3)

13.09 19:45:08 DEBUG Thread-12 aceclient.py:126 AceClient_write| START PID 1075c67d895c36aa9d558b1a9d00428462c44da0 0 output_format=hls transcode_audio=0 transcode_mp3=0 transcode_ac3=0
13.09 19:45:08 DEBUG Thread-12 acehttp.py:314 handleRequest| Got url http://127.0.0.1:6878/ace/m/12823fbbe43dd6868427b95ab38d1dd79ef253c1/3e712c2d00aa1ac596cf817b81c8bff9.m3u8
13.09 19:45:08 DEBUG Thread-12 aceclient.py:126 AceClient_write| EVENT pause
13.09 19:45:08 DEBUG Thread-12 aceclient.py:126 AceClient_write| EVENT play
13.09 19:45:08 DEBUG DummyThread-2 vlcclient.py:217 VlcClient_recvData| Broadcast started
13.09 19:45:08 DEBUG Thread-12 vlcclient.py:147 VlcClient_startBroadcast| Broadcast started
13.09 19:45:08 DEBUG DummyThread-13 aceclient.py:422 AceClient_recvdata| STATUS changed to main:idle
13.09 19:45:09 DEBUG Thread-12 acehttp.py:335 handleRequest| hangDetector spawned
13.09 19:45:09 DEBUG Thread-12 acehttp.py:342 handleRequest| VLC url http://127.0.0.1:8081/1075c67d895c36aa9d558b1a9d00428462c44da0
13.09 19:45:09 DEBUG Thread-12 acehttp.py:63 HTTP| "GET /torrenttv/channel/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%20HD.mp4 HTTP/1.1" 200 -

 

Тонкая настройка после запуска контейнера

Если уже заметили то образ на этот раз получился тяжелый по весу, в сжатом виде в репо 552 MB а когда скачается на машину то и вовсе 1 Gb, например у меня на nas-сервере 916.

Сделано это было умышленно, и здесь сразу поясню что расчитано это на не слабые машины, конкретно тестируется сейчас как уже выше писал на ds916+ (ASRock N3150DC-ITX память:8GB).

Вообщем тем самым решил оставить пользователям право выбора в каком варианте точнее в какой связке(движок+скрипт, движок+прокси и т.д.) использовать. Oтдельно по vlc, в одно время я полностью отказался от его использования в AceProxy по рекомендациям самого же автора прокси, и это было в полне оправдано так как прокси сама умеет вещать поток и при этом даже как старт каналов так и переключение на пару секунд быстрее(видно по логам), но есть маленький нюанс с появлением в движке потока в hls, в прокси по умолчанию это только при включеном vlc, и добавлю ещё что только при включеном vlc возможен просмотр архивов и для некоторых это важно

Can’t stream HLS in non VLC mode: http://127.0.0.1:6878/hls/r/33d114e51d559e27e837533c05549eb98b9a9407

 

Start video method

'''

if self._engine_version_code >= 3010500 and AceConfig.vlcuse:

   stream_type = 'output_format=hls' + ' transcode_audio=' + str(AceConfig.transcode_audio) \

                                     + ' transcode_mp3=' + str(AceConfig.transcode_mp3) \

                                     + ' transcode_ac3=' + str(AceConfig.transcode_ac3)

else:

   stream_type = 'output_format=http'

 

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

Расмотрим варианты просмотра тв контента доступные конкректно в этой сборке:

  1. Получение потока напрямую от движка: http:
    http://127.0.0.1:6878/ace/getstream?id=

    hls:

    http://127.0.0.1:6878/ace/manifest.m3u8?id=

    плейлисть парсится скриптом ace_parser.sh или ace.hls_parser.sh

  2.  Получение http потока от связки движок+AceProxy, неплохой вообщем то вариант плюс широкий функционал прокси по созданию и сортировке плейлистов(здесь пример плагина playlist.py), поддержка плагина p2pproxy.py(нужна учётка ттв) а это значит поддердка офф приложений ттв как для телефона так и для смарт тв, чтобы включить этот способ необходимо в файле aceproxy/plugins/config/torrenttv.py добавить:
    # Insert your Torrent-tv.ru playlist URL here
    url = 'http://super-pomoyka.us.to/trash/ttv-list/ttv.all.player.m3u'
    
    # TV Guide URL
    tvgurl = 'http://api.torrent-tv.ru/ttv.xmltv.xml.gz'
    
    # Shift the TV Guide time to the specified number of hours
    tvgshift = 0
    
    # Download playlist every N minutes to prevent
    # torrent-tv tracker forgetting us.
    #
    # 0 = disabled
    updateevery = 360

     

  3. Получение hls потока от связки движок+AceProxy+vlc, тоже самое по функционалу что и в п.2 за исключением что поток идёт через vlc что естественно отгрызает немного ресурса, чтобы включить этот способ необходимо в файле aceproxy/aceconfig.py изменить на :
    vlcuse = True

    только с этим способом возможен просмотр архивов, так как с недавнего времени они транслируются исключительно в формате hls

  4. Получение hls и http потока на выбор от встроенной прокси движка через веб интерфейс, этот вариант я специально поставил на 4 место так как он по вине того же веб интерфейса иногда ведёт себя неадекватно, короче тормозит не по теме, но что меня лично привлекает так это просмотр контента по магнет ссылкам или торрент файлам

чтобы включить этот способ необходимо в браузере набрать первый раз:

http://host:6878/webui/app/69696969/server

После первоначальной настройки сводящейся в задании пароля, веб-интерфейс будет уже доступен по этой ссылке:

http://host:6878/server

 

Далее всё про кеш, куда его кидать и как его чистить(иначе память отъдает не хило!) с помощью крона, про логи и где их смотреть…

0 Комментариев

Добавить комментарий