Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Project goal #1

Open
benhylau opened this issue May 19, 2018 · 11 comments
Open

Project goal #1

benhylau opened this issue May 19, 2018 · 11 comments

Comments

@benhylau
Copy link
Member

benhylau commented May 19, 2018

This summarizes a discussion involving @nicopace, @flyingzumwalt, and @benhylau, followed by a secondary discussion with @darkdrgn2k and @ASoTNetworks, about a demo that features:

LibreRouter
IPFS
SSB
mesh-orange
cjdns

The purpose is to show what can be accomplished with peer-to-peer applications running over a wireless mesh network that is completely isolated from the Internet. It demonstrates:

  • Live video streaming over content addressable storage
  • Sharing of multimedia content over a peer-to-peer social network
  • Mesh networking over long-range wireless links using open hardware

Each node consists of:

  • LibreRouter with directional radios and running as a simple switch
  • Raspberry Pi with mesh-orange running IPFS and SSB

Streamer:

  1. Raspberry Pi records video with camera and hardware-encodes HLS chunks
  2. Publish ts chunks to IPFS and write m3u8 file, which then gets published to IPFS and IPNS
  3. Publish IPNS link as SSB post with expectation that a local ipfs instance + gateway exist at Subscriber side (i.e. http://localhost:8080/ipns/<publisher-ipns-address>)

Subscribers:

  1. SSB auto-discovery of Streamer friend over LAN
  2. Add friend to find the video in the SSB feed
  3. Play live video stream over local IPFS gateway

All traffic goes over the physical mesh formed by LibreRouter long-range radios and are end-to-end encrypted by cjdns running on each Raspberry Pi.


Proposed work plan:

@nicopace provide LibreRouter assistance and test full setup in Alter Mundi and other existing networks
@flyingzumwalt have IPFS side set up with Raspberry Pi and investigate IPNS publishing performance
@benhylau IPFS, SSB, mesh-orange, cjdns integration
@darkdrgn2k integration between Raspberry Pi and LibreRouter
@ASoTNetworks HLS over IPFS

@nicopace
Copy link

The LibreRouter working as a switch requirement is not clear.

  • Would you need all LibreRouters to be as a if they were one single Switch? This would mean to use batman-adv to mesh at layer 2 in order to have all routers working together to create one single collision domain, and disabling dhcp server.

  • Would you need all LibreRouter to disable all routing?

Please, clarify.

Regards

@benhylau
Copy link
Member Author

I am thinking to route with cjdns/yggdrasil on the Raspberry Pi and want the two directional radios to show up on the Raspberry Pi as separate wireless interfaces. LibreRouter does not need to run any mesh networking protocol, just 802.11s mesh point with routing disabled, or ibss ad-hoc, then perhaps vlan the traffic to the Raspberry Pi's single ethernet interface.

@nicopace
Copy link

Only radios, or ethernet traffic too?
Could it be that devices will be connected via cable if they are close enough? (this is how we do it usually)

@benhylau
Copy link
Member Author

👍 I think that's a nice addition, to have the flexibility for both. Especially in conferences like CCC, if you wanna demo this in the assembly hall the radios get drowned... having the ethernet configuration will get the idea across.

@nicopace
Copy link

I guess we will need to hardcode the ethernet interface where the orangepi will be connected... that way we can tunnel all traffic there.

@darkdrgn2k
Copy link
Contributor

darkdrgn2k commented May 20, 2018

CJDNS/yggdrasil all work on Layer two so we have to be careful not the "bridge" the two antennas together. That would make a CJDNS/yggdrasil mesh where all devices are 1 hop away.

Detail of this problem using Ubiquiti gear and a dumb switch can be found here

The "best" solution is to put all interface on separate vlans and trunk them into the PI so the PI sees each LibrRouter interface as a separate interface (tagged eth)

@nicopace
Copy link

I agree, understood what you want to accomplish.
Thanks for the clarification.
Will create a LibreMesh network profile to accomodate this.

@nicopace
Copy link

nicopace commented May 23, 2018

for the hls playing, are you using hls.js or shaka-player?
saw that shaka-player has offline capabilities and capable of downloading the video you streamed! that is nice! https://github.com/google/shaka-player/blob/b61270460cc691eeabb84b4e06f7b26b0eb3e080/docs/design/offline.md

also would be nice to be able to share a fragment of the video...cause it is just a collection of the videos already shared via ipfs... anyway, thinking out loud here.

@nicopace
Copy link

nicopace commented May 23, 2018

another one... have you checked mpeg-dash instead of hls?
https://bitmovin.com/mpeg-dash-vs-apple-hls-vs-microsoft-smooth-streaming-vs-adobe-hds/
looks like it is the only one it is an international standard, and it is the most featureful

here it shows how to do it:
http://wiki.webmproject.org/adaptive-streaming/instructions-to-do-webm-live-streaming-via-dash

@ASoTNetworks
Copy link
Member

The player we are using right now is viedo.js with https://github.com/videojs/videojs-contrib-hls plugin.

We haven't tried mpeg-dash yet because it seems like you have to separate both the audio and video tracks then add to ipfs instead of one file from each HLS chunk.

@nicopace
Copy link

seems shifting to shaka-player has no cost, and many features (that are useless for now).
May be in the future...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants