Difference between revisions of "Projector client"

From Fixme.ch
Jump to: navigation, search
(Usage: updated)
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:Ongoing_Projects]]
+
[[Category:Closed_Projects]]
The idea is to up an interface/client for the projector, in order to play & display video/audio over the network remotely. This will allow for less shuffling and more compatibility with a wider range of devices, for which we may not have all the cables. It also allows for mobile devices, such as phones and tablets, to share media to the projector directly.
+
The projector client allows users to share their content without requiring them to connect physically to the projector or sound system. This facilitates sharing of media such as music, videos, and photos; as well as sharing your desktop during workshops and presentations. The idea is that everyone can easily share just about anything, with ease, from just about any device.
 +
 
 +
<sub>[https://pad.fixme.ch/p/projector-client Todo list] for improvements and fixes</sub>
  
 
__TOC__
 
__TOC__
  
 
== Usage==
 
== Usage==
SSH Acces: <code>ssh -p 47382 pi@62.220.135.197</code>
+
* SSH Acces:  
{| border="1" cellspacing="0" cellpadding="2" stye="text-align:center;"
+
ssh -p 47382 pi@projector.fixme.ch
 +
 
 +
=== Linux ===
 +
{| border="1" cellspacing="0" cellpadding="2" stye="text-align:center;" width="100%"
 
|-
 
|-
! Name
+
! width="25%" | Name
! Implemented
+
! width="8%" | Functionality
! Usage
+
! width="67%" | Usage
 
|-
 
|-
 
| '''Reverse VNC'''
 
| '''Reverse VNC'''
For linux
+
Send display to projector
| Yes
+
| align="center" style="background:#90EE90;" | Good
| DISPLAY=:0 vncviewer -listen 0 -fullscreen -x11cursor #on pi
+
| x11vnc -connect projector.fixme.ch:5500 -noxdamage
x11vnc -connect 62.220.135.197:5500 -noxdamage #on laptop
+
 
|-
 
|-
| '''VNC'''
+
| '''PulseAudio'''
For Mac/Android/iOS/Win
+
Send audio to HiFi
| Yes
+
| align="center" style="background:#90EE90;" | Good
| vncviewer on pi, any vnc server
+
| Select ''pulse@projector'' from Sound settings
 +
Issues with buffer - sound may be choppy sometimes
 +
|}
 +
 
 +
 
 +
=== Mac ===
 +
{| border="1" cellspacing="0" cellpadding="2" stye="text-align:center;" width="100%"
 
|-
 
|-
| '''AirPlay'''
+
! width="25%" | Name
Mac & iOS
+
! width="8%" | Functionality
| Yes!
+
! width="67%" | Usage
| Select 'Projector' in AirPlay. Audio/Video streams and Mirroring(!)
+
Use https://github.com/elcuervo/airplay on Linux
+
 
|-
 
|-
| '''PiCast'''
+
| '''AirPlay Audio'''
Any
+
Audio streaming from OS X/iOS system sound or iTunes
| Sortof
+
| align="center" style="background:#90EE90;" | Good
| http://62.220.135.197/PiCAST/goCAST.php?website=example.com
+
| Select 'Audio' in AirPlay
 
|-
 
|-
| '''Synergy'''
+
| '''AirPlay Video/Screen mirroring'''
Linux/Mac/Win
+
Video streams and screen mirroring
| Sortof
+
| align="center" style="background:#FFFFE0;" | Sometimes
| Mouse and keyboard control
+
| Select 'Video' in AirPlay
Doesn't work at the moment
+
Only works when network is uncrowded, does not transmit audio. Development abandoned.
 
|-
 
|-
|'''MultiCast'''
+
| '''VNC'''
Android devices
+
Connect from projector to your mac
| No
+
| align="center" style="background:#90EE90;" | Good
| Android screen mirroring
+
| vncviewer -FullScreen -ViewOnly ''your IP'' #on pi
 +
Enable Scree Sharing in System Settings > Sharing #on Mac
 +
|}
 +
 
 +
 
 +
=== Windows ===
 +
{| border="1" cellspacing="0" cellpadding="2" stye="text-align:center;" width="100%"
 
|-
 
|-
| '''DLNA'''
+
! width="25%" | Name
| No
+
! width="8%" | Functionality
| Send via DLNA (AllShare Cast on Samsungs)
+
! width="67%" | Usage
 
|-
 
|-
| '''LimeLight'''
+
| '''VNC'''
| No
+
Connect from projector to your PC
| Send from nVidia GTX 700 and 800 series cards
+
| align="center" style="background:#90EE90;" | Good
 +
| vncviewer -FullScreen -ViewOnly ''your IP'' #on pi
 +
TightVNC
 
|}
 
|}
  
The parts still need to be automated, a web control interface is desirable. Currently the clients need to be launched manually, although this can be done via ssh - scripts are available. More clients can be added as needed, and a further control interface for the projector and stereo system will need to be put in place.
+
 
 +
=== Android ===
 +
{| border="1" cellspacing="0" cellpadding="2" stye="text-align:center;" width="100%"
 +
|-
 +
! width="25%" | Name
 +
! width="8%" | Functionality
 +
! width="67%" | Usage
 +
|-
 +
| '''DLNA/UPnP'''
 +
Send photos/videos/pictures to projector
 +
| align="center" style="background:#90EE90;" | Good
 +
| Select 'Projector' from DLNA/UPnP devices
 +
Works with Samsung Video/Music/Photo default app, [https://play.google.com/store/apps/details?id=com.bubblesoft.android.bubbleupnp Bubble UPnP], [https://play.google.com/store/apps/details?id=com.skifta.android.app Skifta], other DLNA/UPnP compatible apps
 +
|-
 +
| '''Chromecast'''
 +
Send audio to HiFi
 +
| align="center" style="background:#BFBFBF;" | Unsupported
 +
| Select 'Projector' from Chromecast menu
 +
No longer supported by open source software due to Google enforcing strong encryption and verification
 +
|}
 +
Other Apps in testing: [https://shou.tv/ Shou] (root Airplay/DLNA mirroring - works well apart from small lag), BubbleUPNP Audiocast (root xposed sound mirroring over DLNA, 20 minute trial limit), AirAudio (root, airplay/dlna, 5 minute trial limit). All 3 work well, the later two require licences which is annoying. Untested: AllStream, AllCast (untested due to absurd license limits), feel free to suggest others
  
 
== Goal ==
 
== Goal ==
Line 71: Line 107:
 
*** e.g 1205 for HTTP x264 streams
 
*** e.g 1205 for HTTP x264 streams
 
* Link with trigger interface?
 
* Link with trigger interface?
 
== Obstacles ==
 
* There aren't any solid similar solutions for remote screen sharing, we have to hack something together
 
 
* Will the Raspberry Pi's power be sufficient?
 
  
 
== Component ==
 
== Component ==
=== Screen sharing ===
+
=== Implemented ===
 
+
===== HTTP x264/h264 =====
+
 
+
Advantage of HTTP x264 sharing is reduced lag (RPi limited to 100mbit ethernet)
+
VLC screen sharing (screen://) on sender + omxplayer on Pi (for hardware acceleration) (reeealy sketchy atm, can't get to work)
+
 
===== VNC =====
 
===== VNC =====
 +
xtightvncviewer in reverse VNC listening mode on Pi
 +
DISPLAY=:0 vncviewer -listen 0 -fullscreen -x11cursor #on pi (scripted already)
  
xtightvncviewer on Pi
+
x11vnc or your favourite server on your laptop, Veency on iOS, DroidVNC or others on Android
  
x11vnc or your favorite server on your laptop
+
Works well, however the frame rate is too low for videos, and the resolution can be a bit finicky. If your laptop isn't set to 720x480 or 640x480, the screen will move around with your mouse.
  
Veency on iOS
+
==== AirPlay & Chromecast ====
 +
[http://www.vmlite.com/index.php?option=com_kunena&func=view&catid=23&id=10991 rPlay] is used for AirPlay and Chromecast. Sending music over airplay works fine most of the time, mirroring works intermittently - seems to depend on the number of devices on the network. Chromecast works sometimes, it seems that Youtube works best right now. Streaming side-loaded google music or any DHCP content does not work.
  
DroidVNC on Android
+
'''Chromecast using rPlay does not function very well, do not hesitate to suggest alternative servers.'''
  
=== AirPlay ===
+
==== DLNA/UPnP ====
perl-net-sdp + shairport on Pi --> http://www.raywenderlich.com/44918/raspberry-pi-airplay-tutorial works now
+
[https://github.com/hzeller/gmrender-resurrect Gmrender] is used for DLNA/UPnP. This works excellently, apps on Android phones can stream music without difficulty to the sound system.
  
rPlay for AirPlay mirroring (sketchy)
+
If you're using apps like BubbleUPNP, make sure you deactivate your personal media server so that others can't see all the music/videos/photos on your device.
=== DLNA/UPnP ===
+
  
[https://github.com/hzeller/gmrender-resurrect This]
+
==== PulseAudio ====
=== MPD ===
+
[http://www.foell.org/justin/raspberry-pulse/ Raspberry Pi pulse audio guide.] This was a pain to set up, however now you can select 'bcm2835 ALSA Analog Stereo on pulse@projector' on your laptop that has pulseaudio. Doesn't work very well over WiFi. There also seem to be issues with discovery, debian doesn't seem to pick it up, but ubuntu does - to be troubleshooted. The buffer also needs to be setup...
  
sudo apt-get install mpd basically
+
==== Last FM Scrobbling ====
 +
Scrobbles (aka shares what's currently playing) music from MPD to our Last.fm account. You can have fancy visualisations such as [https://www.last.fm/user/hackerspace/now this], and charts/stats such as [https://www.last.fm/user/hackerspace/charts this]. The scrobbling is done by [https://github.com/hrkfdn/mpdas mpdas] (thanks dgellow!).
  
Maybe something like http://www.raspyfi.com/ ? Maybe we can build a nice interface too.
+
=== Not Implemented===
=== Chromecast ===
+
* '''HTTP x264/h264 Desktop Mirroring''' allows for less lag/higher framerate compared with VNC, seeing as the RPi has a hardware decoder, and compression helps overcome the RPi's bandwidth limitations (100mbit). [http://www.oblivion-software.de/index.php?id=56&type=98 Installing VLC with hardware acceleration on Pi]. [http://www.waitwut.info/blog/2013/06/07/desktop-streaming-with-vlc/ Using VLC for screen sharing]. Status: VLC installed, but was a huge massive pain to set up with proper hardware rendering. Should work, but it's untested and un-configured yet.
 
+
* [https://github.com/irtimmer/limelight-pi '''Limelight'''] is an open-source Java client which allows you to stream games from your home PC (as long as you have an Nvidia GTX 600 or 700 Series graphics card and enough bandwidth on your home network) to the Raspberry Pi that’s attached to your television. Status: not implemented, may be installed if there is demand in the future.
Turns out it's not really chromecast, it's a tool that allows you to open websites automatically and in full screen. Works with general websites, youtube links (opens FS and autoplay), netflix links, and a few other things by sending a link to the pi. Sounded better when I first heard of it.
+
* '''MPD''' is a music player demon that runs on a server, and is controllable from any device connected to the network. [http://www.raspyfi.com/ RaspyFi] is a distro specifically made for this. Status: not implemented, this is currently [https://fixme.ch/wiki/MPD_Daemon handled by foo].
 
+
* [https://github.com/lanceseidman/PiCAST '''PiCast'''] opens links and plays streaming videos in fullscreen, Chromecast style. You can open links by sending it via an URL. Status: implemented but removed due to very poor performance and difficulty in setting up correctly. Not very useful either.
[https://github.com/lanceseidman/picast PiCast]
+
* '''Synergy''' allows for remote keyboard/mouse control. Status: installed, and then removed. Why? [http://i.imgur.com/WFcCb2K.png Because].
 
+
* '''MiraCast''' offers native screen sharing for many Android devices. Status: OSS implementation wasn't available when the project started, however there is one now ([https://github.com/codemonkeyricky/piracast Piracast]) which requires a TP-Link dongle and doesn't work with DRMd material. May be implemented in the future.
=== PulseAudio ===
+
* '''RDP''' is a Windows remote desktop utility, although proprietary, there are open source clients such as [https://github.com/FreeRDP/FreeRDP FreeRDP]. Status: in the future if there is demand.
[http://www.foell.org/justin/raspberry-pulse/]
+
* '''Spotify ''' will play most music you want, and can be used on the Pi using [http://www.woutervanwijk.nl/pimusicbox/ mopidy]. Nevertheless, it requires someone with a premium subscription. Status: if someone has a premium subscription they're willing to share, let us know.
 
+
=== LimeLight (?) ===
+
Limelight is an open-source Java client which allows you to stream games from your home PC (as long as you have an Nvidia GTX 600 or 700 Series graphics card and enough bandwidth on your home network) to the Raspberry Pi that’s attached to your television. (You do have a Raspberry Pi attached to your television, right?) And it’s not just Steam games: any content can be streamed. Right now, only mouse and keyboard are supported, but there’s work being done to support other controllers too. So now you can play PC content from the machine upstairs in the study on that great big flatscreen monolith in the corner of your living room, from the comfort of your own sofa.
+
 
+
https://github.com/irtimmer/limelight-pi
+
  
 
=== Control ===
 
=== Control ===
 
 
Use RPi to turn on/off projector via IR LED, also (maybe) change the input of the stereo system. [http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/]
 
Use RPi to turn on/off projector via IR LED, also (maybe) change the input of the stereo system. [http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/]
 
Synergy was also installed on the Pi to allow access remotely
 
  
 
https://github.com/afaqurk/linux-dash?utm_source=explore-newsletter&utm_medium=email&utm_term=weekly&utm_campaign=explore-email
 
https://github.com/afaqurk/linux-dash?utm_source=explore-newsletter&utm_medium=email&utm_term=weekly&utm_campaign=explore-email
 
  
 
== Schedule ==
 
== Schedule ==
* '''December 2013''' - Zephyz bought pi with gcmalloc, sasha and noskill, each contributed 10 CHF, and the SD Card provided by fixme/rorist. Raspbian was set up and updated, ssh access was set up (see above), and experimentation began.
+
* '''December 2013''' - Zephyz bought pi with 10 CHF contributions from gcmalloc, sasha and noskill. The SD Card was provided by fixme/rorist. Raspbian was set up and updated, ssh access was set up, and experimentation began.
* '''January 2014''' - The Raspberry Pi was mounted in a custom 3D printed thing next to the projector, all the wires were hooked up and made tidyish. PiCast, VNC, Synergy and AirPlay were installed. Development rigorous at times.  
+
* '''January 2014''' - The Raspberry Pi was mounted in a custom 3D printed holder next to the projector, all the wires were hooked up. PiCast, VNC, Synergy and AirPlay were installed.
 +
* '''February 2014''' - Proper Airplay (with screen mirroring) and Chromecast were installed. An IR receiver and LED was hooked up in order to be able to control the projector remotely. A splitter was attached to the audio line to allow for playback from both MPD and the projector without switching.
 +
* '''March 2014''' - Synergy and Picast removed due to poor performance. A DLNA/UPnP receiver was set up on the Pi to allow streaming media from devices such as Android phones & tablets. A Pulseaudio sink was also installed. We experimented with an external DSP to amplify sound, however this didn't work. Reverse VNC now runs on startup so there is no need to run script each time.
 +
* '''April/May 2014''' - Extensive attempts to get the IR controller to work, but it doesn't work due to incompatible mosfets (they require minimum 4.5v and Pi has 3.3v output).
 +
* '''June 2014''' - Set up Last.fm scrobbler. Reinstalled Shairplay as default client for Airplay seeing as rPlay works very intermittently - there are now two Airplay clients, one for Audio (works well *knock on wood*), one for video. Banging head against wall with pulseaudio buffer.  
  
 
== Participants ==
 
== Participants ==
 
* [[User:Sasha|Sasha]] (Leader)
 
* [[User:Sasha|Sasha]] (Leader)
* Zephyz
+
* [[User:Francois|Francois]]
* [[User:Gcmalloc|Gcmalloc]]
+
 
* Other ppl
 
* Other ppl

Latest revision as of 17:03, 14 November 2019

The projector client allows users to share their content without requiring them to connect physically to the projector or sound system. This facilitates sharing of media such as music, videos, and photos; as well as sharing your desktop during workshops and presentations. The idea is that everyone can easily share just about anything, with ease, from just about any device.

Todo list for improvements and fixes

Usage

  • SSH Acces:
ssh -p 47382 pi@projector.fixme.ch

Linux

Name Functionality Usage
Reverse VNC

Send display to projector

Good x11vnc -connect projector.fixme.ch:5500 -noxdamage
PulseAudio

Send audio to HiFi

Good Select pulse@projector from Sound settings

Issues with buffer - sound may be choppy sometimes


Mac

Name Functionality Usage
AirPlay Audio

Audio streaming from OS X/iOS system sound or iTunes

Good Select 'Audio' in AirPlay
AirPlay Video/Screen mirroring

Video streams and screen mirroring

Sometimes Select 'Video' in AirPlay

Only works when network is uncrowded, does not transmit audio. Development abandoned.

VNC

Connect from projector to your mac

Good vncviewer -FullScreen -ViewOnly your IP #on pi

Enable Scree Sharing in System Settings > Sharing #on Mac


Windows

Name Functionality Usage
VNC

Connect from projector to your PC

Good vncviewer -FullScreen -ViewOnly your IP #on pi

TightVNC


Android

Name Functionality Usage
DLNA/UPnP

Send photos/videos/pictures to projector

Good Select 'Projector' from DLNA/UPnP devices

Works with Samsung Video/Music/Photo default app, Bubble UPnP, Skifta, other DLNA/UPnP compatible apps

Chromecast

Send audio to HiFi

Unsupported Select 'Projector' from Chromecast menu

No longer supported by open source software due to Google enforcing strong encryption and verification

Other Apps in testing: Shou (root Airplay/DLNA mirroring - works well apart from small lag), BubbleUPNP Audiocast (root xposed sound mirroring over DLNA, 20 minute trial limit), AirAudio (root, airplay/dlna, 5 minute trial limit). All 3 work well, the later two require licences which is annoying. Untested: AllStream, AllCast (untested due to absurd license limits), feel free to suggest others

Goal

Data goals

  • Presenters to broadcast their presentations or demonstrations remotely during workshops
  • YouTube and other streaming video to be streamed directly to the projector
  • Play music directly from personal library or music streaming services (e.g. Pandora)
  • Share project photos or videos directly from personal devices
  • Your idea here

Control goals

  • Turn on and off projector using IR signals (to allow for cooling)
  • Have a script that automatically launches the correct data source
    • Maybe use a dedicated port for streaming, then run nmap every x seconds scanning for port, and then stream from the correlated IP?
      • e.g 5905 for VNC
      • e.g 1205 for HTTP x264 streams
  • Link with trigger interface?

Component

Implemented

VNC

xtightvncviewer in reverse VNC listening mode on Pi DISPLAY=:0 vncviewer -listen 0 -fullscreen -x11cursor #on pi (scripted already)

x11vnc or your favourite server on your laptop, Veency on iOS, DroidVNC or others on Android

Works well, however the frame rate is too low for videos, and the resolution can be a bit finicky. If your laptop isn't set to 720x480 or 640x480, the screen will move around with your mouse.

AirPlay & Chromecast

rPlay is used for AirPlay and Chromecast. Sending music over airplay works fine most of the time, mirroring works intermittently - seems to depend on the number of devices on the network. Chromecast works sometimes, it seems that Youtube works best right now. Streaming side-loaded google music or any DHCP content does not work.

Chromecast using rPlay does not function very well, do not hesitate to suggest alternative servers.

DLNA/UPnP

Gmrender is used for DLNA/UPnP. This works excellently, apps on Android phones can stream music without difficulty to the sound system.

If you're using apps like BubbleUPNP, make sure you deactivate your personal media server so that others can't see all the music/videos/photos on your device.

PulseAudio

Raspberry Pi pulse audio guide. This was a pain to set up, however now you can select 'bcm2835 ALSA Analog Stereo on pulse@projector' on your laptop that has pulseaudio. Doesn't work very well over WiFi. There also seem to be issues with discovery, debian doesn't seem to pick it up, but ubuntu does - to be troubleshooted. The buffer also needs to be setup...

Last FM Scrobbling

Scrobbles (aka shares what's currently playing) music from MPD to our Last.fm account. You can have fancy visualisations such as this, and charts/stats such as this. The scrobbling is done by mpdas (thanks dgellow!).

Not Implemented

  • HTTP x264/h264 Desktop Mirroring allows for less lag/higher framerate compared with VNC, seeing as the RPi has a hardware decoder, and compression helps overcome the RPi's bandwidth limitations (100mbit). Installing VLC with hardware acceleration on Pi. Using VLC for screen sharing. Status: VLC installed, but was a huge massive pain to set up with proper hardware rendering. Should work, but it's untested and un-configured yet.
  • Limelight is an open-source Java client which allows you to stream games from your home PC (as long as you have an Nvidia GTX 600 or 700 Series graphics card and enough bandwidth on your home network) to the Raspberry Pi that’s attached to your television. Status: not implemented, may be installed if there is demand in the future.
  • MPD is a music player demon that runs on a server, and is controllable from any device connected to the network. RaspyFi is a distro specifically made for this. Status: not implemented, this is currently handled by foo.
  • PiCast opens links and plays streaming videos in fullscreen, Chromecast style. You can open links by sending it via an URL. Status: implemented but removed due to very poor performance and difficulty in setting up correctly. Not very useful either.
  • Synergy allows for remote keyboard/mouse control. Status: installed, and then removed. Why? Because.
  • MiraCast offers native screen sharing for many Android devices. Status: OSS implementation wasn't available when the project started, however there is one now (Piracast) which requires a TP-Link dongle and doesn't work with DRMd material. May be implemented in the future.
  • RDP is a Windows remote desktop utility, although proprietary, there are open source clients such as FreeRDP. Status: in the future if there is demand.
  • Spotify will play most music you want, and can be used on the Pi using mopidy. Nevertheless, it requires someone with a premium subscription. Status: if someone has a premium subscription they're willing to share, let us know.

Control

Use RPi to turn on/off projector via IR LED, also (maybe) change the input of the stereo system. [1]

https://github.com/afaqurk/linux-dash?utm_source=explore-newsletter&utm_medium=email&utm_term=weekly&utm_campaign=explore-email

Schedule

  • December 2013 - Zephyz bought pi with 10 CHF contributions from gcmalloc, sasha and noskill. The SD Card was provided by fixme/rorist. Raspbian was set up and updated, ssh access was set up, and experimentation began.
  • January 2014 - The Raspberry Pi was mounted in a custom 3D printed holder next to the projector, all the wires were hooked up. PiCast, VNC, Synergy and AirPlay were installed.
  • February 2014 - Proper Airplay (with screen mirroring) and Chromecast were installed. An IR receiver and LED was hooked up in order to be able to control the projector remotely. A splitter was attached to the audio line to allow for playback from both MPD and the projector without switching.
  • March 2014 - Synergy and Picast removed due to poor performance. A DLNA/UPnP receiver was set up on the Pi to allow streaming media from devices such as Android phones & tablets. A Pulseaudio sink was also installed. We experimented with an external DSP to amplify sound, however this didn't work. Reverse VNC now runs on startup so there is no need to run script each time.
  • April/May 2014 - Extensive attempts to get the IR controller to work, but it doesn't work due to incompatible mosfets (they require minimum 4.5v and Pi has 3.3v output).
  • June 2014 - Set up Last.fm scrobbler. Reinstalled Shairplay as default client for Airplay seeing as rPlay works very intermittently - there are now two Airplay clients, one for Audio (works well *knock on wood*), one for video. Banging head against wall with pulseaudio buffer.

Participants