====== Acestream ======
Ace Stream un protocolo P2P para streaming de multimedia utilizando la tecnología Bitorrent.
* [[http://www.acestream.org/|Web oficial]]
* [[https://wiki.acestream.media/Download|Descargas]]
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 [[https://wiki.acestream.media/Engine_HTTP_API|API HTTP]].
Con el //engine// funcionando, tendremos disponible:
http://localhost:6878/ace/getstream
* ''locahost'' es el equipo que ejecuta en engine de Acestream.
* 6878 es el puerto por defecto que usa el engine
Si tenemos una ID de Acestream, podríamos reproducirla mediante la URL:
http://127.0.0.1:6878/ace/getstream?id=
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=
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:
* armv7 para Android de 32 bits
* armv8 para Android de 64 bits.
Para Docker hay varios proyectos para no tener que instalar directamente Ace Stream como por ejemplo [[https://github.com/martinbjeldbak/acestream-http-proxy|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
* [[https://github.com/jonian/acestream-launcher|Repositorio de código oficial de acestream-launcher]]
===== 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 [[https://github.com/ikatson/docker-acestream-proxy|proyecto independiente]] que, usando Docker integra **Ace Stream Engine** y [[https://github.com/ValdikSS/aceproxy|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://:8000/pid//stream.mp4
* ''IP_SERVIDOR'': dirección IP del equipo que esté ejecutando el contenedor de Docker con el Aceproxy.
* ''ID_ACESTREAM'': identificador del contenido Acestream que queremos reproducir.
* ''stream.mp4'': nombre del fichero que va a reproducir. Podemos darle el nombre que queramos.
Por ejemplo: ''http://192.168.0.100:8000/pid/608ffde844a8e6f4f7c7fb9783aa3459c818b9f8/stream.mp4''
Lo mismo, pero con [[informatica:sistemas_operativos:virtualizacion:docker:docker_compose|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 "" --source "" --bitrate "0" \
--max-connections "300"
Cambios para mejorar tiempos de reconexion a los source: ''%%--%%source-read-timeout 15 %%--%%source-reconnect-interval 1''
Donde:
* ''%%--%%stream-source'' indica que queremos que el //engine// se encargue de coger un stream de entrada y generar el stream P2P (Ace Stream).
* ''%%--%%service-remote-access'': activa una interfaz web para ver estadísticas.
* ''%%--%%service-access-token'': contraseña/token para poder ver las estadísticas (ver parámetro ''service-remote-access'').
* ''%%--%%name'': nombre del stream (solo se permite ''[a-z0-9_-]''.
* ''%%--%%title'': nombre legible del stream.
* ''%%--%%source'': URL del stream MPEG TS / HLS que queremos retransmitir.
* ''%%--%%source-read-timeout'': tiempo de espera de lectura del streaming de origen (en segundos).
* ''%%--%%source-reconnect-interval'': tiempo entre reconexiones del streaming de origen (en segundos).
* ''%%--%%bitrate'': bit rate de media del streaming de salida. ''0'' para automático.
* ''%%--%%publish-dir'': directorio donde se crean los ficheros de transporte
* ''%%--%%skip-internal-tracker'': no usar el traker interno.
* ''%%--%%port'': puerto de funcionamiento del nodo (por defecto 7764)
* ''%%--%%permanent'': marca la emisión como 24/7 (disponible siempre)
* ''%%--%%date-start'': hora de inicio del streaming.
* ''%%--%%date-end'': fecha de fin del streaming.
* ''%%--%%quality'': ''auto'', ''SD'', ''HD''
* ''%%--%%category'': categoría del streaming.
* ''%%--%%logo-url'': URL del logo del stream
* ''%%--%%description'': descripción del streaming.
* ''%%--%%tracker'': URL de trackers externos. No poner más de 2 para no dispersar conexiones (queremos que se encuentren todos los peers). Si no funcionasen los trackers, se usa DHT.
* ''%%--%%max-connections'': número máximo de conexiones TCP y UDP connections (por defecto 1000).
* ''%%--%%max-peers'': número máximo de conexiones TCP y UDP a otros nodos (por defecto, 50). Se suele limitar al 70% de la conexion para que los clientes descarguen lo mas rápido posible los chunks.
* ''%%--%%cache-dir'': ruta al directorio donde se guarda la caché.
* ''%%--%%publish-dir'': ruta al directorio donde se crean los ficheros de transporte.
* [[https://telegra.ph/Como-crear-y-Lanzar-una-ID-de-ACEstream-en-1-minuto-04-08|Como crear y Lanzar una ID de ACEstream en 1 minuto]]
* [[https://docs.acestream.net/en/broadcasting/|Documentación oficial sobre broadcasting con Ace Stream]] ([[https://wiki.acestream.media/Streaming/en|Wiki]])
* [[https://forum.acestream.media/t/i-need-help-to-stream-on-acestream/3690/6|I need help to stream on Acestream]]
* [[https://newtrackon.com/|newTrackon]]: monitorización de trackers. Para poder elegir los que tengan mejor uptime.
Los diferentes valores aceptados en ''category'':
* ''informational''
* ''entertaining''
* ''educational''
* ''movies''
* ''documentaries''
* ''sport''
* ''fashion''
* ''music''
* ''regional''
* ''ethnic''
* ''religion''
* ''teleshop''
* ''erotic_18_plus''
* ''other_18_plus''
* ''cyber_games''
* ''amateur''
* ''webcam''
* ''kids''
* ''series''
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//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.
* [[https://docs.acestream.net/en/broadcasting/administration/node-http-interface/|Documentación de la interfaz HTTP]] (también en su [[https://wiki.acestream.media/Engine_HTTP_API|Wiki]])
==== Modificar opciones ====
Podemos utilizar la API HTTP para modificar algunas opciones. Por ejemplo:
http://ip.host:puerto/app//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=
Donde:
* ''127.0.0.1'' es la dirección IP del equipo que tiene el //acestream engine//.
* 6878 es el puerto que usa el //acestream engine//.
* ''ID_ACESTREAM'' es el identificador de Acestream que queremos reproducir.
Si queremos arrancar un engine de Acestream utilizando Docker, podemos usar la imagen de [[https://hub.docker.com/r/blaiseio/acestream|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=''
**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=&sid=1''. Luego podríamos tener ''http://ip.servidor:6878/ace/getstream?id=&sid=2'' y ''http://ip.servidor:6878/ace/getstream?id=&sid=3'', etc.
==== Reproducir torrent ====
http://127.0.0.1:6878/ace/getstream?infohash=
Donde:
* ''127.0.0.1'' es la dirección IP del equipo que tiene el //acestream engine//.
* 6878 es el puerto que usa el //acestream engine//.
* ''INFO_HASH_TORRENT'' es el info hash del fichero torrent.
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 [[https://es.wikipedia.org/wiki/Magnet|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.
{{ https://telegra.ph/file/dca25cd7ad80652f6c405.png |}}
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 =====
* [[https://docs.acestream.net/developers/api-reference/|API Reference - DAO Ace Stream]]
http://ip.engine.acestream:6878/ace/getstream?format=json&id=
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=
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:
* ''#EXTM3U'': obligatoria. Debe ir al principio del documento y solo aparece una vez. Indica a los reproductores que esa es una lista M3U Extendida (incluye atributos adicionales que no están presentes en una lista M3U básica).
* ''#EXTINF'': Indica donde comienzan los metadatos adicionales de cada streaming. Debe usarse una línea para cada streaming incluido en la lista. Por ejemplo si listamos 5 canales de TV, habrá que crear 5 líneas
La etiqueta ''#EXTINF'' tiene la siguiente estructura:
#EXTINF:(duración), (atributos),(título del canal)
* ''duración'': duración en segundos del archivo multimedia referenciado. Si es un directo, se pone 0 (se puede pausar y reanudar) o -1 (no se puede pausar).
* ''atributos'':
* ''tvg-id''
* ''tvg-shift'': ajuste horario para la lista EPG. +1, -1, etc.
* ''tvg-name'': nombre interno del canal
* ''group-title''
* ''tvg-logo''
* ''audio-track''
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 =====
* [[http://livesport.ws|LiveSport]]: todo tipo de deportes y enlaces para Sopcast, Acestream y Flash.
* [[https://soccerstreams.net/|Soccer Streams]]: Fútbol (Flash)
* [[http://www.sport365.live/en/home]]: Todos los deportes (Flash)
* [[http://www.vipbox.me/]]: Todos los deportes (Flash)
* [[http://livetv.sx]]: Todos los deportes (Flash)
* [[https://www.futbolgratis.workers.dev]]: calendario de eventos y canal de Acestream.
* [[http://www.livesoccertv.com/es/schedules/]]: calendario de partidos y canal
* [[http://www.wheresthematch.com/tv/home.asp]]: calendario de partidos y canal
* [[https://acestreamid.com/|AceStreamID]]: obtener ID de Acestream de páginas web (conectar usando una VPN o Tor)
* [[https://acestreamsearch.net|Ace Stream Broadcasts Search]]: buscador de canales Acestream (conectar usando una VPN o Tor).
* [[http://oldforum.acestream.media/index.php?topic=1479.0|Anuncio de lanzamiento de ACE Stream]]
* [[https://github.com/vstavrinov/acestream-service]]
* [[https://github.com/vstavrinov/acestream_search]]
* [[https://telegra.ph/Como-arrancar-una-id-de-acestream-en-pocos-minutos-Entra-en-ACEstream-Spanish-01-16|Como arrancar una id de acestream en pocos minutos. Por @ACEstream_Spanish]]
* https://raw.githubusercontent.com/electroperra/streaming/main/lista1.m3u
* https://raw.githubusercontent.com/xbc76/list/main/deportes
* [[https://telegra.ph/Tutorial-Ace-Stream-LiveTv-10-06|Tutorial Ace Stream LiveTv]]
* [[https://telegra.ph/Configuracion-Acestream-Media-10-05|Tutorial Ace Stream Media]]
* [[https://www.futbolenlatv.es/deporte|Programación de deportes en la TV]]
* [[https://github.com/Javinator9889/acexy|Acexy]]: proxy para permitir múltiples conexiones al motor de AceStream.