3 на 3 видеостена Raspberry Pi Zero

Raspberry Pi Zero видеостена

Видеостена Raspberry Pi Zero, предыстория

Давно хотел реализовать что-то подобное, и вот решил таки реализовать задуманное)

Пробовал что-то похожее реализовать на Orange Pi Zero, но как я понял, в данный момент у них нет аппаратной поддержки обработки видео, в отличие от Raspberry (как я понял),
поэтому такое решение с помощью Raspberry Pi или Orange Pi можно выполнить только с помощью Raspberry pi.
Решил заказать себе модель Raspberry Pi Zero (та, что идёт без вай-фай модуля и вообще без всего).
Устанавливаю стену 3 на 3 мониторов, работающих с помощью Raspberry Pi Zero (без wi-fi).

Как всё это работает

Обычно в данной конфигурации всё происходит следующим образом:

Девять мониторов подключены каждый к своей малинке, которая слушает с помощью программы pwomxplayer (или другой какой-нибудь) заданный UDP multicast-ный порт, одна же малинка выступает в роли сервера и проигрывает определённый файл и отправляет его как раз на заданный udp multicast-ный порт. Отдельная тема с этими мультикастными портами, если вкратце, то с их помощью можно передавать информацию сразу всем устройствам, которые слушают этот порт.

Это обычная ситуация, но всё меняется, когда вы хотите проигрывать не какой-то файл, записанный у вас на диске, а, например, трансляцию из интернета. С помощью программы streamlink получилось запустить, чтобы каждая малинка открывала стрим и выводила на экран свою часть изображения, но тогда получается, что все малинки скачивают трансляцию, вместо того, чтобы одна выступала сервером и транслировала изображение.

К тому пока дело не дошло до синхронизации, поэтому видео не всегда идёт одновременно на всех мониторах (ну это пока и при стриме с ютуба).

Пока настроил программу, которая позволяет с сервера переключать стримы, которые идут на экране,

Дополнительно собираюсь к серверу подключить инфракрасный датчик, чтобы с пульта можно было переключать трансляции)

Какие сложности у меня возникли во время установки:

1) заказывал всё раздельно, какая-то путаница у меня в аккаунте произошла с почтовыми индексами, поэтому некоторые посылки шли дольше, чем могли бы)
2) заказал партию так называемых юсб свистков, не ожидал того, что придут свистки usb 1.0, которые отказались принимать udp сигнал почему то.
Всё перепробовал, ну не смогли они), поэтому пришлось покупать уже в Москве (естественно, с разъёмом мини юсб не найти, поэтому с разъёмом юсб + переходник на мини юсб).
3) заказал партию переходник minihdmi – hdmi, выяснилось, что я оказывается заказал microhdmi (есть, оказывается, и такое) – hdmi, поэтому пришлось тоже докупать переходники minihdmi – microhdmi.
4) переходники, которые я купил minihdmi – microhdmi работали с заказанными мною проводами microhdmi – dvi очень плохо, контакты не доставали друг до друга, поэтому пришло купить новые провода уже hdmi – dvi, т.к. minihdmi либо нет в магазине, либо дорого) Ну и ко всему это соответственно ещё и переходники minihdmi – hdmi.

 

видеостена Raspberry Pi Zero
Блок питания для 25 usb устройств

Полезные ссылки:

Задать IP на Raspberry ещё до boot’а:
https://raspberrypi.stackexchange.com/questions/13464/how-can-i-edit-a-raspbian-sd-card-image-to-use-a-static-ip-address-within-window

видеостена Raspberry Pi Zero, подробная инструкция по настройке:
http://matthewepler.github.io/2016/01/05/piwall.html

Немного википедии о udp портах:
https://en.wikipedia.org/wiki/Multicast_address

Программные сложности:

Говорят, что ssh то ли включен у кого-то, то ли выключен, чтобы не заморачиваться и точно его включить, делаем следующее (чтобы можно было зайти на малинку через ssh):

