radist2s
@radist2s
Back-end и front-end разработчик

VLC + Nginx

Хочу в качестве сервера для раздачи потока с vlc использовать Nginx.
На сервер вещания с локальной машины видео-поток передаю через туннель ssh.
Конфиг Nginx такой:
server {
        listen   8083;

        location = /stream.flv {
            proxy_pass         http://localhost:8082/;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
}


Суть вопроса: можно ли как-то сделать, чтобы nginx каждый раз не дергал поток по ssh от vlc?

Для тестов запустил «ab» для проверки:
ab -n 100 -c 100 -g test_data_1.txt -t 60 http://streaming-server:8083/stream.flv

Судя по логам «nethogs» трафик увеличивается не 1:1, а почему-то 1:2(то есть если nginx отдает 3мбит, то трафик по ssh 1.5мбит), также plink.exe(через нее поднят туннель) при новом подключении к веб-серверу рапортует:
Received remote port 8082 open request from 127.0.0.1:54887
Attempting to forward remote port to 127.0.0.1:8082
Forwarded port opened successfully


Решение:
Ничего лучше и проще обычного рестиминга через vlc найти не удалось. Чтобы избавиться от проблем с совместимостью скачал для Windows версию 2.0.5 x32, для Ubuntu установил дневной билд из ppa.
Сама команда ретрансляции очень простая:
cvlc http://localhost:8082/ --sout '#http{mux=flv,dst=:8083/}'

Соответственно видео отдавать по этому адресу: server_public_name:8083/
  • Вопрос задан
  • 50018 просмотров
Пригласить эксперта
Ответы на вопрос 8
KEKSOV
@KEKSOV
Не совсем понятен вопрос — а что должен делать nginx при обращении к проксируемому адресу?
Если речь идет о keepalive, то можно попробовать добавить proxy_connect_timeout 600;

Еще мелкий хинт по поводу туннеля. К сожалению в plink этой опции нет, а вот в ssh есть возможность выбора алгоритма потокового шифрования. Самый быстрый -с arcfour.

ssh можно найти в составе Cygwin
Ответ написан
KEKSOV
@KEKSOV
Да proxy_connect_timeout тут совсем не причем.

Я все-таки уточню картину:
1. Есть «секретный» сервер с VLC, который раздает видеопоток. Видимо, это стрим с видеокамеры наблюдения.
2. Есть nginx сервер, на который могут прийти несколько человек одновременно и каждому нужно раздать текущий видеопоток с камеры.
3. При этом хочется, чтобы nginx не обращался для каждого нового посетителя к VLC, а сам «размножал» на всех зрителей, то что он получает от видео-сервера.

Если дело обстоит так, как я описал, то надо либо что-то пробовать с кешированием nginx делать (я, правда, слабо себе представляю, как nginx, будет кешировать видеопоток), либо посмотреть в сторону вот этого модуля. Вот ссылка на инструкцию по установке.

И еще у Адоба есть интересный бесплатный продукт Flash Media Live Encoder, но это совсем другая история.
Ответ написан
Serafim
@Serafim
По моему на лицо типичная XY-проблема. Предположу, что изначальная задача, это ретрансляция видео потока, так же предположу, что конечным потребителем является клиент с flash-плеером (или html5). Если мои два предположения верны, то вам нужен flussonic (erlyvideo.ru).
Ответ написан
Комментировать
KEKSOV
@KEKSOV
VLC умеет передавать видео с камеры через RTMP
$ vlc v4l2:// --v4l2-fps=25 --sout '#transcode{vcodec=h264,vb=300,fps=25,scale=1,acodec=mp4a,ab=64,channels=2}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://rtmp.server.com:1935/path/to/stream}'
Нашел тут
Ответ написан
KEKSOV
@KEKSOV
Вот, похоже, что эта конфигурация решает эту задачку. Там, конечно, без стакана, не разберешься…

Кстати, если речь идет о браузерах, то вот этот плеер умеет играть rtmp потоки (информация в самом низу страницы). Я его давно знаю, но не сразу о нем вспомнил…
Ответ написан
KEKSOV
@KEKSOV
Пардон, не заметил камента про flowplayer…
Ответ написан
Комментировать
danielnewman
@danielnewman
Front-end
наверно я не понимаю, но может быть это эхо увеличивает 1 к 2?
Ответ написан
@mgk
или wowza media server
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы