Tabla de Contenidos

Acestream

Ace Stream un protocolo P2P para streaming de multimedia utilizando la tecnología Bitorrent.

Suele utilizar el puerto 8621

Programas

Ace Stream Media

Aplicación multimedia universal con todas las funciones con cliente P2P incorporado y reproductor multimedia.

Ace Stream Engine

El encargado de procesar contenido de Acestream. Sin él, no podemos ver nada en este formato. Sin embargo, es posible enviar la salida a cualquier reproductor de vídeo gracias a su API HTTP.

Con el engine funcionando, tendremos disponible:

http://localhost:6878/ace/getstream 

Si tenemos una ID de Acestream, podríamos reproducirla mediante la URL:

http://127.0.0.1:6878/ace/getstream?id=<ID_ACESTREAM>

Donde ID_ACESTREAM sería el “canal” de Acestream que queremos reproducir.

Cualquier reproductor de vídeo que permita la reproducción de contenido de red, será capaz de visualizarlo.

Para listas HLS:

http://127.0.0.1:6878/hls/manifest.m3u8?manifest_url=<URL_LISTA.m3u8>

Ejemplo:

http://127.0.0.1:6878/hls/manifest.m3u8?manifest_url=https://bitcdn-kronehit.bitmovin.com/v2/hls/playlist.m3u8

Reproducir un torrent. A través de la URL:

http://127.0.0.1:6878/ace/getstream?infohash=24eb6655740f4f63d00845b9d2024f0e9eeaf656

El identificador que va en infohash es el info-hash contenido en el archivo .torrent.

Hay versión también para teléfonos Android y dispositivos con Android TV. Recordamos:

Para Docker hay varios proyectos para no tener que instalar directamente Ace Stream como por ejemplo acestream-http-proxy

Ace Stream Live TV

Motor Acestream y LiveTV para poner la lista de reproducción de los canales. Para terminales Android.

acestream-launcher

Permite abrir enlaces Acestream desde el reproductor que digamos (por defecto, VLC):

acestream-laucher acestream://1234abcde

Para lanzarlo con otro reproductor, por ejemplo mpv:

acestream-launcher acestream://1234abcde --player mpv

Resolución de problemas

Arch Linux

Debe ejecutarse el motor de Acestream antes de poder usarlo:

sudo systemctl start acestream-engine.service

Si no se tiene la unit para systemd, se lanza:

/usr/bin/acestreamengine --client-console --bind-all

Acestream Proxy

Existe un proyecto independiente que, usando Docker integra Ace Stream Engine y aceproxy, permite poder ver contenido Acestream sin tener que instalar un reproductor específico u otras dependencias de Acestream.

docker run -t -p 8000:8000 ikatson/aceproxy

Una vez que esté en funcionamiento el contenedor, desde un reproductor que soporte la reproducción de medios de red, podremos abrir contenido de Acestream con la siguiente URL:

http://<IP_SERVIDOR>:8000/pid/<ID_ACESTREAM>/stream.mp4

Por ejemplo: http://192.168.0.100:8000/pid/608ffde844a8e6f4f7c7fb9783aa3459c818b9f8/stream.mp4

Lo mismo, pero con Docker Compose y un fichero docker-compose.yml con el contenido:

---
version: '3.3'
services:
  acestream:
    image: ikatson/aceproxy
    container_name: aceproxy
    ports:
      - '8000:8000'

Crear un ID de Acestream

Si queremos retransmitir a través de Acestream. Para ello, necesitamos tener el engine de Ace Stream.

En engine de Ace Stream solo soporta streams de entrada en formato MPEG TS sobre HTTP y HLS.

docker run --name nombredocker --rm -p 8630:8630/tcp -p 8630:8630/udp \
           -v acestream:/data lob666/myroom --stream-source --port 8630 \
           --skip-internal-tracker  --tracker "udp://tracker.openbittorrent.com:80, http://www.proxmox.com:6969/announce, udp://seedbay.net:2710/announce" \
           --name "nombre_del_canal" --title "Nombre leglible del canal"  \
           --publish-dir "/tmp" --cache-dir "/data" --quality "HD" \
           --category "amateur" --service-access-token "pass" --service-remote-access --stats-report-peers --log-debug "1" \
           --max-peers "30" --max-upload-slots "30" --source-read-timeout 60 --source-reconnect-interval 1 \
           --host "<DIRECCION_IP_HOST>" --source "<URL_STREAMING.ts>" --bitrate "0" \
           --max-connections "300"

Cambios para mejorar tiempos de reconexion a los source: --source-read-timeout 15 --source-reconnect-interval 1

Donde:

Los diferentes valores aceptados en category:

Si no queremos que cambie la ID del canal generado, debemos usar el mismo bitrate, nombre de canal (--name), trackers, puerto y directorio de caché.

Estadísticas

Si lo hemos activado, podremos acceder a una interfaz web desde http://ip.host:puerto/app/monitor

Si hemos indicado contraseña: http://ip.host:puerto/app/<CONTRASEÑA>/monitor

Veremos un fichero JSON de este estilo:

{
  "download_from": [],
  "source_reconnects": 0,
  "pid": 1,
  "upload_speed": 25470,
  "max_upload_slots": 50,
  "download_speed": 0,
  "transport_stats": {
    "real": {
      "my_first": 191,
      "pp": [],
      "window_first": 191,
      "min": 191,
      "max": 217,
      "storage": [],
      "pos": 217,
      "my_last": 217,
      "window_last": 217
    }
  },
  "port": 8630,
  "max_connections": 1000,
  "upload_slots": 50,
  "memory_usage": null,
  "cpu_percent": 1.2,
  "download_limit": 0,
  "upload_to": [],
  "download_hash": "98b6d854bdf4ea3061e3a240d5abfda07f1f7e25",
  "version": "3.1.49",
  "type": "source",
  "source_connected": true,
  "status": "running",
  "source_last_connect": 1660912012,
  "timestamp": 1660912088,
  "connected_peers": [],
  "last_stats_update": 1660912072,
  "private_node": false,
  "run_time": 76,
  "stats_report_peers": 0,
  "upload_limit": 0,
  "stats_report_interval": 60,
  "active_connections_count": 1,
  "connected_peers_count": 1,
  "max_peers": 50,
  "content_id": "965145724cda1c0f12c862e91b6429fedca3a1f5",
  "source_download_rate": 199625
}

content_id contendría la ID del canal de Ace Stream que hemos generado y estamos emitiendo.

Modificar opciones

Podemos utilizar la API HTTP para modificar algunas opciones. Por ejemplo:

http://ip.host:puerto/app/<CONTRASEÑA>/update?max_peers=100&max_upload_slots=30

Reproducir contenido Acestream

Para poder reproducir un “canal” de Acestream es necesario tener instalado el acestream engine.

Reproducir desde Ace Stream Media

Pegamos la ID de Acestream en el apartado Open Link. Ace Stream Media también incluye el Ace Player que es una versión de VLC modificada para reproducir Acestream.

Reproducir desde cualquier reproductor

Le pasaremos la siguiente ruta de red:

http://127.0.0.1:6878/ace/getstream?id=<ID_ACESTREAM>

Donde:

Si queremos arrancar un engine de Acestream utilizando Docker, podemos usar la imagen de blaiseio/acelink. Ejemplo de docker-compose.yml:

version: '3.3'
services:
  acestream:
    image: blaiseio/acelink
    container_name: acestream-server
    ports:
      - '6878:6878'

Luego, podrías reproducir a través de la dirección http://ip.servidor:6878/ace/getstream?id=<CONTENT_ID>

Esto permite reproducir solo un streaming a la vez. Para reproducir varios a la vez, podemos añadir el parámetro sid seguido de un número que no se repita. Ejemplo: http://ip.servidor:6878/ace/getstream?id=<CONTENT_ID>&sid=1. Luego podríamos tener http://ip.servidor:6878/ace/getstream?id=<OTRO_CONTENT_ID>&sid=2 y http://ip.servidor:6878/ace/getstream?id=<Y_OTRO_CONTENT_ID>&sid=3, etc.

Reproducir torrent

http://127.0.0.1:6878/ace/getstream?infohash=<INFO_HASH_TORRENT>

Donde:

Por ejemplo, para reproducir mediante Acestream el corto hecho con Blender “Big Buck Bunny”:

http://127.0.0.1:6878/ace/getstream?infohash=88594aaacbde40ef3e2510c47374ec0aa396c08e

Esto puede ser muy útil para reproducir enlaces magnet ya que contienen el info hash del torrent y así no hay que calcularlo.

Enviar contenido a la televisión

Es posible hacer “cast” desde la aplicación para Android y así enviar el contenido Acestream a una televisión y que se vea en ella en lugar de en el dispositivo Android.

El móvil se convertirá en el mando a distancia. Durante todo el tiempo, el móvil tendrá que estar conectado a la misma red que la televisión.

