Archivo de la etiqueta: webtorrent

Cómo lanzar streaming Bittorrent desde Firefox

¿Queréis ver una película en streaming tan sólo pulsando un enlace del navegador? ¿Queréis que, además, sea un streaming P2P en la red bittorrent?

Muchas veces yo también he querido, por lo que he «inventado» una manera de hacerlo. Para ello utilizaremos la aplicación en javascript Peerflix, un binario que he hecho yo mismo con una explicación para su creación y el navegador Firefox.

Preparativos

La magia de todo la da Webtorrent, del que últimamente se está hablando mucho, sobretodo desde que comenzó a utilizarlo Netflix. Sin embargo, su primer commit fue a mediados del 2014 y hay algunas aplicaciones que lo utilizan como motor. Una de ellas es Peerflix, que permite hacer un streaming en línea de comandos pasándole algunos parámetros.

Para este «invento» utilizo Peerflix, aunque cuando veáis la lógica de cómo monto el tema para lanzar el vídeo desde el navegador, bien podríais utilizar Webtorrent-cli e incluso un lanzador gráfico hecho por vosotros mismos.

Otro de los artilugios que necesitaréis son los reproductores VLC o Mplayer, al menos uno de los dos.

Peerflix es una aplicación en NodeJS, es decir, aplicaciones Javascript que para ejecutarse no necesitan un navegador, con las posibilidades que ello ofrece. Para lanzarlas necesitamos NodeJS instalado en nuestra máquina. La manera más rápida, y es válida en muchos casos, es instalarla desde los repositorios de nuetra distribución. Sería raro, raro, que no estuviera.

sudo apt-get install nodejs

o el equivalente en vuestra distribución.

Ello también instalará la aplicación npm. Esta aplicación es un gestor de paquetes estilo apt, pero para aplicaciones en Nodejs. Esta será condicion si ne qua non para poder instalar Peerflix ya que ésta no existe, que yo sepa, en repositorios de distribución. Para instalarla:

sudo npm install peerflix -g

A partir de ahora, ya podríamos utilizarla en una línea de comandos. Yo lo he hecho mucho tiempo. Y seguiré haciéndolo cuando haga falta.

Pero este post va de lanzarla desde un navegador, ¿No?

Binarios para utilizarlos con Firefox

Firefox no lanza scripts bash. Partiendo de ahí, si queremos asociar un tipo de archivo o de enlace a una aplicación, necesitamos un binario.

Aquí he tenido que crear un script bash que cuando lo veáis al final de artículo, veréis que es muy poca cosa. Básicamente, lanza Peerflix con el magnet y abre VLC o Mplayer.

Necesitaréis, al menos, unos de los dos archivos binarios que contiene este archivo: torrentstream.tar.gz.

Una vez descomprimido, dispondréis de dos archivos:

  • torrentstream-vlc
  • torrentstream-mplayer

No hace falta ser un pensador muy penetrante para darse cuenta de qué reproductor de vídeo lanzará cada uno de ellos. Estos archivos también podéis usarlos en la línea de comandos y quedaros aquí, pero me haría ilusión que lo utilicéis en el Firefox para ver las películas.

Asociar tipo MIME en Firefox

Lo que significa decirle a Firefox: cuando te digan que abras este archivo o este tipo de enlace, lanza la aplicación que te hayan dicho.

Muchas de tales asociaciones ya vienen «de fábrica», pero lógicamente pueden cambiarse.

Para asociar el tipo magnet a uno de los lanzadores que, supongo, ya os habéis descargado o estáis pensando en hacerlo, es sencillo. Si no tenéis el tipo magnet asociado a ninguna aplicación, a la hora de pulsar un enlace magnet, Firefox os preguntará si queréis asociarlo a una aplicación, en un cuadro de diálogo como éste:

dialogo mime firefox

En la imagen, ya tengo la aplicación torrentstream-vlc, aunque es probable que vosotros no la tengáis aún. Sobre otros clientes de Bittorrent que salen en la lista como los de Transmission, bueno; pecadores, pecadores… 🙂

No olvidéis recordar decirle a Firefox que recuerde la elección, aunque puede cambiarse en la preferencias. Pues vale, pero ¿Cómo?

