Monday 28 January 2008 à 10:04
CITATION(paco85 @ dimanche 14 octobre 2007 à 23:10)

fais nous un logiciel qui permettrait de recevoir les chaines ,claire ,de la TNT qui sont vehiculés sur le sat AB3
(qui fournit les chaines aux reemetteurs terrestres de la TNT,et oui toute la TNT passe par le satelite)
avec un encapsulage "NEWTECH" donc non recevable avec les cartes sat (sauf le repeteur R1 sur lequel sont vehicules en QPSK donc recevables FR2,FR3,FR3,ARTE)
la solution ,que je trouve parfaitement idiote mais tres certainement commerciale ,trouvée par nos instances étant de les faire transiter sur Astra par l'intermediaire d'un nouveau service de canal+ qui s'appelle TNTSAT et pour lequel il faut moyennant finance se procurer un demodulateur et une carte speciale en viaccess 3
ce qui fait que la TNT est donc aujourd'hui presente sur 2 satellite,pourquoi faire moins quand on peut faire plus
si cela te tente ,mais sans vouloir te decourager,je pense que le pb est plus hard que soft
Voici le programme, à compiler sous Linux :
CODE
<dl class="codebox"><dd><code>#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[i] == 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[s];
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;
}</code></dd><dd>
</dd><dd>
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 -
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).