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

Add WebRTC support to popular torrent clients #369

Open
feross opened this issue Jul 7, 2015 · 51 comments
Open

Add WebRTC support to popular torrent clients #369

feross opened this issue Jul 7, 2015 · 51 comments
Labels

Comments

@gauravsaini

This comment has been minimized.

Copy link

@gauravsaini gauravsaini commented Jul 9, 2015

👍

@feross feross added the meta label Jul 15, 2015
@Stiveknx

This comment has been minimized.

Copy link
Contributor

@Stiveknx Stiveknx commented Jul 29, 2015

Hi @feross.

So, how is the progress on this?

@feross

This comment has been minimized.

Copy link
Member Author

@feross feross commented Jul 30, 2015

@dcposch has done some exploration of getting webrtc support into libtorrent. It looks like it'll be doable!

@transitive-bullshit

This comment has been minimized.

Copy link
Member

@transitive-bullshit transitive-bullshit commented Oct 18, 2015

@feross seems to me that this should be the most important outstanding issue by far as it is really the only blocker for webtorrent gaining widespread use in the browser and fulfilling the original promise of the project.

@feross @mafintosh One other extremely popular torrent client that isn't listed here would be peerflix, as it still sees ridiculous usage (although hard to quantify) via the various popcorn-time forks. If peerflix were augmented to support webrtc peers, that could potentially allow a popcorn-time in the browser use case to function very well. Product Hunters seem to agree that this would be a great development.

It's also pretty clear that given the synergy between torrent-stream/peerflix and webtorrent in terms of environment and shared dependencies, making peerflix peers hybrid wouldn't be nearly as difficult as integrating webrtc support into the other, non-js-based torrent clients.

@dcposch

This comment has been minimized.

Copy link
Contributor

@dcposch dcposch commented Oct 18, 2015

Interesting...

peerflix peers hybrid wouldn't be nearly as difficult as integrating webrtc support into the other, non-js-based torrent clients

Agreed. @jhiesey & i checked out how hard it would be to add webtorrent support to one of the native torrent libraries, eg libtorrent.

It looks like the biggest hurdle is that there's no libdatachannel or anything like that, no small library with a clean API for using WebRTC data channels. instead, there are two full WebRTC implementations:

@B00tLdr

This comment has been minimized.

Copy link

@B00tLdr B00tLdr commented Nov 4, 2015

Maybe this project could be helpful: https://github.com/xhs/librtcdc

@dcposch

This comment has been minimized.

Copy link
Contributor

@dcposch dcposch commented Nov 4, 2015

wow, that looks awesome. if i have time later i'll try it out

@jhiesey

This comment has been minimized.

Copy link
Contributor

@jhiesey jhiesey commented Nov 4, 2015

@dcposch if it works well I want to look at making node bindings for it as well.

@cathalgarvey

This comment has been minimized.

Copy link

@cathalgarvey cathalgarvey commented Nov 24, 2015

Sorry if this is a stupid question, but:

Webtorrent's docs/FAQ suggest that browser-based WebTorrent users can only communicate with other browser based clients and "hybrid" clients. "Hybrid" clients can communicate with either pool, bridging the swarms.

Ultimately we don't want bridges, we want one swarm. But right now, what are the "bridges" or "hybrids"? Node-based WebTorrent users? Or something else?

@rom1504

This comment has been minimized.

Copy link
Member

@rom1504 rom1504 commented Nov 24, 2015

@devlo

This comment has been minimized.

Copy link

@devlo devlo commented Jan 18, 2016

@feross
Did you reach to bittorrent inc ? Making webtorrent as extension to Bittorrent protocol would be huge step.
The most important adopters are uTorrent and libtorrent (rtorrent, deluge etc.), rest really doesn't matter.
Another thing, where is documentation of protocol which webtorrent uses with implementation details ?
This is a must for adoption and I do not see any links in github repo or on webtorrent.io. You need to standardize webtorrent or you will see no adoption at all.
If someone would like to implement it in C/C++ then where he should look ? What if he is not familiar with javascript ?
In my opinion this is the main reason why you do not see any adoption besides people using your own lib.

