Some of you might have been following all the brouhaha over Popcorn Time. I won’t get into the arguments that can be made for and against at the moment.
While poking around at what it was that Popcorn Time was doing, I stumbled upon peerflix, a Node.js-based application that takes a .torrent file that points to one big video file, and presents that as an HTTP stream. It has its own BitTorrent implementation where it prioritises early chunks of the file so that it is possible to start watching the video before the entire file has been downloaded. It also seeds the file while the video is being watched locally.
Seeing as I was at the GStreamer Hackfest in Munich when this came up in discussions, it seemed topical to have a GStreamer element to wrap this neat bit of functionality. Thus was peerflixsrc born. This is a simple source element that takes a URI to a torrent file (something like torrent+http://archive.org/some/video.torrent), fires up peerflix in the background, and provides the data from the corresponding HTTP stream. Conveniently enough, this can be launched using playbin or Totem (hinting at the possibilities of what can come next!). Here’s what it looks like…
The code is available now. To use it, build this copy of gst-plugins-bad using your favourite way, make sure you have peerflix installed (sudo npm install -g peerflix), and you’re good to go.
This is not quite mature enough to go into upstream GStreamer. The ugliest part is firing up a Node.js server to make this work, not the least because managing child processes on Linux is not the prettiest code you can write. Maybe someone wants to look at rewriting the torrent bits from peerflix in C? There don’t seem to be any decent C-based libraries for this out there, though.
In the mean time, enjoy this, and comments / patches welcome!
j
March 20, 2014 — 12:04 am
Have a look at http://jordic.com/btcat/ it does something like it using libtorrent. Its written in python but it might be a better base for a C-based implementatoin
Alexander Larsson
March 20, 2014 — 1:08 pm
Managing child processes, made easy: https://developer.gnome.org/gio/unstable/GSubprocess.html
Arun
March 25, 2014 — 12:32 pm
Nice! Will switch over to that shortly. Do you know if there’s an elegant way to also make sure the child goes away if the parent does? I’ve seen the PR_SET_PDEATHSIG, but that goes away if the child does a fork(), which defeats the purpose, somewhat.
Alexandre Franke
March 20, 2014 — 5:44 pm
Tribler has done the get-first-chunks-first-to-stream-over-torrent trick for a while now (I now for sure that it was already working in 2007) and it’s written in Python (with a C core/lib?). You may find that less ugly than the Node.js way.
John McHugh
April 29, 2014 — 11:12 pm
Good work so far. Would be neat to have something akin to open torrent bundles that gnome could utilize in videos and music to curate createive commons media.
saurabh shabdik
August 5, 2014 — 7:04 am
I am just an Ubuntu user not an expert. Looking for help. I have started watching movies with torrent flix, torrent video player. It saves video in temp folder. I searched and get these command or argument to change the folder. –f or –path ( change buffer file path ) Please tell me how to press the argument or command Thanks in advance