Dies ist eine mobil optimierte Seite, die schnell lädt. Wenn Sie die Seite ohne Optimierung laden möchten, dann klicken Sie auf diesen Text.

Laberthread - Autoscript Vavoo auf e2 oder TvHeadend

Wie laufen bei euch die Einzeiler

  • Stream + Picon + EPG funktioniert

    Stimmen: 36 45,6%
  • Stream + EPG funktioniert

    Stimmen: 12 15,2%
  • Stream + Picon funktioniert

    Stimmen: 3 3,8%
  • Nur Stream funktioniert

    Stimmen: 21 26,6%
  • Streams gehen garnicht

    Stimmen: 7 8,9%

  • Umfrageteilnehmer
    79
  • Umfrage geschlossen .
eigentlich spricht da nichts gegen,möchte gerne vti weiter betreiben.
 
Hab das auch jahrelang gehabt,nach Umstellung auf Open ATV mit einer Eingewöhnungszeit ist VTI Geschichte
 
Zuletzt bearbeitet:
Das Script aus #4452 ist Zur Zeit nur noch über offline zu installieren.
Vavoo_E2.zip entpacken und Inhalt auf den Receiver nach /home
Dann im Terminal ausführen
Code:
cd /home
bash install-vavoo-e2.sh
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet:
@marzi
Teste mal
Code:
###############################################################
PORT = 4323

ADDON_SIG_TTL = 600  # 10 Minuten
###############################################################

import json
import gzip
import requests
from io import BytesIO
import uuid
from flask import Flask, request, Response, abort
import time
import socket
import threading

# ---------------- LÄNDER ----------------

REGIONS = [
    {"language": "de", "region": "DE"},
    {"language": "de", "region": "AT"},
    {"language": "de", "region": "CH"},
    {"language": "es", "region": "ES"},
    {"language": "fr", "region": "FR"},
    {"language": "it", "region": "IT"},
    {"language": "nl", "region": "NL"},
    {"language": "nl", "region": "BE"},
    {"language": "en", "region": "UK"},
    {"language": "en", "region": "US"},
    {"language": "en", "region": "CA"},
    {"language": "pl", "region": "PL"},
    {"language": "cs", "region": "CZ"},
    {"language": "hu", "region": "HU"},
    {"language": "tr", "region": "TR"},
    {"language": "pt", "region": "PT"},
    {"language": "ro", "region": "RO"},
    {"language": "sv", "region": "SE"},
    {"language": "no", "region": "NO"},
    {"language": "da", "region": "DK"},
    {"language": "fi", "region": "FI"},
]

GEOIP_URL = "https://www.vavoo.tv/geoip"
PING_URL = "https://www.vavoo.tv/api/app/ping"
CATALOG_URL = "https://vavoo.to/mediahubmx-catalog.json"
RESOLVE_URL = "https://vavoo.to/mediahubmx-resolve.json"

# Default-Werte, werden pro Region überschrieben
LANGUAGE = "de"
REGION = "DE"

HEADERS = {
    "accept": "*/*",
    "user-agent": "electron-fetch/1.0 electron (+https://github.com/arantes555/electron-fetch)",
    "Accept-Language": LANGUAGE,
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
}

def decode_response(resp):
    if resp.content[:2] == b'\x1f\x8b':
        return json.loads(gzip.decompress(resp.content))
    return resp.json()

session = requests.Session()
session.headers.update(HEADERS)

# ---------------- GEO + INITIAL PING ----------------

r_geo = session.get(GEOIP_URL)
r_geo.raise_for_status()
geo_data = decode_response(r_geo)

unique_id = str(uuid.uuid4())
current_timestamp = int(time.time() * 1000)

initial_payload = {
    "reason": "app-focus",
    "locale": "de",
    "theme": "dark",
    "metadata": {
        "device": {"type": "desktop", "uniqueId": unique_id},
        "os": {"name": "win32", "version": "Windows 10 Pro", "abis": ["x64"], "host": "Lenovo"},
        "app": {"platform": "electron"},
        "version": {"package": "tv.vavoo.app", "binary": "3.1.8", "js": "3.1.8"},
    },
    "appFocusTime": 0,
    "playerActive": False,
    "playDuration": 0,
    "devMode": False,
    "hasAddon": True,
    "castConnected": False,
    "package": "tv.vavoo.app",
    "version": "3.1.8",
    "process": "app",
    "firstAppStart": current_timestamp,
    "lastAppStart": current_timestamp,
    "ipLocation": None,
    "adblockEnabled": True,
    "proxy": {"supported": ["ss"], "engine": "Mu", "enabled": False, "autoServer": True},
    "iap": {"supported": False},
}

r1 = session.post(PING_URL, json=initial_payload)
r1.raise_for_status()
data1 = decode_response(r1)

# ---------------- ADDON SIG MANAGEMENT ----------------

