MJPG-Streamer, Rapbberry, CSI Camera. Стриминг как клиент

Тема в разделе "Raspberry Pi", создана пользователем Sanchez5890, 31 июл 2019.

  1. Sanchez5890

    Sanchez5890 Нерд

    Так я прочитал вот эту хорошую статью по настройке https://www.linuxbabe.com/desktop-l...to-redirect-your-traffic-through-proxy-server.
    То есть, моя интуиция подсказывает, что я должен буду указать белый ip в конфиге proxichanes? Говориться что proxichanes, работает только с tcp, ну посмотрим что получиться...
     
  2. Sanchez5890

    Sanchez5890 Нерд

    Думаю это как то скажется на задержке
     
  3. Igor68

    Igor68 Гуру

    Proxychains нужен только клиенту. Тот кто соединяется, для того и он.
     
  4. Sanchez5890

    Sanchez5890 Нерд

    Я немного запутался в принципе работы. Я вижу что это должно работать так:
    1. Запускаем наш плеер-сервер на Пк с белым ip
    2. Запускаем proxychains на малине и в конфиге пишем белый ip
    3. Запускаем сервер mjpg-streamer на малине
    4. Теперь proxychains передаёт видеопоток на наш плеер-сервер
    Я правильно понял?
     
  5. Igor68

    Igor68 Гуру

    Нет... ваша малина это клиент. Вы говорили про прокси, вот я и сказал. В вашем случае Вы уже сделали вилку. Если я так понял. А proxycains это как инструмент... ели вдруг надо.
     
  6. Sanchez5890

    Sanchez5890 Нерд

    Да но моя вилка плоха тем что теряет очень много данных в процессе передачи.
    Кстати, в mjpg-streamer, а именно в его плагинах упоминается встроенный прокси. Я буду пробовать запустить этот прокси. Вообщем тут есть очень много пищи для экспериментов и размышлений. Будут успехи - отпишусь.
     
  7. Sanchez5890

    Sanchez5890 Нерд

    Я вот что нашел очень интересное. Это возможно решит проблему. MJPG-Streamer умеет выводить видеопоток на zmq сервера. Я не знаю в курсе ли Вы про них, но я понял что это zmq - это библиотека с прокаченными сокетами. Связь напрямую, более быстрые и надежные сокеты - песня! Но вот проблема, эта же функция никак не запускается, чтобы я не делал. Igor68 поможете пожалуйста разгадать проблему?
    Запускаю output_zmqserver чтобы вызвать --help, а получаю что плагина такого нету, хотя папочка с ним есть.
    Код (Bash):
    ERROR: could not find output plugin output_zmqserver.so
           Perhaps you want to adjust the search path with:
           # export LD_LIBRARY_PATH=/path/to/plugin/folder
           dlopen: output_zmqserver.so: cannot open shared object file: No such file or directory
     
    Также пробовал прописать путь к папке - ничего:
    Код (Bash):
    export LD_LIBRARY_PATH=/usr/src/mjpg-streamer/mjpg-streamer-experimental/plugins/output_zmqserver
     
    Ставил пакеты про которые написано на гитхабе: libzmq3-dev, libprotobuf-c-dev libprotobuf-c1 libprotoc10 protobuf-c-compiler. Да и кстати, обычный libzmq-dev не поставился через apt-get, поставил libzmq3-dev как на офф сайте zmq...
     
  8. Igor68

    Igor68 Гуру

    Нет про них не в курсе. Про установку не скажу. Вы сами компилировали?
    Даже не скажу сообщения это видеопоток.
    Про ffmpeg наткнулся:
    https://habr.com/ru/post/78677/
    http://flance.onego.ru/2008/05/22/13
    https://zenway.ru/page/ffserver
    https://www.ylsoftware.com/news/554

    Исходя из требований для моей задачи:
    в мои задачи не входила проблема потока видео, а только кадры, каждый из которых можно анализировать в OpenCV в автоматическом режиме. Хотя как передача для тех же целей другим элементам кластера может и имеет смысл. В мою задачу так же входит и уменьшение нагрузки на обмен по сети не только картинки но и обмен данными и управления. Эксперимент сейчас остановлен на формировании рабочего стола через web-интерфейс дабы убехать от привязки к системе. После чего оптимизайия (возможно и другой метод) работы заготовки системы. По сути дела на MPI и/или OpenMP я и хотел ориентироваться. Там так же обмен сообщениями но для других целей - для распараллеливания процессов.
    Насколько понимаю в вашем случае медленный цикл опроса камеры и трудность с организацией связи. И питон Ван нужен будет только как обёртка, иначе ничего не поможет... Вы же хотите его как основную программу. Мне лично как обёртка по душе BASH, а того чего мне не хватает либо прикуручу из Гитнаба, либо ребята носом ткнут(коли добры) либо свое на Си наваяю. Но обёртка BASH.
     
  9. Sanchez5890

    Sanchez5890 Нерд

    @Igor68, интересная у вас задумка. Спасибо за статьи, но ffmpeg не в этот раз - для меня в отличии от Вашей идеи задержка играет ключевую роль. От питона может быть откажусь, если дела будут уж совсем идти плохо. Но у меня есть очень хорошая новость - плагин удалось починить, прости форум Амперки, но наши американские друзья быстро среагировали и посоветовали мне пересобрать mjpg-streamer с make distclean. И помогло! Вот ссылка на тему которую я открыл на гитхабе https://github.com/jacksonliam/mjpg-streamer/issues/216.
    Буду пробовать принимать видеопоток с zmq, но пока что на питоне, это просто единственный язык который я более-менее хорошо знаю. Если будут проблемы со скоростью - тут же на плюсы.
     
  10. Igor68

    Igor68 Гуру

    На гитхабе, как говорил много всего. От них я и socat и proxychains и многое другое собирал. Почему собирал, а потому, что другая железка и кроме GCC ничего нет.
     
  11. Sanchez5890

    Sanchez5890 Нерд

    Доброго времени суток! Вообщем как бы это не казалось странным, но мне удалось избежать использование прокси. Как уже ранее я говорил mjpg-streamer умеет работать с zmq. Код mjpg-streamer открыт. Ну я взял да и поменял там bind на connect, и тип сокета сменил. На локалке пашет отлично, но глобально tcp как tcp, задержка накапливается. Надо пробовать udp ставить, но zmq по умолчанию udp не включает. Igor68, можете пожалуйста, сказать, как поставить пакет именно из определённого репозитория? То есть ситуация такая.
    Есть пакет libzmq3-dev, который валяется по умолчанию в репо дебиан, но он не включает экспериментальные функции. На офф сайте zmq написано как поставить libzmq3-dev (http://zeromq.org/intro:get-the-software)
    Вот установка:
    Код (Bash):
    echo "deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/ ./" >> /etc/apt/sources.list
    wget https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/Release.key -O- | sudo apt-key add
    apt-get install libzmq3-dev
    Но мне нужна draft версия и новая raspbian (Buster на базе Debian 10), поэтому я пишу всё вот так:
    Код (Bash):
    sudo echo "deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-draft/Debian_10/ ./" >> sudo /etc/apt/sources.list
    sudo wget https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-draft/Debian_10/Release.key -O- | sudo apt-key add
    sudo apt-get install libzmq3-dev
    Всё запускаю, wget пишет ок, а когда компилирую, экспериментальные сокеты не найдены.
    Значит ставит из стандартного репо. Я полез /etc/apt/sources/list. Картина там интересная, только один стандартный репозиторий, новым и не пахнет. Я отключаю главный и добавляю тот из echo в конце пишу trusty contrib.
    Дальшe sudo apt-get update и ошибка.
    Подскажите пожалуйста как можно установить libzmq3-dev именно из того репозитория?
     
  12. Igor68

    Igor68 Гуру

    Со своей стороны, конкретно исходя из обращения именно ко мне, не имею возможности оказать содействие именно по libzmq3
     
  13. Sanchez5890

    Sanchez5890 Нерд

    Ну тогда ничего страшного, я пробовал ещё. На малину draft версия не пойдёт, нет поддержки armhf. Я ставил вручную через dpkg...
     
  14. Sanchez5890

    Sanchez5890 Нерд

    Вот Вы говорили про вебсокет, попробую его внедрить в плагин mjpg-streamer
     
    Igor68 нравится это.
  15. Sanchez5890

    Sanchez5890 Нерд

    Вот у меня интересный вопрос, а будет ли связь у сокетов, один из которых на си, а другой на питоне? На си из библиотеки sys/socket.h, а питон модуль socket? Я переделываю mjpg-streamer под клиента на дейтаграммных сокетах на udp протоколе. ZMQ только куражился, udp не запустил :(
     
  16. Sanchez5890

    Sanchez5890 Нерд

    Websockets это TCP, не подходит. Буду пробовать классику...