API HTTP del engine

http://ip.engine.acestream:6878/ace/getstream?format=json&id=<ID_ACESTREAM>

Ejemplo de salida:

{
    "response": {
        "stat_url": "http://ip.engine.acestream:6878/ace/stat/d58233fb0ba99e3d052a344a44c684f7d21be704/e16419dfdb5db7b8e3f11e123f4a962e",
        "playback_session_id": "9b145a8dc5eb1761a7ec2b526804bc59362b3fd8",
        "is_live": 1,
        "playback_url": "http://ip.engine.acestream:6878/ace/r/d58233fb0ba99e3d052a344a44c684f7d21be704/e16419dfdb5db7b8e3f11e123f4a962e",
        "is_encrypted": 0,
        "command_url": "http://ip.engine.acestream:6878/ace/cmd/d58233fb0ba99e3d052a344a44c684f7d21be704/e16419dfdb5db7b8e3f11e123f4a962e",
        "client_session_id": -1,
        "infohash": "d58233fb0ba99e3d052a344a44c684f7d21be704"
    },
    "error": null
}

Obtener stream HTTP

http://ip.engine.acestream:6878/ace/getstream?id=<ID_ACESTREAM>

Como respuesta, si ha ido bien, devolverá el streaming progresivo que podremos verlo con cualquier reproductor que permita la reproducción por red.

Crear lista de reproducción

La estructura de un archivo m3u debe contener una serie de etiquetas determinadas distribuidas en tres líneas, que vamos a explicar a continuación:

La etiqueta #EXTINF tiene la siguiente estructura:

#EXTINF:(duración), (atributos),(título del canal)

Si queremos tener EPG, indicaríamos la ubicación de la guía con el atributo url-tvg, por ejemplo:

#EXTM3U url-tvg="https://raw.githubusercontent.com/dracohe/CARLOS/master/guide_IPTV.xml"

Para referenciarlo luego en la línea con el canal correspondiente, usaremos el atributo tvg-id con el mismo nombre que aparezca en la etiqueta channel del fichero con la guía:

#EXTM3U url-tvg="https://raw.githubusercontent.com/dracohe/CARLOS/master/guide_IPTV.xml"
#EXTINF:-1 tvg-id="EUROSPORT1HD" ,EuroSport 1 1080
acestream://123a37534656efcc6179c1b7693335d5e8212123

Ejemplo de lista M3U:

#EXTM3U url-tvg="https://raw.githubusercontent.com/dracohe/CARLOS/master/guide_IPTV.xml"
#EXTINF:-1 group-title="EuroSport" tvg-id="EUROSPORT1HD" tvg-logo="https://img.sport-tv-guide.live/images/tv-station-es-eurosport-1-615.png" ,EuroSport 1 1080
acestream://123a37534656efcc6179c1b7693335d5e8212123
#EXTINF:-1 group-title="EuroSport" tvg-id="EUROSPORT2HD" tvg-logo="https://img.sport-tv-guide.live/images/tv-station-es-eurosport-2-616.png" ,EuroSport 2 1080
acestream://1234779c721fc7d87eb6d7df7ab11bf751ceb123
#EXTINF:-1 group-title="Otro contenido" tvg-id="CUATRO HD" tvg-logo="https://img.sport-tv-guide.live/images/tv-station-cuatro-619.png" ,CUATRO 1080
acestream://123ec35f4662be1af96963245bfa88fb7d024123
#EXTINF:-1 group-title="Otro contenido" tvg-id="BE MAD" tvg-logo="https://img.sport-tv-guide.live/images/tv-station-be-mad-621.png" ,x_BeMad
acestream://12367a00f264736c1d47c1cc3e754447ca8fa123
#EXTINF:-1 group-title="Otro contenido" tvg-id="NAT GEO HD" tvg-logo="https://brandlogos.net/wp-content/uploads/2016/05/national-geographic-channel-logo-vector-download-400x400.jpg" ,National Geographic
acestream://123eaac59852e51d467dc88a890be24562309123
#EXTINF:-1 group-title="Otro contenido" tvg-id="HISTORIA" tvg-logo="https://1000logos.net/wp-content/uploads/2020/09/History-Channel-Logo-500x313.jpg" ,Historia
acestream://1235a124f24deca70fb59fa1c413dfe580f19123
#EXTINF:0 group-title="Nada" tvg-logo="https://m.drawgaze.online/img/md_home_logo.png" ,Un texto cualquiera
https://?

Recursos