Demuxing DVB-S signal (1 Viewer)

DjeC64

MP Donator
  • Premium Supporter
  • August 29, 2007
    176
    16
    Gent
    Home Country
    Belgium Belgium
    To our dearest skilled developers, ok everyone see that I am going to ask something.
    On sat AB3, the DVB-T signal is transmitted under "Newtech" encapsulation. Someone recently discover that actually the signal is not scrambled but is a multiplex of 2 multiplex with TNT channels.
    So this guy wrote a script to demux the multiplex, and successfully got all TNT (French free DVB-T channels) working.
    Would it be doable to implement such feature as a plugin of TVServer by example?
    Thanks.

    More here:
    TVNT.net - Le forum de la TNT :: Voir le sujet - TNT newtec sur AB3 11636V

    I reproduce the post of the guy. the code is bellow:

    Recevoir toute la TNT gratuite sur AB3, c'est possible !

    Messagepar archi le Vendredi 11 Janvier 2008 18:20
    Je ne sais pas si les infos ci-dessous sont déjà connues ou pas, mais je les donne au cas où ça intéresserait quelqu'un.

    J'ai remarqué que sur la page Atlantic Bird 3 (5.0W) - fréquences - KingOfSat figurent toutes les chaînes de la TNT. Si j'ai bien compris, ces signaux sont destinés aux réemetteurs terrestres.
    Trois transpondeurs sont utilisés, 11590V, 11636V et 11139V.

    Le transpondeur 11590V est émis en DVB, tous les démodulateurs peuvent le recevoir.
    Les autres transpondeurs contiennent un multiplex de deux multiplex TNT. Il faut commencer par séparer les deux multiplex TNT.
    Or, le multiplexage est réalisé trés simplement, il suffit de jeter un coup d'oeil aux données pour le comprendre.

    J'ai donc écrit un petit programme de démultiplexage, tntdemux, que voici :
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>

    int main(int argc, char *argv[])
    {
    unsigned char buf1[376];
    unsigned char buf2[567];
    int n, i, j, k, m, s, r;
    int sync=0;

    unsigned char code=0x08; // Numéro du multiplex à extraire 1->0x08, 2->0x10
    if (argc == 2 && argv[1][0] == '2')
    code = 0x10;

    m = 0;
    n = read (0, buf1, 376);
    r = n;
    while (n > 0)
    {
    for (i=0; i<188; i++)
    {
    if (buf1 == 0x47 && buf1[i+188] == 0x47)
    {
    // Synchro 0x47
    memcpy (&buf2[m], &buf1[i+1], 187);
    i+=188;
    m+=187;
    if (m >= 381)
    {
    for (k=0; k<190; k++)
    {
    if (!sync)
    {
    if (buf2[k] == 0xB8 && (buf2[k+1] == 0x08 || buf2[k+1] == 0x10 || buf2[k+1] == 0x00) &&
    (buf2[k+191] == 0x08 || buf2[k+191] == 0x10 || buf2[k+191] == 0x00))
    sync=1;
    }
    else
    {
    if (buf2[k] == 0x00 || buf2[k] == 0x08 || buf2[k] == 0x10)
    {
    if (buf2[k+190] == 0x08 || buf2[k+190] == 0x10 || buf2[k+190] == 0x00)
    {
    if (buf2[k] == code)
    {
    buf2[k+2] = 0x47;
    write (1, &buf2[k+2], 188);
    }
    k+=190;
    break;
    }
    else if (buf2[k+190] == 0xB8 &&
    (buf2[k+191] == 0x10 || buf2[k+191] == 0x08 || buf2[k+191] == 0x00))
    {
    if (buf2[k] == code)
    {
    buf2[k+2] = 0x47;
    write (1, &buf2[k+2], 188);
    }
    k+=191;
    break;
    }
    }
    }
    }
    for (s=k, j=0; s<m; s++, j++)
    buf2[j]=buf2;
    m -= k;
    }
    break;
    }
    }
    j=0;
    n=376-i;
    while (i<376)
    buf1[j++]=buf1[i++];
    n = read (0, &buf1[376-n], n);
    r+=n;
    }
    return EXIT_SUCCESS;
    }
    Enregistrer le programme dans le fichier tntdemux.c, et le compiler :
    gcc -o tntdemux tntdemux.c

    Le programme reçoit le flux sur stdin et le renvoie sur stdout.

    Usage:
    "tntdemux 1" pour sélectionner le premier multiplex
    "tntdemux 2" pour sélectionner le deuxième multiplex.

    Pour le tester simplement, j'ai utilisé dvbstream et mplayer. Voici les commandes à utiliser pour chaque chaîne :

    Direct 8 :
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 1 | mplayer -vid 160 -aid 80 -

    BFM TV :
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 1 | mplayer -vid 162 -aid 88 -

    I-Tele :
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 1 | mplayer -vid 163 -aid 92 -

    Virgin 17:
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 1 | mplayer -vid 164 -aid 96 -

    Gulli :
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 1 | mplayer -vid 165 -aid 100 -

    France 4:
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 1 | mplayer -vid 166 -aid 104 -

    Canal+ (plages en clair):
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 2 | mplayer -vid 170 -aid 120 -

    TPS Star (plages en clair):
    dvbstream -f 11636 -p V -s 30405 -o 8192 | ./tntdemux 2 | mplayer -vid 165 -aid 100 -

    Remarque: Je n'ai pu tester que le transpondeur 11636V, car le transpondeur 11139V utilise la modulation 8PSK et non QPSK. Je pense qu'on doit pouvoir le recevoir avec une carte DVB-S2 (si quelqu'un peut tester, qu'il poste le résultat sur ce forum).

    Ce programme n'a été écrit que pour montrer la faisabilité du démultiplexage. Si on veut aller plus loin, il faudra intégrer ce démultiplexeur dans le driver Linux-DVB, et patcher VDR pour bénéficier confortablement de toute la TNT gratuite. Je laisse faire les spécialistes (Je suis dans une zone couverte par la TNT, je n'ai écrit ce programme que par curiosité).

    P.S. : Je crois que les cartes "Full Featured" (WinTV-Nova) ne peuvent pas fournir le flux complet (PID 8192), il faut une carte "Budget".
    _________________
    xsat410, carte PC DVB-S,...
     

    Users who are viewing this thread

    Top Bottom