@transitive-bullshit

This comment has been minimized.

Copy link
Member

@transitive-bullshit transitive-bullshit commented Jan 18, 2016

@devlo completely agreed; I know feross is aware of this, but there just hasn't been anyone who's stepped up and been able to make this integration happen. The piece that I'd recommend starting from would be communicating in C from libtorrent to https://github.com/feross/webtorrent-hybrid via webrtc probably using one of the C-based webrtc libraries listed above.

@transitive-bullshit

This comment has been minimized.

Copy link
Member

@transitive-bullshit transitive-bullshit commented Feb 9, 2016

See libtorrent#223 for some continued libtorrent discussion.

@rom1504

This comment has been minimized.

Copy link
Member

@rom1504 rom1504 commented Mar 13, 2016

https://wiki.vuze.com/w/WebTorrent it seems vuze has support now !

@voxadam

This comment has been minimized.

Copy link

@voxadam voxadam commented Jul 15, 2016

It seems to me that documenting the protocol adaptations/extensions would be the best way to encourage the developers of other clients to add support to their codebases. Ideally, I suppose this would come in the form of a BEP but even a draft specification would likely be welcomed by many.

@farribeiro

This comment has been minimized.

Copy link

@farribeiro farribeiro commented Oct 2, 2016

Add in this issue the link for libtorrent issue on github #223

Duplicated, sorry!

@hex-m

This comment has been minimized.

Copy link

@hex-m hex-m commented Oct 6, 2016

Someone created a ticket for Transmission. It may need some details though.
transmission/transmission#47

@dessalines

This comment has been minimized.

Copy link

@dessalines dessalines commented Oct 18, 2016

If this were done for libtorrent, it would work for deluge, and qbittorrent, the two most popular open source bittorrent clients. Once that's done, you instantly got a lot more seeders.

@dessalines

This comment has been minimized.

Copy link

@dessalines dessalines commented Nov 15, 2016

@feross I'm planning on assisting adding this into libtorrent, with a c++ webRTC library, but could you help point me to which files in this codebase show the webRTC communication?

@yciabaud

This comment has been minimized.

Copy link
Contributor

@yciabaud yciabaud commented Nov 15, 2016

Great @dessalines! Cannot wait to see that coming!

If I can give you some pointers:

  1. You will have to connect to the websocket tracker in order to make WebRTC signalling. Basically you will have to add WebRTC offers on announce and manage SDP offers/responses. Here is our implementation: https://github.com/feross/bittorrent-tracker/blob/master/lib/client/websocket-tracker.js
  2. Once a WebRTC connexion is established, the torrent peer protocol is used, so there is nothing special here. This project uses https://github.com/feross/simple-peer to make the connexion then it becomes a "normal" peer. (Except that the connexion is handled upstream: https://github.com/feross/webtorrent/blob/15ed59a0d2c9d32598ab4c98706e6fd8fa200843/lib/peer.js#L16)

There is a BEP we are working on in #881, it should give you some informations but be aware that some fields have been renamed for the future standard and read the comments (or look at the code).
The document is published at https://github.com/yciabaud/webtorrent/blob/486a94d2b651e7aed86ba27b82e679f5d1d1e700/bep_webrtc.rst

I am very interested in making libtorrent support webtorrent so ask if there is anything I can do for it.

@fredsif

This comment has been minimized.

Copy link

@fredsif fredsif commented Mar 26, 2018

Any news about this?
Seems pretty much dead.

@feross feross added the accepted label May 3, 2018
@tuxayo

This comment has been minimized.

Copy link

@tuxayo tuxayo commented May 7, 2018

Here is the issue for rtorrent and libtorrent-rakshasa
rakshasa/rtorrent#717

To avoid confusion, we should also use libtorrent-rasterbar instead of just libtorrent.

https://github.com/rakshasa/rtorrent/wiki#disclaimer

