Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Stalker / Xtream Proxy

Welche Portale nutzt ihr, max 2 auswählbar

  • Portal1

    Stimmen: 12 24,0%
  • Portal2

    Stimmen: 2 4,0%
  • Portal3

    Stimmen: 5 10,0%
  • Portal4

    Stimmen: 26 52,0%
  • 8080

    Stimmen: 12 24,0%
  • 9090

    Stimmen: 15 30,0%
  • Mutant

    Stimmen: 17 34,0%

  • Umfrageteilnehmer
    50
  • Umfrage geschlossen .
Mal kurz erklärt warum. Man richtet einen Zugang zb bei den Eltern ein, mit einer MAC die man evtl mehrere Tage getestet hat. Das ganze läuft ein paar Tage auch bei den Eltern stabil. Nun wird leider genau diese MAC iwo veröffentlicht oder der wirkliche Besitzer schaut selber öfters und schon geht das macpingpong mit den 30 sekunden stops los. Also wieder zu den Eltern und die nächste gute MAC einpflegen usw...
Wenn ich nun 3000 MACs im Server hinterlegt haben und die Zugangsdaten bei den Eltern einpflege ist die wahrscheinlichkeit eines macpingpongs deutlich geringer, ganz ausschließen kann man es nicht. Man könnte auch nur immer eine gute MAC hinterlegen und diese bei bedarf austauschen, dann spart man sich die fahrt zu den Eltern, was nicht heißen soll das man sie weniger besuchen sollte...
Wenn man dann noch mit der xtreamapi arbeitet, was xtreammulti aktuell noch nicht macht, kann man beim einschalten prüfen ob die verwendete line aktuell besetzt ist und nimmt ein 100% freie, damit ist das pingpong nocheinmal reduziert, aber immer noch möglich.... Auch lines von Payservern können geleakt werden!
Wer garkeinen Stress haben will nimmt ein original Abo, ganz einfach... da stresst dann eher die Hardware oder die APP
 
Zuletzt bearbeitet:
Prüfung ob Mac frei, geht doch auch bei Stalker?
Auf 401 oder "tiefer" in der api, bevor der link rausgeht.

Javascript:
<?php
$channel = isset($_GET['channel']) ? $_GET['channel'] : (isset($argv[1]) ? $argv[1] : null);
$clientId = $_SERVER['REMOTE_ADDR'];
if (!$channel || !$clientId) {
    exit;
}

$macFile = "/volume1/stalker/89/89mac.txt";
$clientMacFile = "/volume1/stalker/89/client_macs.json";
$macAddresses = file($macFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!$macAddresses) {
    exit;
}

if (!file_exists($clientMacFile)) {
    file_put_contents($clientMacFile, json_encode([], JSON_PRETTY_PRINT));
}
$clientMacs = json_decode(file_get_contents($clientMacFile), true);
$usedMacs = array_values($clientMacs);
$availableMacs = array_diff($macAddresses, $usedMacs);