Pues hay que ir a Preferencias -> Aplicaciones, buscáis el tipo magnet y os saldrá algo como esto:

aplicaciones mime firefox

La aplicación sería torrentstream-vlc o torrentstream-mplayer, a elegir.

Y a partir de este momento, cuando hagáis un clic en un enlace magnet, se abrirá la aplicación de reproducción de vídeo de las dos que hayáis elegido. Recordad, también, que es streaming P2P, por lo que antes de empezar la reproducción habrá que esperar unos segundo hasta que tenga suficientes fuentes y llene un pequeño buffer.

Con esto, y un apéndice, ya está hecho. Para aquellos que no se fíen de cargar cualquier binario, y por si alguien quiere hacerlo por sí o mismo o lanzar Peerflix con más opciones, a continuación explico cómo los he creado.

Creación de binarios

Los script bash que hecho me extrañaría mucho que sean estudiados por generaciones futuras. El de Mplayer:

#!/bin/bash

/usr/local/bin/peerflix $1 -m

El de VLC:

#!/bin/bash

/usr/local/bin/peerflix $1 -v

¿Cómo convertirlos en binario?

Yo he utilizado la aplicacion shc y los siguientes comandos:

./shc -v -r -T -f torrentstream-mplayer
./shc -v -r -T -f torrentstream-vlc

Cada uno creará un archivo como torrentstream-mplayer.x que después puede ser renombrado y utilizado.

webtorrent logo

WebTorrent Desktop, una aplicación de streaming de vídeo y audio con Bittorrent

De la mano del ya conocido por estos lares Feross Aboukhadijeh, nos llega Webtorrent Desktop, una aplicación Bittorrent muy sencilla para ver vídeos y escuchar audio en streaming.

Aún está en fase beta y la interfaz es muy simple, aunque ligera y maja, en la que se deja sobre ella un archivo torrent o bien se copia un enlace magnet para comenzar la descarga.

No depende de ningún servidor de archivos y éstos están distribuidos en la red. Tan sólo hay que pegar el enlace o el torrent y empieza la descarga.

WebTorrent (BETA)_005

Hace uso del módulo Webtorrent para Javascript y está embebida en Electron. Webtorrent hace conexiones en un navegador sólo través del protocolo WebRTC. Esta aplicación de escritorio puede, además, realizar conexiones TCP,  por lo que también puede hacer el streaming desde cualquier tracker público bittorrent.

Webtorrent Desktop tiene incorporadas varias fuentes desde las que descargar películas o audio, según dice la web del proyecto:

Whether it’s video from the Internet Archive, music from Creative Commons, or audiobooks from Librivox, you can play it right away. You don’t have to wait for it to finish downloading.

Además de descargar a tu escritorio, también emite a través de Airplay, Chromecast y DLNA.

fotograma bib bunny

Para los que prefieran la línea de comandos, con Webtorrent puede utilizarse el comando webtorrent-cli o Peerflix como alternativa, para el que hice un script en Python.

Instalación Linux Mint (y Ubuntu 64 bits)

Una vez descargado el archivo de la aplicación, descomprimimos y lanzamos el binario Webtorrent. Y ya está.

Es un proyecto abierto y en constante desarrollo, por lo que si quieres colaborar puedes hacerlo en su git.

 

sala de cine

Películas a la carta en línea de comandos

Peerfilm es un script para ver vídeos en streaming en la red bittorrent. El script necesita Python 2.7 y depende del programa Peerflix, escrito en Nodejs. Para instalarlo:

#npm install -g peerflix

Una vez instalado y resueltas otras posibles dependencias, Peerfilm estará listo para utilizarse. A continuación comparto el script:

"""
   Peerfilm

   Author: Gustavo Moreno
   Email: gustavo@laenreadera.net

   Streaming P2P via bittorrent

   Depends on:
       - Peerflix

   Install Peerflix:

       - npm install -g peerflix

   This script streams films from bittorrent network. Using it is easy. Just
   enter a magnet uri in prompt or load a CSV file that contains magnet uris.

   CSV file is delimited by ';' and fields are:
        Title;Year;magnetURI

"""

import subprocess