@farribeiro

This comment has been minimized.

Copy link

@farribeiro farribeiro commented May 8, 2018

@feross add on the list

@Openmedianetwork

This comment has been minimized.

@tuxayo

This comment has been minimized.

Copy link

@tuxayo tuxayo commented Jun 10, 2018

From what I understand, as of today there is no client usable on a headless server right?

@cathalgarvey

This comment has been minimized.

Copy link

@cathalgarvey cathalgarvey commented Jun 10, 2018

@rom1504

This comment has been minimized.

Copy link
Member

@rom1504 rom1504 commented Jun 10, 2018

webtorrent hybrid

@tuxayo

This comment has been minimized.

Copy link

@tuxayo tuxayo commented Jun 11, 2018

Request to add BiglyBT to the list.

It can be seen as the continuation of Vuze as it's development has stalled.
https://sourceforge.net/p/azureus/mailman/azureus-commitlog/
https://www.biglybt.com/
https://github.com/BiglySoftware/BiglyBT/graphs/contributors
https://en.wikipedia.org/wiki/Vuze (search for BiglyBT)

As for WebRTC support, I'm testing it but it seems to have NAT and/or UPnP issues for me. So I can't confirm yet if it's usable.

edit 2018-06-23: I'm not sure that BiglyBT and Vuze can actually seed with WebRTC. I could barely seed when with WebTorrent desktop it seeds most of the time.

@tuxayo

This comment has been minimized.

Copy link

@tuxayo tuxayo commented Jun 11, 2018

@rom1504

webtorrent hybrid

Thanks for the heads up, I'll try that :)

@kelna

This comment has been minimized.

Copy link

@kelna kelna commented Jul 26, 2019

Is this dead?

@feross

This comment has been minimized.

Copy link
Member Author

@feross feross commented Aug 3, 2019

Is this dead?

No.

@farribeiro

This comment has been minimized.

Copy link

@farribeiro farribeiro commented Aug 4, 2019

And implements webrtc without browser... Its possible?

And this... https://github.com/pion/webrtc and https://github.com/thorst/RTC

@ExE-Boss

This comment has been minimized.

Copy link

@ExE-Boss ExE-Boss commented Aug 4, 2019

Yes, there’s discussion over at arvidn/libtorrent#223 about existing non‑browser WebRTC implementations and their pros and cons.

The most favourable option currently appears to be @lgrahl’s RAWRTC.

@backkem

This comment has been minimized.

Copy link

@backkem backkem commented Aug 4, 2019

Anyone into Go may be able to pick up anacrolix/torrent#138. pion/webrtc should be in good shape to power a Go implementation.

@dessalines

This comment has been minimized.

Copy link

@dessalines dessalines commented Aug 4, 2019

Libtorrent (which is written in C++) is the only one that matters. It powers qbittorrent, deluge, transmission, rtorrent.

@ExE-Boss

This comment has been minimized.

Copy link

@ExE-Boss ExE-Boss commented Aug 4, 2019

rTorrent uses its own BitTorrent implementation, which is also, confusingly, called LibTorrent.

@iagovar

This comment has been minimized.

Copy link

@iagovar iagovar commented Nov 11, 2019

Any update?

I really want to upload my videos to a seedbox and then stream to peertube, bitchute and web players, but it seems odd to have to do it trough a VPS and a freaking browser open. It's just too much bloat because I need to install X and so on.

I don't trust peertube instances to keep hosting.

@transitive-bullshit

This comment has been minimized.

Copy link
Member

@transitive-bullshit transitive-bullshit commented Nov 25, 2019

Really interesting progress on integrating into libtorrent. arvidn/libtorrent#4123

@Allardje

This comment has been minimized.

Copy link

@Allardje Allardje commented Jan 22, 2020

I really hope this is still on-going. I would love to see something like rTorrent adopting WebRTC support. This will be a game changer. Been following this for a very long time but it seems no new clients added WebRTC for years :(.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
You can’t perform that action at this time.