function generateRandomToken($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomToken = '';
    for ($i = 0; $i < $length; $i++) {
        $randomToken .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomToken;
}

$url = "http://89.45.13.220:8080";

if (substr($channel, -4) === '.mkv') {
    $selectedMac = $availableMacs[array_rand($availableMacs)];
    $token = generateRandomToken();
    $constructedUrl = "$url/play/movie.php?mac=$selectedMac&stream=$channel&play_token=$token&type=movie";
    header('Location: ' . $constructedUrl);
    exit;
}

function isChannelAvailableForMac($mac, $channel) {
    $macFolder = "/volume1/stalker/89/data/" . str_replace(':', '_', $mac);
    $liveStreamsFile = "$macFolder/live_streams.txt";
    if (!file_exists($liveStreamsFile)) {
        return false;
    }
    $streams = file($liveStreamsFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    return in_array($channel, $streams);
}

function getStreamingLink($url, $channel, $selectedMac, $token) {
    $encodedChannel = urlencode("http://localhost/ch/{$channel}_");
    $opts = [
        "http" => [
            "header" => "User-Agent: Mozilla/5.0"
        ]
    ];
    $context = stream_context_create($opts);
    $response = @file_get_contents("$url/portal.php?type=itv&action=create_link&cmd=$encodedChannel&JsHttpRequest=1-xml&mac=$selectedMac&token=$token", false, $context);
    $http_response_header = $http_response_header ?? [];
    $error_codes = [401, 405, 456];
    foreach ($http_response_header as $header) {
        foreach ($error_codes as $code) {
            if (strpos($header, (string)$code) !== false) {
                return ['error' => true, 'streamingLink' => null];
            }
        }
    }
    if ($response !== false) {
        $response = json_decode($response, true);
        if (isset($response['js']['cmd'])) {
            $urlPart = str_replace('\/', '/', $response['js']['cmd']);
            $streamingLink = substr($urlPart, strpos($urlPart, 'http://'));
            return ['error' => false, 'streamingLink' => $streamingLink];
        }
    }
    return ['error' => true, 'streamingLink' => null];
}

$selectedMac = null;
$availableMacs = array_values($availableMacs);
shuffle($availableMacs);

foreach ($availableMacs as $mac) {
    if (isChannelAvailableForMac($mac, $channel)) {
        $selectedMac = $mac;
        break;
    }
}

if (!$selectedMac) {
    exit;
}
$clientMacs[$clientId] = $selectedMac;
file_put_contents($clientMacFile, json_encode($clientMacs, JSON_PRETTY_PRINT));

$streamingLink = null;
$selectedMac = trim($selectedMac);
$response = @file_get_contents("$url/portal.php?type=stb&action=handshake&JsHttpRequest=1-xml&mac=$selectedMac");
if ($response !== false) {
    $response = json_decode($response, true);
    $token = $response['js']['token'] ?? null;
    if ($token) {
        do {
            $result = getStreamingLink($url, $channel, $selectedMac, $token);
            if (!$result['error']) {
                $streamingLink = $result['streamingLink'];
            } else {
                unset($clientMacs[$clientId]);
                file_put_contents($clientMacFile, json_encode($clientMacs, JSON_PRETTY_PRINT));
                header('Location: ' . $_SERVER['PHP_SELF'] . '?channel=' . $channel);
                exit;
            }
            $responseHeaders = @get_headers($streamingLink, 1);
        } while (empty($responseHeaders['Location']) && !empty($availableMacs));

        if (empty($responseHeaders['Location'])) {
            unset($clientMacs[$clientId]);
            file_put_contents($clientMacFile, json_encode($clientMacs, JSON_PRETTY_PRINT));
            header('Location: ' . $_SERVER['PHP_SELF'] . '?channel=' . $channel);
            exit;
        }
    }
}
if (!$streamingLink) {
    unset($clientMacs[$clientId]);
    file_put_contents($clientMacFile, json_encode($clientMacs, JSON_PRETTY_PRINT));
    header('Location: ' . $_SERVER['PHP_SELF'] . '?channel=' . $channel);
    exit;
}
header('Location: ' . $streamingLink);
?>
 
Zuletzt bearbeitet:
ne bei stalker ohne xtreamapi ist keine connectionprüfung möglich bzw ich wüsste nicht wie
 
Zuletzt bearbeitet:
Also ich mache das so: Prüfung ob die Mac überhaupt den Channel Request kann (die Mac den Channel hinterlegt hat), dann Prüfung ob die Mac gerade 401 ("besetzt"), 405, 456 ist und ob ein anderer eigener Client zufälligerweise die Mac gerade nutzt und erst dann geht der streaming Link zum Client raus.
 
Wenn man dann noch mit der xtreamapi arbeitet,
Ist das im Prinzip so, wie wenn ich bei einer m3u statt get Player_api schreibe?
zb
Also vergleich aktive Conns mit Max Conns.

Laienhaft ausgedrückt.
 
Keine Ahnung warum ihr euch so aufregt.

Liegt evtl. daran, dass Du Fragen stellst oder Argumente einwirfst, die eine Seite, oder mehrere Seiten vorher quasi beantwortet wurden!
Ich benötige das hier auch nicht. Einfach, weil ich keinen Bedarf dafür habe. Ich muss niemanden versorgen und bin mit ein paar handvoll gefundenen, gescannten MACs als Backup vom Backup auch glücklich, die ich bei Bedarf schnell händisch wechseln könnte, so wie Du.

Finde das hier aber interessant, spannend und sehr lehrreich. (y)
 
Also ich kann euch sagen, im Docker Container ist die Performance miserable und ich habe diese auch nicht verbessern können. Habe das Script nun in einer VM in Proxmox laufen und das funktioniert im lokalen Netzwerk optimal.

Ich schaffe es aber leider nicht, von außerhalb des lokalen Netzwerks darauf zuzugreifen. Meine DynDNS habe ich beim Script eingegeben, auch mit http am Anfang. Meine Netzwerkkonfiguration: Port 80 und 443 freigegeben auf -> Nginx Proxy Manager -> dyndns auf IP von Script gesetzt

Leider lädt er nur die Playlist, spielt dann aber nicht ab! Der Server ansich ist von außen du erreichen.

Hat da jemand erfahrungen?

Danke

Lg
 
für was brauchst denn den Nginx Proxy Manager unter Proxmox? gib den Port direkt auf die VM frei und versuchs mit deiner öffentlichen ip
 
Zuletzt bearbeitet:
für was brauchst denn den Nginx Proxy Manager unter Proxmox? gib den Port direkt auf die VM frei
Ich habe den Proxy Manager auf meinem anderen Server da ich einige Apps (Sonarr, Radarr, Nextcloud uvm) laufen habe, welche von außen erreichbar sein müssen, die alle auf eine Sub-Domain umleiten und ich daher keinen Port 80 mehr auf meine Proxmox Instanz freigeben kann.

Daher brauche ich einen Weg wie ich dein Script nach außen via. dem Proxy Manager zum laufen bringen kann.
 
und genau da liegt der Hund begraben. Die redirect einträge werden genau so erwartet, die kannst nicht einfach iwie umbiegen. Wenn dann musst die ganzen scripte auf Port umstellen



Code:
nano /etc/apache2/ports.conf

Listen 8080 # eintragen



nano /etc/apache2/apache2.conf

Include ports.conf

<VirtualHost *:8080>

    ServerName example.com

    DocumentRoot /var/www/html/8080

    CustomLog /var/log/apache2/access_log_8080 combined

    ErrorLog /var/log/apache2/error_log_8080

</VirtualHost>

service apache2 restart

dann bei menu.sh bei live=8080 und erstellen lassen. Sollte dann über Port 8080 erreichbar sein, habs aber nicht selber getestet. Es muss für jedes Portal eine eigener Port in Apache konfiguriert werden!!

Edit:
eben getestet und wird bei mir über 8080 hell im televizo. Damit gehen dann auch alle Player vermute ich. EPG fehlt noch
 

Anhänge

Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet:
Code:
itv link : 192.168.1.185/optimus/live/test/test/live.m3u
xtream login: 192.168.1.185/optimus
user=test pw=test
Herzlichen Dank für deine Arbeit @clever999 auch an dich @salidos für deine Tipps.

Ich habe alles genau wie beschrieben installiert, zumindest bin ich der Meinung das getan zu haben.

Portal ist wie folgt anglegt:
Code:
Details for portal: optimus
host="192.168.1.185"
name="optimus"
live="optimus"
MAC="00:1A:xx:xx:xx:xx"
URL="http://optimus-tv.org:8080"
user="test"
pw="test"

itv link : 192.168.1.185/optimus/live/test/test/live.m3u
series link : 192.168.1.185/optimus/live/test/test/series.m3u
vod link : 192.168.1.185/optimus/live/test/test/vod.m3u
xtream login: 192.168.1.185/optimus
user=test pw=test

Bekomme dann folgende Links:
Code:
itv link : 192.168.1.185/optimus/live/test/test/live.m3u
xtream login: 192.168.1.185/optimus
user=test pw=test

Die live.m3u lässt sich runterladen. Bei Tivimate, klappt der Login nicht. Hier heißt es immer Anmeldedaten falsch.

Wenn ich versuche den 1.ts Stream aus der M3U zu laden kommt folgender Redirect im Browser
Code:
http://192.168.1.185/var/www/html/optimus/live/test/test/192.168.1.185/optimus/itv.php?cmd=http://localhost/ch/489280_
Ich finde meinen Fehler nicht. Apache2 Config ist nach Vorgabe gemacht. Script (cd /home/xtreammulti && ./menu.sh) wird unter root auf einem Ubuntu 22.04.4 LTS ausgeführt.

Bin über jeden Tipp dankbar.
 
lauft den die m3u unter /home/xtreammulti/optimus?

vermutlich klappt der redirect bei dir nicht
sollte so kommen
 
@clever999 Was meinst du mit
lauft den die m3u unter /home/xtreammulti/optimus?

Dateien sind auf jeden Fall vorhanden.

Bash:
ls /home/xtreammulti/optimus
categoryliveselect    categoryseriesselectids  categoryvodselectids  livecategory  optimusmac.txt        optimusvodmac.txt  vodcategory
categoryseriesselect  categoryvodselect        itvphp.sh             live.m3u      optimusseriesmac.txt  seriescategory

Über VLC mit dem Link " " funktioniert der Stream.

Scheint also eher ein Apache2 Problem zu sein. Habe die Standard Konfig von Apache2 allerdings nur um den Eintrag von #1 geändert.
 
Zurück
Oben