class Films:

       def __init__(self):
          self.magnetList = []
          self.inputIsMagnetURI = False


       def selectTorrentSource(self):
          # Choose between single magnet or csv file
          sourceInput = raw_input("Enter path of CSV file or enter magnetURI: ")

          if 'magnet:?' in sourceInput:
             self.inputIsMagnetURI == True
             self.loadMangetURI(self.inputIsMagnetURI)
          else:
             self.CSVFile = open(sourceInput,"r")
             self.loadMagnetURI(self.inputIsMagnetURI)


       def loadMagnetURI(self, singleMagnet):

          if singleMagnet == True:
             self.title = 'Streaming... '
             self.magnetURI = source
          else:
             self.buildListFromFile(self.CSVFile)


       def buildListFromFile(self, CSVFile):

          peli = []

          lineas = CSVFile.readlines()
          for linea in lineas:
              peli = linea.split(";")
              self.magnetList.append(peli)


       def userSelectFilmFromList(self):
          # Prompt user to choose a film from a given list of titles

          numerationOfAvailableFilms=0
          for row in self.magnetList:
             print numerationOfAvailableFilms+1, " ", row[1], " ", row[0]
             numerationOfAvailableFilms += 1

          num_peli = int(raw_input("What film do you want to watch? "))
          self.title = self.magnetList[num_peli-1][0]
          self.magnetURI = self.magnetList[num_peli-1][2]


       def streamFilm(self):
          # Launch peerflix to VLC
          # Type 'peerflix -h' in console to see available parameters

          print "\n\n\nStreaming... ", self.title, " \n\n\n"
          subprocess.call(['/usr/local/bin/peerflix', self.magnetURI, '-v', 'peliculas/%s'%self.title])


       def play(self):

          self.selectTorrentSource()

          if self.inputIsMagnetURI == True:
              self.streamFilm()
          else:
              self.userSelectFilmFromList()
              self.streamFilm()


film=Films()
film.play()

El archivo CSV está delimitado por ; y tiene los siguientes campos:

Título;Año;Magnet

Por ejemplo:

EL corredor del Laberinto: Las Pruebas;2015;magnet:?xt=urn:btih:2813c7e559a98b8e11fd360c1af3773839bcc6dc&dn=El+corredor+del+laberinto-Las+pruebas+%282015%29.HDrip&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969

Este script lanza el reproductor VLC. Peerflix, el proceso al que llama subprocess, tiene otros parámetros como lanzar el vídeo en los reproductores omx o MPlayer.

captura de peerflix y vlc¡Saludos!

Caos armónico

Hoy toca volver del piso que alquilamos en Gijón para el Somero 2015 con unos amigos, entonces sin apenas rostro -el de las fotos en el mejor de los casos-, que nos conocimos en La Matriz. Han sido unos días maravillosos. No era compartir un piso sin más. En el piso estuve con Pablo Bernardo, Andrés Maneiro, Carlos Sanmartín, Andrea Kropman y Raphael Lopez Altuna.

Mirando el mar de Gijón, con la maleta hecha, llega la hora de volver. El primer encuentro con un matricero que tuve fue en el aeropuerto de Barcelona. Encontré a Pablo, inconfundible por su barba, esperando el mismo avión en el que fuimos a Asturias. Conversa de programación, sobre la vida, aviones, viajes…

En el aeropuerto de Asturias fue a recogernos María, primera indiana que conocí en 3D, en el coche indiano y fuimos con las maletas directos al restaurante donde hubo las primeras presentaciones y abrazos. Confieso que aquella noche no había pegado ojo y, cuando vi a todos los indianos, yo estaba que no me lo creía, flotando en un estado semionírico por la falta de sueño, pero era indudablemente cierto que estaban todos allí. Desde la otra punta de la mesa en la que había unas veinte personas, llegó alguien pronunciando mi nombre y me dejó un poco desconcertado. Era Andrés. También estaba en la mesa Rafa, el maestro de Go.

Ellos dos ya estaban en el piso y fuimos a dejar las maletas. El piso molaba. Era espacioso, bien decorado, aunque con algún detalle inquietante -cuadros de los niños llorando- y bien situado.

