-
Notifications
You must be signed in to change notification settings - Fork 133
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Import initial du projet mumudvb ( multi multicast dvb) Projet dérivé de dvbstream utile pour diffuser des flux dvb sur un réseau git-archimport-id: dubost@crans.ens-cachan.fr--2005-braice/mumudvb--mainline--1.0--base-0
- Loading branch information
Dubost Brice
committed
Apr 24, 2005
0 parents
commit 5988fbe
Showing
19 changed files
with
2,992 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
CC=gcc | ||
CFLAGS = -g -Wall -O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE | ||
OBJS=mumudvb ts_pids | ||
|
||
INCS=-I ../DVB/include -I /usr/src/linux/include | ||
|
||
ifdef UK | ||
CFLAGS += -DUK | ||
endif | ||
|
||
ifdef FINLAND | ||
CFLAGS += -DFINLAND | ||
endif | ||
|
||
ifdef FINLAND2 | ||
CFLAGS += -DFINLAND2 | ||
endif | ||
|
||
all: $(OBJS) | ||
|
||
mumudvb: mumudvb.c tune.o udp.o dvb.o | ||
$(CC) $(INCS) $(CFLAGS) -o mumudvb mumudvb.c tune.o udp.o dvb.o | ||
|
||
tune.o: tune.c tune.h dvb_defaults.h | ||
$(CC) $(INCS) $(CFLAGS) -c -o tune.o tune.c | ||
|
||
udp.o: udp.c udp.h | ||
$(CC) $(INCS) $(CFLAGS) -c -o udp.o udp.c | ||
|
||
dvb.o: dvb.c dvb.h | ||
$(CC) $(INCS) $(CFLAGS) -c -o dvb.o dvb.c | ||
|
||
ts_pids: ts_pids.c | ||
$(CC) $(INCS) $(CFLAGS) -o ts_pids ts_pids.c | ||
|
||
clean: | ||
rm -f *.o *~ $(OBJS) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
mumudvb - README | ||
|
||
Description : | ||
mumudvb est une modification de dvbstream pour le cr@ns (http://www.crans.org) pour lui ajouter des fonctionnalit�s qui nous manquaient, la quantit� de modifications �tant importante nous avons d�cid� de redistribuer le projet (dans l'esprit du logiciel libre). | ||
|
||
Auteur principal: | ||
Brice DUBOST (gnu-braice@crans.ens-cachan.fr) | ||
|
||
Contributeur: | ||
Manuel SABBAN (manu@crans.ens-cachan.fr) (impl�mentation du getopt) | ||
|
||
Remerciements: | ||
Dave CHAPMAN pour avoir �crit dvbstream. | ||
|
||
Nouvelles fonctionnalit�s par rapport � la version 0.6 de dvbstream: | ||
-Pouvoir afficher la puissance du signal pendant l'utilisation | ||
-Avoir une liste mise a jour en temps r�el des cha�nes diffus�es | ||
-Avoir un programme qui tourne en tache de fond (en cas d'ex�cution en tache de fond les logs sont �crit via syslog) | ||
-Ce programme devait pouvoir �crire un fichier contenant son pid | ||
-Pouvoir utiliser des fichiers de configuration | ||
-le programme est capable de se tuer tout seul si la carte ne diffuse plus rien au bout d'un temps param�trable | ||
-le programme arr�te de tenter d'accorder la carte au bout d'un temps param�trable | ||
-Surtout pouvoir diffuser plusieurs cha�nes d'un m�me transpondeur sur des ips diff�rentes | ||
-Support fonctionnel du DVB-T | ||
|
||
Ce programme n'est pas un patch pour dvbstream � cause de certaines restrictions: | ||
-obligation d'utiliser un fichier de configuration | ||
-param�tres en ligne de commande incompatibles | ||
-les paquets MPEG2 sont envoy�s sans modification sur le r�seau au lieu d'�tre envoy�s avec les en-t�tes RTP (pour une plus grande compatibilit�) | ||
-l'option permettant d'avoir du MPEG2-ps en sortie a �t� retir�e | ||
-l'interface telnet a �t� retir�e (elle ne nous �tait pas utile et l'adapter aurait �t� assez long) | ||
|
||
D'autres programmes sont joint dans les sources de mumudvb: | ||
-relay : permet de relayer un flux (r�cup�rer un flux en multicast et l'unicaster ou l'envoyer vers une autre ip de multicast) il peut �tre utiliser pour traverser des routeurs ou des firewalls interdisant le multicast | ||
-dumpudp : permet de r�cup�rer le flux et de l'envoyer sur la sortie standard (utile pour les programmes n'ayant pas de greffon d'entr�e en udp comme mplayer ou pour enregistrer le flux) | ||
-dumpudp_limited : idem que dumpudp mais r�cup�re un nombre limit� de paquets (utilis� pour g�n�rer des vignettes (voir les scripts d'exemple joints)) | ||
-recup_sap : mini client sap, r�cup�re les annonces sap sur le r�seau pendant 60 secondes et les envoie sur la sortie standard (non tri�es) | ||
-Des scripts d'exemple d'utilisation de mumudvb sont inclus dans le r�pertoire scripts, ils sont �crits en python, mais aucune documentation n'est fournie, pour savoir ce qu'ils font, il faut lire le code source, nous r�pondront aux questions concernant ces scripts que si on a le temps... | ||
|
||
Installation : | ||
|
||
Pour installer mumudvb taper: | ||
|
||
make | ||
make install (en root) | ||
|
||
C'est tout! | ||
|
||
Si la compilation ne marche pas ne pas oublier de changer la ligne include du Makefile. | ||
|
||
|
||
Utilisation : | ||
|
||
Pour conna�tre la syntaxe des fichiers de configuration, se r�f�rer au fichier README_CONF | ||
|
||
Syntaxe : | ||
mumudvb [options] -c fichier_de_configuration | ||
mumudvb [options] --config fichier_de_configuration | ||
Les diff�rents options possible sont : | ||
|
||
-d, --debug | ||
ne se lance pas en d�mon et affiche les messages sur la sortie standard et d'erreur | ||
|
||
-s, --signal | ||
Affiche la force du signal pendant que la carte s'accorde et une fois que la carte est accord�, toutes les 5 secondes | ||
|
||
-h, --help | ||
affiche l'aide | ||
|
||
Signaux : (voir la page de man de kill) | ||
SIGUSR1 : change l'affichage de la puissance une fois la carte tun�e, s'il �tait absent il devient pr�sent et inversement | ||
|
||
D�tails techniques (en vrac): | ||
-mumudvb permet de recevoir un signal satellite (DVB-s) ou Terrestre (DVB-t), il ne g�re pas les DisEq (si il y a un besoin ce ne devrait pas �tre trop dur � impl�menter) | ||
|
||
-Le pid 0 est envoy� automatiquement avec toutes les cha�nes, il permet au client compatible de distinguer les diff�rents flux pr�sents (indispensable pour vlc, incapable d'identifier par lui m�me les diff�rents flux) | ||
|
||
-Pour Vlc, il faut indiquer le pid PMT en plus des pids audio et vid�o (sinon, il est aussi incapable de voir ce qui est pr�sent dans le flux) | ||
|
||
-Performances: mumudvb consomme 15% du processeur d'un celeron 2.6GHz avec une carte Hauppauge et un noyau Linux 2.6.9 pour un transpondeur plein (mumudvb a �t� d�velopp� � l'origine dans ce but, apr�s des tests avec VLC qui offrait de piteuses performances, une instabilit� chronique et avec des fonctionnalit�s manquantes pour notre utilisation) | ||
|
||
-A �viter : les chipset via non r�cents ou nforce, ces chipset sont des chipsets grand public, incapable de g�rer correctement une grande quantit� de donn�e sur le bus PCI | ||
|
||
-mumudvb est capable de diffuser de la TNT (t�l�vision num�rique terrestre) | ||
|
||
-mumudvb n'est pas capable de diffuser du dvb-c | ||
|
||
-Lors de l'ex�cution le programme �crit la liste des cha�nes diffus�es dans le fichier /var/run/tv/chaines_diffusees_carte%d le %d est remplac� par le num�ro de carte, le chemin n'est pas param�trable mais cela est facile � impl�menter, envoyez moi un mail si vous en avez besoin. Ce fichier contient la liste des cha�nes diffus�es (actualis�e toute les 5 secondes) de la forme suivante (pour chaque ligne) : "nom:ip:port" | ||
|
||
-mumudvb supporte au maximum 6 cartes (� l'heure ou j'�cris (04/2005), les possibilit�s sont d'utiliser un noyau 2.4.* avec devfs :-( ou d'utiliser un noyau > 2.6.11 avec udev compil� statiquement avec klibc en attendant la mise a jour de la glibc ), cette limite peut �tre augment�e facilement si quelqu'un a une carte avec plus de 6 slots PCI (on est int�ress� dans ce cas) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
README pour le fichier de configuration de mumudvb | ||
|
||
mumudvb utilise obligatoirement un fichier de configuration pour lui indiquer les diff�rents param�tres de r�ception et la r�partition des pids sur les ips de multicast (ces ips peuvent aussi bien �tre de l'unicast). Vous trouverez un exemple dans le fichier conf.example joint aux sources de mumudvb. | ||
|
||
mumudvb est insensible � l'ordre des param�tres sauf pour les cha�nes o� les pids doivent �tre mis apr�s l'ip et le port | ||
|
||
Des commentaires peuvent �tres fait n'importe ou dans le fichier de configuration, ce sont les lignes qui commencent par un # | ||
|
||
Tous les param�tres sont de la forme suivante : nom=valeur | ||
|
||
------------------------------------------------------------------------- | ||
|Liste des param�tres et leur description ( (f) : param�tre facultatif )| | ||
------------------------------------------------------------------------- | ||
|Nom : |valeur: | | ||
------------------------------------------------------------------------- | ||
|freq |la fr�quence du transpondeur en MHz | ||
|pol |la polarisation (un caract�re) v ou h (insensible � la casse) | ||
|srate |le srate du transpondeur | ||
|card (f) |le num�ro de la carte (d�faut : 0) | ||
|timeout_accord (f) |temps que l'on laisse � la carte pour s'accorder sur la fr�quence (en secondes) (d�faut : 300 (5min)) | ||
|timeout_no_diff (f) |si le programme ne diffuse aucune chaise, il se tuera au bout de ce temps (en secondes) (d�faut : 900 (15min)) | ||
| Pour la TNT | | ||
|qam |la modulation en quadrature, valeurs possibles : qpsk,16,32,64,128,256,auto | ||
|trans_mode |le mode de transmission, valeurs possibles : 2k,8k,auto | ||
|bandwidth |la largeur de bande, valeurs possibles : 8MHz,7MHz,6MHz,auto | ||
|guardinterval |l'intervalle de garde, valeurs possibles : 1/32,1/16,1/8,1/4,auto | ||
|coderate |le taux de code, valeurs possibles : none,1/2,2/3,3/4,4/5,5/6,6/7,7/8,8/9,auto | ||
| | ||
-------------------------------------------------------------------------- | ||
|Pour chaque chaise | ||
|ip |l'ip de multicast sur laquelle cette chaise sera diffus�e | ||
|port |le port | ||
|pids |une liste de pids s�par�s par des espaces (en nombre quelconque, le pid 0 (pid PAT) �tant automatiquement diffus� pour chacune des cha�nes) | ||
|name (f) |le nom donn� � la cha�ne dans les fichiers qui indique les cha�nes diffus�es actuellement (utilis� par les scripts en exemple pour g�n�rer les annonces SAP), il est conseill� pour le moment de remplacer les espaces par des "_" dans le nom de la cha�ne | ||
-------------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#La frequence | ||
freq=12476 | ||
#Polarisation | ||
pol=h | ||
#Srate | ||
srate=27500 | ||
#Le numero de la carte a utiliser | ||
card=0 | ||
#Le temps d'attente pour que la carte accorde | ||
timeout_accord=20 | ||
#La liste des chaines | ||
#Le nombre de pid est quelconque (inferieur a 16) | ||
ip=239.200.200.200 | ||
port=1234 | ||
name=fra_autres__EBS | ||
pids=101 201 202 203 204 205 206 207 208 209 210 211 212 100 | ||
ip=239.200.200.201 | ||
port=1234 | ||
name=fra_X_Stream | ||
pids=551 552 550 | ||
ip=239.200.200.202 | ||
port=1234 | ||
name=ara_2M | ||
pids=601 602 257 | ||
ip=239.200.200.203 | ||
port=1234 | ||
name=kur_CTV_Kurdistan | ||
pids=700 701 702 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
/* | ||
dvb.h dvb part (except tune) of mumudvb | ||
mumudvb - UDP-ize a DVB transport stream. | ||
(C) Dave Chapman <dave@dchapman.com> 2001, 2002. | ||
Modified By Brice DUBOST | ||
* | ||
The latest version can be found at http://www.crans.org | ||
Copyright notice: | ||
This program is free software; you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation; either version 2 of the License, or | ||
(at your option) any later version. | ||
This program is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
You should have received a copy of the GNU General Public License | ||
along with this program; if not, write to the Free Software | ||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
*/ | ||
|
||
#include "dvb.h" | ||
|
||
|
||
char *frontenddev[6] = | ||
{ "/dev/dvb/adapter0/frontend0", "/dev/dvb/adapter1/frontend0", | ||
"/dev/dvb/adapter2/frontend0", "/dev/dvb/adapter3/frontend0", | ||
"/dev/dvb/adapter4/frontend0", "/dev/dvb/adapter5/frontend0" | ||
}; | ||
|
||
char *demuxdev[6] = { "/dev/dvb/adapter0/demux0", "/dev/dvb/adapter1/demux0", | ||
"/dev/dvb/adapter2/demux0", "/dev/dvb/adapter3/demux0", | ||
"/dev/dvb/adapter4/demux0", "/dev/dvb/adapter5/demux0" | ||
}; | ||
|
||
char *dvrdev[6] = { "/dev/dvb/adapter0/dvr0", "/dev/dvb/adapter1/dvr0", | ||
"/dev/dvb/adapter2/dvr0", "/dev/dvb/adapter3/dvr0", | ||
"/dev/dvb/adapter4/dvr0", "/dev/dvb/adapter5/dvr0" | ||
}; | ||
|
||
|
||
|
||
int | ||
open_fe (int *fd_frontend, int card) | ||
{ | ||
if ((*fd_frontend = open (frontenddev[card], O_RDWR | O_NONBLOCK)) < 0) | ||
{ | ||
perror ("FRONTEND DEVICE: "); | ||
return -1; | ||
} | ||
return 1; | ||
} | ||
|
||
|
||
|
||
void | ||
set_ts_filt (int fd, uint16_t pid, dmx_pes_type_t pestype) | ||
{ | ||
struct dmx_pes_filter_params pesFilterParams; | ||
|
||
fprintf (stderr, "Setting filter for PID %d\n", pid); | ||
pesFilterParams.pid = pid; | ||
pesFilterParams.input = DMX_IN_FRONTEND; | ||
pesFilterParams.output = DMX_OUT_TS_TAP; | ||
pesFilterParams.pes_type = pestype; | ||
pesFilterParams.flags = DMX_IMMEDIATE_START; | ||
|
||
if (ioctl (fd, DMX_SET_PES_FILTER, &pesFilterParams) < 0) | ||
{ | ||
fprintf (stderr, "FILTER %i: ", pid); | ||
perror ("DMX SET PES FILTER"); | ||
} | ||
} | ||
|
||
|
||
void | ||
affiche_puissance (fds_t fds, int no_daemon) | ||
{ | ||
int strength, ber, snr; | ||
strength = ber = snr = 0; | ||
if (ioctl (fds.fd_frontend, FE_READ_BER, &ber) >= 0) | ||
if (ioctl (fds.fd_frontend, FE_READ_SIGNAL_STRENGTH, &strength) >= 0) | ||
if (ioctl (fds.fd_frontend, FE_READ_SNR, &snr) >= 0) | ||
{ | ||
if(!no_daemon) | ||
syslog(LOG_USER, "Bit error rate: %10d Signal strength: %10d SNR: %10d\n", ber,strength,snr); | ||
else | ||
fprintf (stderr, "Bit error rate: %10d Signal strength: %10d SNR: %10d\n", ber,strength,snr); | ||
} | ||
} | ||
|
||
int | ||
create_card_fd(int card, int nb_flux, int *num_pids, fds_t *fds) | ||
{ | ||
|
||
int i=0; | ||
int j=0; | ||
if ((fds->fd_zero = open (demuxdev[card], O_RDWR)) < 0) //fd_zero is the file descriptor usd to get te PMT (the number 0) pid | ||
{ | ||
fprintf (stderr, "FD %i: ", i); | ||
perror ("DEMUX DEVICE: "); | ||
return -1; | ||
} | ||
|
||
for (i = 0; i < nb_flux; i++) | ||
{ | ||
for(j=0;j<num_pids[i];j++) | ||
{ | ||
if ((fds->fd[i][j] = open (demuxdev[card], O_RDWR)) < 0) | ||
{ | ||
fprintf (stderr, "FD %i: ", i); | ||
perror ("DEMUX DEVICE: "); | ||
return -1; | ||
} | ||
} | ||
} | ||
if ((fds->fd_dvr = open (dvrdev[card], O_RDONLY | O_NONBLOCK)) < 0) | ||
{ | ||
perror ("DVR DEVICE: "); | ||
return -1; | ||
} | ||
|
||
|
||
return 0; | ||
|
||
} | ||
|
||
|
||
void | ||
close_card_fd(int card, int nb_flux, int *num_pids, fds_t fds) | ||
{ | ||
int i=0; | ||
int j=0; | ||
|
||
close (fds.fd_zero); | ||
for (i = 0; i < nb_flux; i++) | ||
{ | ||
for(j=0;j<num_pids[i];j++) | ||
close (fds.fd[i][j]); | ||
} | ||
close (fds.fd_dvr); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#ifndef _DVB_H | ||
#define _DVB_H | ||
|
||
#include <syslog.h> | ||
#include <stdio.h> | ||
#include <sys/ioctl.h> | ||
#include <sys/stat.h> | ||
#include <unistd.h> | ||
#include <fcntl.h> | ||
#include <resolv.h> | ||
|
||
|
||
// DVB includes: | ||
#include <linux/dvb/dmx.h> | ||
#include <linux/dvb/frontend.h> | ||
|
||
#include "mumudvb.h" | ||
|
||
typedef struct { | ||
int fd_zero; | ||
int fd_dvr; | ||
int fd_frontend; | ||
int fd[MAX_CHAINES][MAX_PIDS_PAR_CHAINE]; | ||
}fds_t; | ||
|
||
|
||
int open_fe (int *fd_frontend, int card); | ||
void set_ts_filt (int fd,uint16_t pid, dmx_pes_type_t pestype); | ||
void affiche_puissance (fds_t fds, int no_daemon); | ||
int create_card_fd(int card, int nb_flux, int *num_pids, fds_t *fds); | ||
void close_card_fd(int card, int nb_flux, int *num_pids, fds_t fds); | ||
#endif |
Oops, something went wrong.