Create an empty file with the name ‘SSH’ and put it on the BOOT partition.
(FYI: ‘SSH.TXT’ is also a valid name and it doesn’t necessarily have to be an empty file.)

Инструкция, как включить usb свисток, если он не заработал (usb ethernet):

Raspberry Pi Zero USB/Ethernet Gadget Tutorial

 

Видеостена Raspberry Pi Zero, настройка:

Заходим на наши малинки через ssh:

ssh xxx.xxx.xxx.xxx

1. Настройка статичного ip на raspberry pi zero:

sudo nano /etc/dhcpcd.conf

в нём (значения я указывал для примера):

interface eth0
static ip_adress=10.0.90.203/24
#static ip6_adress=XXXX
static routers=10.0.90.1
static domain_name_server=XXX

Сохраняем, потом:

sudo apt-get upgrade
sudo apt-get update

sudo apt-get install libegl1-mesa-dev

 

2. Установка pwomxplayer:

For each Pi (including the master), run this command to download PiWall:

wget http://dl.piwall.co.uk/pwlibs1_1.1_armhf.deb

The run this to install it:

sudo dpkg -i /home/pi/pwlibs1_1.1_armhf.deb

Next we need to download a media player for movie playback:

wget http://dl.piwall.co.uk/pwomxplayer_20130815_armhf.deb

Then run this command to install it:

sudo dpkg -i /home/pi/pwomxplayer_20130815_armhf.deb

3. Устанавливаем стримлинк (streamlink):

(https://gist.github.com/manueldev/bba698ad5d4bb5c45a9f8d6c94f502b5)

sudo apt install git python-setuptools
git clone https://github.com/streamlink/streamlink
cd streamlink/
sudo python setup.py install

4. Устанавливаем доп библиотеки:

pip install idna
pip install chardet

 

5. Создаём файлы .pitile (содержит информацию о клетке изображения, которую воспроизводить) и .piwall (содержит карту клеток изображения):

Убедимся, что мы в директории

cd /home/pi

Пример файла .pitile

[tile]
id=pi11

Пример файла .piwall (пример видеостена Raspberry Pi Zero из трёх мониторов):

[3bez]
width=357
height=62
x=0
y=0

# corresponding tile definitions
[pi11]
wall=3bez
width=112
height=62
x=0
y=0

[pi12]
wall=3bez
width=112
height=62
x=124
y=0

[pi13]
wall=3bez
width=112
height=62
x=246
y=0

 

 

Raspberry Pi Zero видеостена
Напечатанный корпус на 3д принтере для крепления Raspberry Pi Zero

 

6. Дополнительно можно изменить имена хостов малинок:

sudo nano /etc/hostname

In this file, you should just see one word ‘raspberrypi.’ Be brave and delete that and replace it with piXXX, with XXX being the last number in the slave’s IP address. For example, my 1st screen (all the way to the left) is slave #1 and has an IP address of 192.168.0.11, so its hostname is pi11.

Do the same in the hosts file:

sudo nano /etc/hosts

Ну и конечно

7. sudo reboot

Как я запускаю видеостену:

Для стримлинка на клиентах запускаю через ssh:

streamlink -p “pwomxplayer -A” –player-fifo https://youtube.com/watch?v=ACRhupCd3Jg best – онлайн стрим с пингвинами, для примера

Для того, чтобы запустить какое-то видео на сервере и начать его смотреть на стене:

 

На клиентах запускаю:

pwomxplayer -A udp://224.1.1.1:1234?buffer_size=1200000B

На сервере запускаю:

avconv -re -i movie.avi -vcodec copy -f avi -an udp://224.1.1.1:1234

Если уже идёт поток видео с сервера, то запустить клиентский pwomxplayer не получится, выдаст удачного дня)

 

Почему указан именно такой udp порт?

Udp портов достаточно, вот

https://en.wikipedia.org/wiki/Multicast_address

Please follow and like us:
0
3 на 3 видеостена Raspberry Pi Zero

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Перейти к верхней панели