addon_sig_lock = threading.Lock()
addon_sig_data = {
    "sig": data1.get("addonSig"),
    "ts": time.time()
}

def refresh_addon_sig_if_needed(force=False):
    with addon_sig_lock:
        now = time.time()
        if not force and now - addon_sig_data["ts"] < ADDON_SIG_TTL:
            return addon_sig_data["sig"]

        payload = initial_payload.copy()
        payload["lastAppStart"] = int(time.time() * 1000)

        r = session.post(PING_URL, json=payload)
        r.raise_for_status()
        data = decode_response(r)

        sig = data.get("addonSig")
        if not sig:
            raise RuntimeError("No addonSig received")

        addon_sig_data["sig"] = sig
        addon_sig_data["ts"] = now

        print("[✓] addonSig refreshed")
        return sig

# ---------------- CATALOG LOAD (MULTI-REGION) ----------------

all_filtered_items = []

for entry in REGIONS:
    LANGUAGE = entry["language"]
    REGION = entry["region"]

    print(f"[+] Lade Katalog für {LANGUAGE}-{REGION}")

    catalog_headers = {
        "content-type": "application/json; charset=utf-8",
        "mediahubmx-signature": addon_sig_data["sig"],
        "user-agent": "MediaHubMX/2",
        "accept": "*/*",
        "Accept-Language": LANGUAGE,
        "Accept-Encoding": "gzip, deflate",
        "Connection": "close",
    }

    cursor = None

    while True:
        catalog_payload = {
            "language": LANGUAGE,
            "region": REGION,
            "catalogId": "iptv",
            "id": "iptv",
            "adult": False,
            "search": "",
            "sort": "",
            "filter": {},
            "cursor": cursor,
            "clientVersion": "3.0.2"
        }

        r_catalog = session.post(CATALOG_URL, json=catalog_payload, headers=catalog_headers)
        r_catalog.raise_for_status()
        catalog_data = decode_response(r_catalog)

        for item in catalog_data.get("items", []):
            if item.get("type") == "iptv":
                all_filtered_items.append({
                    "id": item["ids"]["id"],
                    "url": item["url"],
                    "name": item["name"],
                    "group": item["group"],
                    "logo": item["logo"],
                    "language": LANGUAGE,
                    "region": REGION
                })

        cursor = catalog_data.get("nextCursor")
        if not cursor:
            break

print(f"[✓] Gesamtanzahl IPTV-Sender: {len(all_filtered_items)}")

# ---------------- M3U SAVE ----------------

LOCAL_IP = "127.0.0.1"

def get_local_ip():
    return LOCAL_IP

def save_m3u_file():
    local_ip = get_local_ip()
    m3u = "#EXTM3U\n"
    for item in all_filtered_items:
        m3u += (
            f'#EXTINF:-1 tvg-id="{item["id"]}" '
            f'tvg-name="{item["name"]}" '
            f'tvg-logo="{item["logo"]}" '
            f'group-title="{item["group"]} ({item["region"]})",{item["name"]}\n'
        )
        m3u += f"http://{local_ip}:{PORT}/vavoo?channel={item['id']}\n"

    with open("vavoo_playlist.m3u", "w", encoding="utf-8") as f:
        f.write(m3u)

    print("[✓] vavoo_playlist.m3u written")

save_m3u_file()

# ---------------- FLASK APP ----------------

app = Flask(__name__)

@app.route("/vavoo")
def stream_proxy():
    channel_id = request.args.get("channel")
    if not channel_id:
        abort(400)

    channel = next((i for i in all_filtered_items if i["id"] == channel_id), None)
    if not channel:
        abort(404)

    try:
        sig = refresh_addon_sig_if_needed()
    except Exception as e:
        abort(502, str(e))

    resolve_headers = {
        "content-type": "application/json; charset=utf-8",
        "mediahubmx-signature": sig,
        "user-agent": "MediaHubMX/2",
        "accept": "*/*",
        "Accept-Language": channel["language"],
        "Accept-Encoding": "gzip, deflate",
        "Connection": "close",
    }

    resolve_payload = {
        "language": channel["language"],
        "region": channel["region"],
        "url": channel["url"],
        "clientVersion": "3.0.2"
    }

    r_resolve = session.post(RESOLVE_URL, json=resolve_payload, headers=resolve_headers)

    if r_resolve.status_code == 403:
        sig = refresh_addon_sig_if_needed(force=True)
        resolve_headers["mediahubmx-signature"] = sig
        r_resolve = session.post(RESOLVE_URL, json=resolve_payload, headers=resolve_headers)

    r_resolve.raise_for_status()
    result = decode_response(r_resolve)

    if result:
        return Response(status=302, headers={"Location": result[0]["url"]})

    abort(404)

