Автор Тема: Простой способ поднять стрим-сервер на Linux?  (Прочитано 24381 раз)

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
> На 8554 работает, а на 554 нет. netstat показывает, что этот порт не занят другим приложением.

VLM под каким пользователем запускается изначально? Порты ниже 1024 использовать может только root.

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
> На 8554 работает, а на 554 нет. netstat показывает, что этот порт не занят другим приложением.

VLM под каким пользователем запускается изначально? Порты ниже 1024 использовать может только root.
Ясно. VLM ругается, когда его запускаешь из под рута, а потому он запущен из под обычного пользователя. Будем думать, что делать.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Интересно, nginx не сможет ли спроксировать и это?

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
Весь интернет конечно предлагает пропатчить VLC, чтобы просто скрыть ошибку, но я нашел более цивильное решение.
SUDO_UID=1000 vlc-wrapper ...
Теперь у меня есть два способа стриминга VOD.
1) ngnix, который открывается по ссылке rtmp://ip/vod/video.mp4
2) VLM, который открывается по ссылке rtsp://ip/video.mp4

VLM правда не очень удобный. Он может открывать только те видео, которые прописаны в конфиге. Пришлось написать скриптик для генерации этого конфига. С поддержкой русских букв в имени файла тоже были проблемы. Их удалось решить небольшим трюком с преобразованием имени файла в URL. Но все равно. Если изменяешь файлы в папке, то надо перезапускать сервис через sudo systemctl restart vlm, чтобы конфиг обновился и скушался VLM.
« Последнее редактирование: 23.09.2020 13:44:56 от Mr.Madguy »

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
Неспокойная у меня натура. Только я вроде полностью наладил работу через VLC, как сразу пришла идея все сделать через вэб-сервер и Chromium, что сильно разгрузит сервер, т.к. слайд шоу будет показываться на стороне клиента, а не рендерится на сервере в разрешении 1920x1090, что жрет 30..60% CPU, делая невозможным рендер сразу нескольких таких изображений. А видео будет показываться пре-рендереное, что не сильно жрет процессор.

Вроде все сделал, но есть пара организационных вопросов. Хочется все таки немного упростить себе жизнь и не возится с кучей скриптов для копирования данных туда-сюда. Почему может не работать конфиг ngnix такого вида?
location / {
  root /var/www/html;
}

location /Images/ {
  root /home/user/Изображения;
}

"http://ip/Index.html" открывается, а вот "http://ip/Images/Картинка.png" выдает 404. Работает только если выкинуть /Images/ из конфига и скопировать все в папку "/var/www/html/Images".

Дело в правах или русском языке в названии папки?
« Последнее редактирование: 29.09.2020 09:21:55 от Mr.Madguy »

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 159
1) По поводу русских имен. Что говорит nginx -t2) Проверьте права на файлы в /home/user/Изображения - файлы должны быть доступны по чтению для "остальных", как и сама папка (у вас же nginx работает не от пользователя user)
« Последнее редактирование: 29.09.2020 10:14:12 от Александр Ерещенко »

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
1) По поводу русских имен. Что говорит nginx -t2) Проверьте права на файлы в /home/user/Изображения - файлы должны быть доступны по чтению для "остальных", как и сама папка (у вас же nginx работает не от пользователя user)
Спасибо за ответ, но проблема оказалась в другом. Ни в одном приличном гайде по настройке nginx об этом не говорится. Причину откопал по логам, а решение проблемы потом нашел в интернете. Проблема была в том, что при использовании директивы root, /Images/ тоже добавляется к этому пути. Нужно было использовать alias.
« Последнее редактирование: 04.10.2020 15:33:17 от Mr.Madguy »

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 159
Спасибо за ответ, но проблема оказалась в другом. Ни в одном приличном гайде по настройке nginx об этом не говорится. Причину откопал по логам, а решение проблемы потом нашел в интернете. Проблема была в том, что при использовании директивы root, /Images/ тоже добавляется к этому пути. Нужно было использовать alias.
Вот тут в доке описано: https://nginx.org/ru/docs/http/ngx_http_core_module.html#root
И вот тут про alias и конце пример, в каком случае лучше всё-таки root: https://nginx.org/ru/docs/http/ngx_http_core_module.html#alias

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
Вот тут в доке описано: https://nginx.org/ru/docs/http/ngx_http_core_module.html#root
И вот тут про alias и конце пример, в каком случае лучше всё-таки root: https://nginx.org/ru/docs/http/ngx_http_core_module.html#alias
Ну понятно, что в более подробных мануалах все описано. Но я же просто гуглил что то по запросу "настройка nginx" и соответственно выдавалось каждый раз что то из серии вот этого. И чисто интуитивно казалось, что URL просто отображается на root, а не добавляется к нему.

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
А кто-нибудь может подсказать, почему может себя очень странно вести вот такая конструкция и как это можно починить? Мне нужно синхронизировать видео на сервере. И для этого я использую скрипт типа вот этого.
find <Папка> -type f -name '<Шаблон>' -print0 |
while read -rd '' file
do
    <Тут некая длительная операция>
done
Смысл в том, что периодически происходит вылет из этого цикла. Например выполнение этого действия только для одного файла в папке, в то время как их там много. Складывается ощущение, что наступает некий тайм-аут.

И если не трудно, подскажите, как в nginx правильно перенаправить папку "/Video/" в одну из вложенных в нее папок, например "/Video/1080p/"? Т.е. чтобы при обращении например к "/Video/720p/file.mp4" мы обращались в папку "/home/user/Видео/720p/file.mp4", но при обращении просто к "/Video/file.mp4" мы бы обращались к папке "/home/user/1080p/file.mp4".

Я пытался сделать что то вроде вот этого, но ничего не вышло:

location /Video/ {
  alias /home/user/Видео/1080p/;
}

location ~ /Video/+/* {
  alias /home/user/Видео/;
}
То же самое и для вложенных. Я еще не силен в регэкспах, так что может быть что то в них накосячил.

P.S. Хотя наверное так не получится. По крайней мере без переменной в регэкспе. "/Video/720p/" будет отображаться на "/home/user/Видео/", что не верно и поправить это никак нельзя. Единственный вариант - прописать все пути жестко, что не очень то хочется делать. Ну ладно. Как-нибудь переживем.
« Последнее редактирование: 13.10.2020 16:32:33 от Mr.Madguy »

Оффлайн Mr.Madguy

  • Давно тут
  • **
  • Сообщений: 249
Блин. Ну вот что не так? Вот это работает:
find <Папка> -type f -name '<Шаблон>' -print0 |
while read -rd '' file
do
    echo $file
done
А вот это нет:
files=()
find <Папка> -type f -name '<Шаблон>' -print0 |
while read -rd '' file
do
    files+=( $file )
done
for file in ${files[*]}
do
    echo $file
done
Я уже по всякому пробовал. И с кавычками и без.

UPD Проблема в том, что find запускается как отдельный процесс и files из него уже не возвращается. В итоге после нескольких часов страданий вроде бы проблема с таймаутом решена вот так:
temp=$(find <Папка> -type f -name '<Шаблон>' -print0 | tr '\0' '\n')
readarray -t files <<< $temp
for file in ${files[*]}
do
...
done

UPD2 А вообще зря старался. Имена файлов с пробелами все равно не работают. Так что можно было проще все это написать.
« Последнее редактирование: 14.10.2020 13:01:37 от Mr.Madguy »