Poco después llegó Carlos ese mismo día. Así que ya nos reunimos los primeros cinco ocupantes del piso matricero…

Es que me resulta muy difícil describir lo importante que ha sido, al menos para mí. No hay procedure para esto. Pablo se fue pronto, con la premonición de saber que acabaría, aunque resistiéndome a creerlo. Llegó Andrea y con ella se formó la tripulación estable del piso de la matriz.

Una noche, mientras estábamos en el Elogio al Horizonte, Carlos dijo: es como si nos conociéramos de toda la vida. No sé si esa sensación la tenía todo el  piso, pero al menos yo sí la tenía. Pocas veces en la vida me he sentido tan compenetrado de manera tan rápida compartiendo espacio.

Pero todo lo bueno termina y, además, suele terminar pronto, y tras la vuelta de Pablo fueron siguiendo otras. Andrés, Carlos, Andrea, Rafa… abrazos, miradas de tristeza. Volveremos a vernos, pero mientras tanto seguiremos en los entornos descompuestitos que hay por ahí…

Mientras escribo este post, a mi alrededor hay ambiente de trabajo sereno. Ya he dejado el piso y estoy con la maleta en la casa de los indianos como escala al aeropuerto. Todos están haciendo algo mientras yo escribo este post sintiendo aún que esta semana he recibido más abrazos que el resto del año. Creo que, al final, un síntoma notable de la descomposición es ese: la falta completa de fraternidad. Un síntoma físico.

En otro post hablaré de la presentación de la demo de PeerSound que hicimos Carlos y yo en el Gnu Social Camp. Ahora sólo quiero escribir una nota relacionada -un tanto injusta por lo corta que es- con la inolvidable gente del piso, y con los indianos, que lo hicieron posible, porque deseo expresar parte del flashback antes de que se me vaya y porque sería un frescor estar en la silla sin hacer nada 😉

¡Que la próxima sea pronto!

guitarra

Peersound

Se acerca el Somero 2015 y ya está todo preparado. Nos esperan unos días de amistad, comidas en común, charlas y talleres. Por fin, voy a conocer a los buenos de los indianos y a otra gente de La Matriz, donde surgió la idea de alquilar un piso compartido en Gijón para esos días.

También en La Matriz conocí a Carlos Sanmartín, un desarrollador de sistemas empotrados, músico y quién sabe qué más, e iniciamos el desarrollo de Peersound, una aplicación de intercambio P2P de archivos de tipo audio en Javascript sobre el protocolo de Bittorrent que funciona en los navegadores Firefox y Chromium y tiene un reproductor de música para escuchar las canciones.

guitarra

Nuestra idea es que sea útil a las productoras pequeñas y para intercambiar música efímera, como Jam Sessions. Queremos aportar a la revolución en la industria de la música distribuida.

Peersound almacena los archivos descargados en formato blob en la base de datos del navegador IndexedDB para sembrar las semillas. Utiliza las bibliotecas Webtorrent, Localforage y Bootstrap, entre otras. Descarga canciones con un magnetlink y puede empezar a sembrar a partir de una canción que el usuario tenga en su disco diro. Guarda las listas de reproducción en un archivo .json para reproducirlas posteriormente. Si al cargar una lista de reproducción alguno de las archivos no está en la base de datos del navegador, la descarga automáticamente de otros pares, por lo que son listas idóneas para intercambiarlas entre oyentes.

Peersound está en fase borrador. Es decir, no es una aplicación ni mucho menos terminada. La presentamos así porque la daremos a conocer informalmente en el Somero 2015 y para que os hagáis una idea de por dónde irán los tiros. Implementaremos más formatos de audio, un buscador de canciones, metadatos completos, portadas de discos y de ser posible un reproductor para conseguir el streaming sobre bittorrent, tarea nada desdeñable.

Decir también que hace tres meses no tenía ni idea de Javascript. Para ser completamente honesto, en mi caso no soy un desarrollador profesional y la aplicación, además de los motivos mencionados más arriba, empezó siendo una excusa para iniciarme con la programación en el mundo real.

Espero que os guste. Aquí os dejo el git, alojado en un servidor cortesía de Las Indias.

http://bitujo.enkidu.coop/gustavo/PeerSound

¡Nos vemos!