Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите грамотно перенаправить видео через netcat 
V
    Опции темы
quiz
Дата 13.1.2014, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Всех приветствую!
С линуксом знаком только поверхностно, поэтому заранее прошу прощения за возможно неверную терминологию.

Имеется автономно установленный мини-ПК raspberry pi с модулем камеры и WiFi-адаптером, который настроен на работу в составе Ad-hoc сети.
Необходимо иметь возможность в любой момент времени подключиться к нему с одного единственного компьютера и посмотреть видео-поток.

Для работы с камерой к мини-ПК прилагается утилита raspivid, которая работает без проблем и умеет перенаправлять видео-поток на stdout. Этот поток так же без проблем транслируется на конкретный IP командой вроде:
Код
raspivid -t 9999 -o - | nc 192.168.1.10 5555


Однако на приемной стороне должен быть запущен NetCat (или любой другой сервер) в режиме ожидания входящих соединений, в противном случае эта связка просто завершает работу. Было бы идеально, чтобы этот поток постоянно транслировался "в никуда", пока в сети нет принимающей стороны. Однако таких вариантов в параметрах netcat я не нашел. Может быть это можно реализовать другой утилитой?

Второй вариант - запустить сервер netcat на передающей стороне и подключаться при необходимости. Запуск реализуется следующим образом:
Код
raspivid -t 9999 -o - | nc -vv -l -k -p 5555


Такой вариант тоже работает, но только если запустить сервер и сразу же к нему подключиться, забирая данные. Если сервер стоит без коннекта извне, то через 10 секунд программа захвата подвисает. Видимо видео-поток, который никто не забирает, как-то забивает "stdout".

Подскажите, как грамотнее выйти из данной ситуации. Можно конечно запускать передачу видео какой-то командой со стороны клиента после соединения, но как-то это криво что-ли.  smile 

Это сообщение отредактировал(а) quiz - 13.1.2014, 22:08
PM MAIL   Вверх
tzirechnoy
Дата 14.1.2014, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Ну, впишы команду raspivid в inetd.con/xinetd.conf.d (что-то там должно быть вместо inetd в этом raspberry linux).

Но вообще, подводных камней с разделением/рестартом там хватит -- а для видеостриминга есть спецыально написанные серверы -- icecast, vlc, erlyvideo (этот великоват для embedded, я подозреваю), mjpg-streamer, motion, ffmpeg -- можэт, на них посмотреть? 
PM MAIL   Вверх
shgurbanov
Дата 14.1.2014, 22:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как упомнул коллега, vlc идеальный вариант.

Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
quiz
Дата 15.1.2014, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Спасибо, что не оставили мою проблему без внимания.

Вариант с vlc я попробовал в первую очередь, и результат оказался неудовлетворительным. FullHD видео на приемной стороне принимается с задержкой в 2-3 секунды и больше, а через пару десятков секунд начинаются дергания и совсем дикие задержки (возможно недостаточно производительности раздающего мини-ПК). И это при подключении к другому компьютеру напрямую по сетевому кабелю.

При раздаче через netcat, после подбора грамотных настроек потока на приемной и передающей сторонах, 1080p видео принимается практически в реал-тайме. И загрузка ЦП Raspberry минимальна, что-то в районе 8-10%.

Это сообщение отредактировал(а) quiz - 15.1.2014, 12:03
PM MAIL   Вверх
quiz
Дата 17.1.2014, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



Засунул на передающей стороне запуск стриминга через netcat в бесконечный цикл и все казалось бы хорошо, цикл "долбит" команду, netcat не находит приемную сторону, выходит и все начинается по-новой. В нужный момент приемный компьютер соединяется, запускает у себя сервер и начинается вещание. Приемный компьютер выключает сервер, передатчик начинает снова долбить цикл в ожидании принимающей стороны.
Однако уже ранее замеченная проблема возникает при неустойчивом коннекте. NetCat шлет данные на ip адрес, который вроде как есть, а данные не доходят. И через несколько секунд вся эта задумка подвисает, видимо опять из-за большой кучи данных, накопившихся в stdout. Причем именно подвисает, а не просто завершает выполнение, дабы вернуться к циклу.

Может все-таки есть какие-то способы контролировать эти накапливающиеся при плохой связи данные? Может быть есть какая-то утилита типа netcat, но более гибкая?
PM MAIL   Вверх
tzirechnoy
Дата 17.1.2014, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Цитата
Засунул на передающей стороне запуск стриминга через netcat в бесконечный цикл


То есть прочесть первую строку моего ответа у Вас не получилось.

Цитата
Может все-таки есть какие-то способы контролировать эти накапливающиеся при плохой связи данные? Может быть есть какая-то утилита типа netcat, но более гибкая? 



Конечно, есть. icecast, vlc, erlyvideo (этот великоват для embedded, я подозреваю), mjpg-streamer, motion, ffmpeg, и пр.
PM MAIL   Вверх
quiz
Дата 20.1.2014, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 15.8.2005

Репутация: нет
Всего: нет



С этими видео-серверами ничего толкового не вышло. Оно и логично, железо слишком слабое, да и не нужны они вовсе для раздачи с одного компьютера на другой.
Решил проблему через socat
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1688 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.