@app.route("/playlist.m3u")
def playlist():
    local_ip = get_local_ip()
    m3u = "#EXTM3U\n"
    for item in all_filtered_items:
        m3u += (
            f'#EXTINF:-1 tvg-id="{item["id"]}" '
            f'tvg-name="{item["name"]}" '
            f'tvg-logo="{item["logo"]}" '
            f'group-title="{item["group"]} ({item["region"]})",{item["name"]}\n'
        )
        m3u += f"http://{local_ip}:{PORT}/vavoo?channel={item['id']}\n"

    return Response(m3u, mimetype="application/x-mpegURL")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)
 
Zuletzt bearbeitet:
Warum willst du das Einbauen wenn es schon drinnen ist?
Hallo,
so wie es aussieht, es ist bei Termux für Android nicht drinnen!
Deswegen ist es nach ca. 10 Min. auch Schluss.
Dazu gibt's auch keine Beschreibung für "normale" Anwender. Wie das schon der janni1 geschrieben hat, ...Aber um ein bischen Python wirst du nicht drumherum kommen...
Ohne eine Hilfestellung, für die Ergänzung des Intervals für die Signierungskeys komme ich alleine mit meinen Kentnissen nicht weiter.
Trotzdem Danke.
 
Lässt sich nicht installieren, ob nur de oder das andere

install-vavoo-e2.sh: line 13: cd: $'/home\r': No such file or directory
: No such file or directory
install-vavoo-e2.sh: line 15: $'\r': command not found
'leep: invalid number '10
: No such file or directory


@ Osprey: Kannst du einen Einzeiler daraus machen??
 
Zuletzt bearbeitet:
Du musst das Script im Unix Format speichern! Nicht Windows!
 
Aus der zip bekommt man 3 Dateien und die unverändert per ftp oder scp nach /home auf den Receiver bringen.
 
Auf meiner DM 900 mit Newnigma sieht das dann so aus:


[/
root@dm900:~$ cd /home
root@dm900:/home$ bash install-vavoo-e2.sh
install-vavoo-e2.sh: line 2: $'\r': command not found
Installiere Vavoo-E2
install-vavoo-e2.sh: line 4: $'\r': command not found
E: The update command takes no arguments
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package python3
E: Unable to locate package python3-trio
E: Unable to locate package python3-xmlrpc
E: Unable to locate package python3-isodate
E: Unable to locate package python3-pycountry
E: Unable to locate package python3-pycryptodomex
--2026-01-16 12:18:46--
Resolving bootstrap.pypa.io... 2a04:4e42::175, 2a04:4e42:200::175, 2a04:4e42:400::175, ...
Connecting to bootstrap.pypa.io|2a04:4e42::175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2182415 (2,1M) [text/x-python]
Saving to: ‘/tmp/get-pip.py\r’

100%[===================>] 2,08M 11,1MB/s in 0,2s

2026-01-16 12:18:47 (11,1 MB/s) - ‘/tmp/get-pip.py\r’ saved [2182415/2182415]

install-vavoo-e2.sh: line 9: python3: command not found
install-vavoo-e2.sh: line 10: $'wait\r': command not found
install-vavoo-e2.sh: line 11: pip3: command not found
install-vavoo-e2.sh: line 12: pip3: command not found
: No such file or directory3: cd: /home
: No such file or directory
install-vavoo-e2.sh: line 15: $'\r': command not found
'leep: invalid number '10
install-vavoo-e2.sh: line 17: ./m3u2e2.sh: No such file or directory
: No such file or directory
: numeric argument required9: exit: 0

]
 
nehmt einen RaspberryPi oder ähnliches und streamt davon auf den Receiver wenn es kein python3 bei euch gibt.
Das Script mit verschiedenen Ländern läuft jetzt endlich, aber es dauert sehr lange bis alles geladen wird.
Code:
root@bre2ze4k:/home# python3 vavoo.py
[+] Lade Katalog für de-DE
[+] Lade Katalog für de-AT
[+] Lade Katalog für de-CH
[+] Lade Katalog für es-ES
[+] Lade Katalog für fr-FR
[+] Lade Katalog für it-IT
[+] Lade Katalog für nl-NL
[+] Lade Katalog für nl-BE
[+] Lade Katalog für en-UK
[+] Lade Katalog für en-US
[+] Lade Katalog für en-CA
[+] Lade Katalog für pl-PL
[+] Lade Katalog für cs-CZ
[+] Lade Katalog für hu-HU
[+] Lade Katalog für tr-TR
[+] Lade Katalog für pt-PT
[+] Lade Katalog für ro-RO
[+] Lade Katalog für sv-SE
[+] Lade Katalog für no-NO
[+] Lade Katalog für da-DK
[+] Lade Katalog für fi-FI
[✓] Gesamtanzahl IPTV-Sender: 96152
[✓] vavoo_playlist.m3u written
 * Serving Flask app 'vavoo'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:4323
 * Running on http://192.168.1.39:4323
Press CTRL+C to quit

Tip, lösche die Länder aus dem Script die du nicht brauchst dann werden es weniger als 96152
 
Zuletzt bearbeitet:
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…