Giter Site home page Giter Site logo

reinzor / videowall Goto Github PK

View Code? Open in Web Editor NEW
87.0 13.0 23.0 2.84 MB

Video wall with multiple tiles that enables synchronized video playback, mirrored or tiled.

Python 70.02% Shell 5.50% JavaScript 2.17% HTML 0.79% Vue 21.51%
raspberry-pi video videowall wall tile tiles stream

videowall's Introduction

Videowall

Build Status

2 monitor example

Video wall with multiple tiles that enables synchronized video playback, mirrored or tiled.

Demo videos

Description Video
6x RPI Zero - 720p - Big bug bunny
2x RPI Zero - 720p - Big bug bunny
2x RPI Zero - 720p - Simpsons
4x RPI Zero + laptop - 720p - Fantastic 4

Installation

Software

Raspberry PI

Installation prerequisites
  • Raspbian Stretch Lite
  • Raspberry Pi 3 / Raspberry Pi Zero (other Pi's not tested)
  • Videowall repository is your current working directory
Installation from source
  • Install Raspbian Stretch lite on an sd card of at least 4GB
  • Place an ssh document in the /boot partition to enable direct ssh access
  • Login to the raspberry pi and start the installation:
sudo apt-get -y update && \
sudo apt-get -y install git && \
git clone https://github.com/reinzor/videowall.git && cd videowall && \
./install_raspberry_pi_stretch_lite_autostart.bash

This installs the videowall software and enables a client service on startup.

Ubuntu x86

Installation / usage instruction video: https://youtu.be/XLXoX8bj2vA

Installation prerequisites
  • Ubuntu x86 16.04 LTS (other versions not tested)
  • Videowall repository is your current working directory
Installation
./install_ubuntu_x86.bash

Hardware

Raspberry PI

Components per client without cables

Cost ~15 USD per client

Quick start

Make sure you have sources the setup.bash from the root directory. This will set the Gstreamer plugin paths and appends the videowall library to your PYTHONPATH.

Server

scripts/web_server

Client

scripts/client

This is automatically started on a raspberry pi after installation. Can be manually started on an ubuntu x86 environment.

How to create release image

  • Create a git tag and update release notes
  • Ensure new MAC generation on startup
sudo rm -f /etc/network/mac
  • Create .img file on Ubuntu host computer (insert sd card):
sudo fdisk -l # Get the disk name of the sd card
sudo dd bs=4M if=/path/to/disk of=/path/to/image.img
sudo ./pishrink.sh /path/to/image.img /path/to/shrinked_image.img
  • Create a tar.gz from image file:
Right click, compress, tar.gz

References

videowall's People

Contributors

dependabot[bot] avatar reinzor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

videowall's Issues

Wiring and screen capabilities

I cannot tell from your documentation-- can you have the video span more than 2 screens? I noticed you had 4 screens running videos but only two screens were connected. Is it possible to have more than two screens playing the same video?

How did you connect the Pi Zero to the Raspberry Pi master? WiFi connection?

Super interested in this project. I am a student and just learning how to program and I thought this would be a good project to learn from!

Thanks so much!

Error while uploading file to webserver

While uploading a file (big_bug_bunny or whatever other file) there is an error:
Video should have an AVC (h264) encoding.
Another missing Gstreamer module perhaps?

Clients not shown in list

In the webserver only one of my clients is listed. Both clients are active in dhcp, logged in, and displaying the image that the server sends.

Namespace Gst not avaiable

Installation on RasberryPi and Ubuntu went fine.
When I start /scripts/client it needs more arguments, I tried client rpi eth0 but it complains "network is unreachable" while I can ping the server. Does the pi need an ip address to work?
When I start /scripts/web_server on Ubuntu it complains "Namespace GST not available".

Could you please give a description of the purpose of all the files in /scripts and /test, and also a working example setup for a working video wall? Especially an example to play a video on the server that is displayed by the client?

Also a description on how the system is supposed to work would be most welcome.
Thanks

1080p displays

I need to make a video wall using 3 x 1080p displays. However in your README you only talk about 720p. I was wondering if this program can make a 1080p resolution.

Problem with sound

I would like to add sound to the project. My choice was to implement it on the client side on Raspberry Pi. To test I constructed some gstreamer commands:
gstreamer audio channel. works,
gstreamer video channel. works,
gstreamer audio+video channel. works sort of. Video and audio plays but sound is intermittent. Also with the option sync=false after the sound channel.
Also when I play video+sound the movie takes 8 second longer to play. Probably that is the reason sound is intermittent.
Any ideas?

desktop

hi friend wanna know how to mirror the desktop to piwall? beautiful work.

Using WiFi instead of ethernet cables

Hi,

I would really appreciate if you can expand on the README file for setting up. I am a beginner in RPi but I have general knowledge about programming and couldn't exactly follow the setup.

Specifically, I am confused about the set up heading as "
Components per client without cables". Then it lists "Micro USB 2.0 naar Ethernet 10/100 RJ45 Network Lan Adapter Card", which presumably requires an Ethernet cable (per RPi zero) to a router/switch. If I use RPi 1/2/3/4 or RPi Zero W, could I use wifi connections instead of ethernet cables to do this?

Of course, that also made me think of how much data is being transmitted from the Master RPi and the Slave RPis. If I understand, the Master cut the video accordingly and send small pieces to Slave RPis. That feels like, the computational power is all put on Master RPi, and the Slave RPi simply need to stream this small pieces (e.g., 1/9 of 1080p video, if a 3x3 video wall is made) as they come in. How many/big videos were you able to play to how many screens? I'd appreciate your comments on these computational and connection requirements!

Thanks!

videoscale too slow on raspberry pi zero

https://github.com/reinzor/videowall/blob/master/src/videowall/player/player_client.py#L99

http://gstreamer-devel.966125.n4.nabble.com/Videoscale-too-slow-on-raspberry-pi-How-to-get-the-video-full-screen-td4689368.html

Find another way to upscale the video or make it full screen

I would like every client to crop play a specific region of interest of the master video. With use of the videocrop element, I am cropping the desired part. I am currently using the ximagesink attached to a Gtk.DrawingArea() in order to make it fullscreen. However, when I do not scale up the video to the desired resolution, I get black borders around my video instead of upscaling is. So I tried the videoscale element to upscale the video. However, this turns out to be too slow on the Raspberry pi. I have read online that it is not using hardware acceleration so this makes sense.

Is there a good alternative to obtain a full screen cropped video on a raspberry pi? Currently I am using the following pipeline:

filesrc location=file.mp4 ! qtdemux ! h264parse ! omxh264dec ! videocrop bottom={} left={} right={} top={} ! videoconvert ! queue ! videoscale add-borders=false ! video/x-raw,width=1280,height=720 ! ximagesink

And I attach the ximagesink to the GTK drawin area.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.