libdvbtee ist eine Stream-Parser- und Serviceinformations-Aggregator-Bibliothek für MPEG2-Transportströme. Die Bibliothek umfasst einen PSI-Parser (Program Service Information) und Unterstützung für verschiedene Netzwerk-Streaming-Methoden. Sie kennt die Linux-DVB-Kernel-API sowie die HDHomeRun-Netzwerk-Streaming-APIs.
Die Bibliothek enthält genügend Funktionalität, um eine voll ausgestattete Fernseh-Middleware-Anwendung zu betreiben, einschließlich der Möglichkeit, Daten über UDP, TCP, HTTP, DMA und verschiedene andere Mechanismen zu erfassen und zu streamen.
libdvbtee_server
ermöglicht die Steuerung dieser Funktionen über eine HTTP-Sitzung oder eine Befehlszeilenschnittstelle und kann zur Steuerung mehrerer Tuner verwendet werden.
libdvbtee_parser
ist eine aus libdvbtee-Quellen erstellte Bibliothek zur Verwendung durch node-dvbtee. libdvbtee_parser
wird im selben Git-Entwicklungs-Repository wie libdvbtee
gehostet und nutzen daher dieselbe einzelne README.md-Datei.
Die ausführbare dvbtee-Anwendung bietet eine Vielzahl von Funktionen, darunter: Scannen, Tuning, EPG-Browsing, Empfang eingehender Netzwerk-Streams, Streamen von Netzwerk-Streams, Verwaltung mehrerer Tuner und mehr ...
Auf den Server kann entweder per Telnet oder http zugegriffen werden. Die Standard-Portnummer ist 64080
, diese ist jedoch konfigurierbar. Das server_example
verwendet die Portnummer 62080
.
Wenn Sie über http auf den Server zugreifen, stellen Sie Befehlen ein / und Argumenten ein = voran. Wenn Sie über Telnet auf den Server zugreifen, geben Sie die Form „Befehl=Argument“ ein und drücken Sie die Eingabetaste.
Michael Ira Krufky
mkrufky bei linuxtv dot org
Die empfohlene Methode zum Erstellen von libdvbtee ist die Verwendung des Skripts build-auto.sh
:
./build-auto.sh
dvbtee/dvbtee < mpegfile.ts
libdvbtee wurde ursprünglich mit dem qmake-Build-System für eine einfache Multiplattform-Build-Unterstützung entwickelt. libdvbtee unterstützt weiterhin das qmake-System, verwendet aber aus verschiedenen Gründen jetzt Autotools als bevorzugtes Build-System.
autoreconf --install
./configure
make
dvbtee/dvbtee < mpegfile.ts
Wenn Sie aus irgendeinem Grund libdvbtee mit der alten Version des Tabellen-/Deskriptor-Decoders erstellen möchten, geben Sie zur Konfiguration --enable-olddecoder an
autoreconf --install
./configure --enable-olddecoder
make
dvbtee/dvbtee < mpegfile.ts
Wenn Sie lieber qmake anstelle von Autotools verwenden möchten, verwenden Sie die folgenden Befehle:
qmake -r
make
LD_LIBRARY_PATH=libdvbtee:libdvbtee_server dvbtee/dvbtee < mpegfile.ts
Wenn Sie aus irgendeinem Grund libdvbtee mit der alten Version des Tabellen-/Deskriptor-Decoders erstellen möchten, geben Sie CONFIG+=olddecoder für qmake an
qmake -r CONFIG+=olddecoder
make
LD_LIBRARY_PATH=libdvbtee:libdvbtee_server dvbtee/dvbtee < mpegfile.ts
libdvbtee ist für die PSIP-Analyse auf libdvbpsi angewiesen. Obwohl libdvbtee auf älteren libdvbpsi-Versionen basiert, ist ein neuerer Build erforderlich, um alle neuesten Funktionen von libdvbtee bereitzustellen, wie z. B. ATSC-Unterstützung.
Das Build-System von libdvbtee ist in der Lage, die neueste Version von libdvbpsi zu erstellen und zu verknüpfen, indem eine Kopie des libdvbpsi-Repositorys in der obersten Ebene des Quellbaums von libdvbtee platziert wird.
Anstatt Schritt-für-Schritt-Anweisungen in dieser README-Datei zu geben, werden Shell-Skripte bereitgestellt, die die neuesten libdvbpsi-Quellen abrufen, das Build-System konfigurieren und beide Bibliotheken zusammen erstellen.
Für den integrierten Build von libdvbtee zusammen mit der neuesten Version von libdvbpsi unter Verwendung von Autotools (empfohlen):
./build-auto.sh
dvbtee/dvbtee < mpegfile.ts
Für den integrierten Build von libdvbtee zusammen mit der neuesten Version von libdvbpsi unter Verwendung von qmake:
./build-qmake.sh
LD_LIBRARY_PATH=libdvbtee:libdvbtee_server dvbtee/dvbtee < mpegfile.ts
-a adapter id
-A (1 for ATSC, 2 for ClearQAM)
-b display bitrates & statistics
-c channel to tune /
comma (,) separated list of channels to scan /
scan minimum channel
-C channel to tune /
comma (,) separated list of channels to scan /
scan maximum channel
-f frontend id
-F filename to use as input
-t timeout
-T number of tuners (dvb adapters) allowed to use, 0 for all
-s scan, optional arg when using multiple tuners:
1 for speed, 2 for redundancy,
3 for speed AND redundancy,
4 for optimized speed / partial redundancy
-S server mode, optional arg 1 for command server,
2 for http stream server, 3 for both
-i pull local/remote tcp/udp port for data
-n bind to a specific network interface
-I request a service and its associated PES streams by its service id
-E enable EPG scan, optional arg to limit the number of EITs to parse
-e enable ETT extended text tables (EPG descriptions, ATSC only)
-o output filtered data, optional arg is a filename / URI, ie udp://127.0.0.1:1234
-O output options: (or-able) 1 = PAT/PMT, 2 = PES, 4 = PSIP, 8 = AUDIO, 16 = VIDEO
-H use a HdHomeRun device, optional arg to specify the device string
-j enable json output of decoded tables & descriptors
-d debug level
-q quiet most logging
-h display additional help
So stellen Sie die Dienst-ID 1 des physischen Kanals 33 ein und streamen ihn an einen UDP-Port:
dvbtee -c33 -I1 -oudp://192.168.1.100:1234
So optimieren Sie das zweite Frontend von Adapter 1 und streamen den vollständigen TS des physischen Kanals 44 an einen TCP-Listener:
dvbtee -c44 -otcp://192.168.1.200:5555
So überwachen Sie einen TCP-Port und streamen an einen UDP-Port:
dvbtee -itcp://5555 -oudp://192.168.1.100:1234
So analysieren Sie eine erfasste Datei und filtern die PSIP-Daten heraus, indem Sie die PAT/PMT- und PES-Streams in einer Datei speichern:
dvbtee -Finput.ts -O3 -ofile://output.ts
So analysieren Sie einen UDP-Stream zehn Sekunden lang:
dvbtee -iudp://127.0.0.1:1234 -t10
So suchen Sie mit dem ersten angeschlossenen Tuner nach Diensten:
dvbtee -s -a0
So scannen Sie nach ClearQAM-Diensten mit 5 Tunern, die für Geschwindigkeit und teilweise Redundanz optimiert sind:
dvbtee -A2 -T5 -s4
So suchen Sie nach ATSC-Diensten mit zwei für Geschwindigkeit und Redundanz optimierten HdHomeRun-Tunern:
dvbtee -A1 -H -T2 -s3
So starten Sie einen Server mit Adapter 0:
dvbtee -a0 -S
So starten Sie einen Server mit Tuner1 eines bestimmten HdHomeRun-Geräts (z. B. ABCDABCD):
dvbtee -H ABCDABCD-1 -S
Um einen Kanal mit aktivierter JSON-Ausgabe zu scannen, führen Sie den folgenden Befehl aus:
dvbtee -s -c13 -j
...sollte eine Ausgabe ähnlich der folgenden erzeugen:
scan channel 13...
store PAT: v0, ts_id: 2011
3 | 30
4 | 40
5 | 50
store PMT: v12, service_id 3, pcr_pid 49
es_pid | type
31 | 0x02 (Video MPEG-2) |
34 | 0x81 (Audio AC3 (ATSC)) | eng
35 | 0x81 (Audio AC3 (ATSC)) | spa
36 | 0x81 (Audio AC3 (ATSC)) | fre
store VCT: v6, ts_id 2011, b_cable_vct 0
channel | service_id | source_id | service_name
13.1 | 3 | 1 | WNET-HD | eng, spa, fre
13.2 | 4 | 2 | KIDS | eng, spa, fre
13.3 | 5 | 3 | V-Me | eng
store MGT: v6
table type | pid | ver | bytes
0x0000 | 0x1ffb | 6 | 187
0x0100 | 0x1d00 | 6 | 1103
0x0101 | 0x1d01 | 6 | 1105
0x0102 | 0x1d02 | 6 | 1132
0x0103 | 0x1d03 | 6 | 1305
0x0200 | 0x1e00 | 6 | 1197
0x0201 | 0x1e01 | 6 | 1220
0x0202 | 0x1e02 | 6 | 1157
0x0203 | 0x1e03 | 6 | 1213
store PMT: v12, service_id 5, pcr_pid 81
es_pid | type
51 | 0x02 (Video MPEG-2) |
54 | 0x81 (Audio AC3 (ATSC)) | eng
store PMT: v12, service_id 4, pcr_pid 65
es_pid | type
41 | 0x02 (Video MPEG-2) |
44 | 0x81 (Audio AC3 (ATSC)) | eng
45 | 0x81 (Audio AC3 (ATSC)) | spa
46 | 0x81 (Audio AC3 (ATSC)) | fre
# channel 13, 213000000,
13.1-WNET-HD:213000000:8VSB:49:52:3
13.2-KIDS:213000000:8VSB:65:68:4
13.3-V-Me:213000000:8VSB:81:84:5
found 3 services
TSID#07db: [ { "programs": [ { "number": 3, "pid": 48 }, { "number": 4, "pid": 64 }, { "number": 5, "pid": 80 } ], "tableId": 0, "tableName": "PAT", "tsId": 2011, "version": 0 }, { "pcrPid": 49, "program": 3, "streams": [ { "pid": 49, "streamType": 2, "streamTypeString": "Video MPEG-2" }, { "descriptors": [ { "bitRateCode": 14, "bsid": 8, "bsmod": 0, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "eng", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "eng" } ], "descriptorTag": 10 } ], "pid": 52, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "descriptors": [ { "bitRateCode": 8, "bsid": 8, "bsmod": 0, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "spa", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "spa" } ], "descriptorTag": 10 } ], "pid": 53, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "descriptors": [ { "bitRateCode": 8, "bsid": 8, "bsmod": 2, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "fre", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "fre" } ], "descriptorTag": 10 } ], "pid": 54, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" } ], "tableId": 2, "tableName": "PMT", "version": 12 }, { "channels": [ { "accessControlled": false, "carrierFreq": 0, "descriptors": [ { "descriptorTag": 161, "serviceLocation": [ { "esPid": 49, "streamType": 2, "streamTypeString": "Video MPEG-2" }, { "esPid": 52, "lang": "eng", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "esPid": 53, "lang": "spa", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "esPid": 54, "lang": "fre", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" } ] } ], "etmLocation": 0, "hidden": false, "hideGuide": false, "major": 13, "minor": 1, "modulation": 4, "outOfBand": true, "pathSelect": true, "program": 3, "serviceName": "WNET-HD", "serviceType": 2, "sourceId": 1, "tsId": 2011 }, { "accessControlled": false, "carrierFreq": 0, "descriptors": [ { "descriptorTag": 161, "serviceLocation": [ { "esPid": 65, "streamType": 2, "streamTypeString": "Video MPEG-2" }, { "esPid": 68, "lang": "eng", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "esPid": 69, "lang": "spa", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "esPid": 70, "lang": "fre", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" } ] } ], "etmLocation": 0, "hidden": false, "hideGuide": false, "major": 13, "minor": 2, "modulation": 4, "outOfBand": true, "pathSelect": true, "program": 4, "serviceName": "KIDS", "serviceType": 2, "sourceId": 2, "tsId": 2011 }, { "accessControlled": false, "carrierFreq": 0, "descriptors": [ { "descriptorTag": 161, "serviceLocation": [ { "esPid": 81, "streamType": 2, "streamTypeString": "Video MPEG-2" }, { "esPid": 84, "lang": "eng", "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" } ] } ], "etmLocation": 0, "hidden": false, "hideGuide": false, "major": 13, "minor": 3, "modulation": 4, "outOfBand": true, "pathSelect": true, "program": 5, "serviceName": "V-Me", "serviceType": 2, "sourceId": 3, "tsId": 2011 } ], "isCableVCT": false, "tableId": 200, "tableName": "VCT", "tsId": 2011, "version": 6 }, { "tableId": 199, "tableName": "MGT", "tables": [ { "bytes": 187, "pid": 8187, "type": 0, "version": 6 }, { "bytes": 1103, "pid": 7424, "type": 256, "version": 6 }, { "bytes": 1105, "pid": 7425, "type": 257, "version": 6 }, { "bytes": 1132, "pid": 7426, "type": 258, "version": 6 }, { "bytes": 1305, "pid": 7427, "type": 259, "version": 6 }, { "bytes": 1197, "pid": 7680, "type": 512, "version": 6 }, { "bytes": 1220, "pid": 7681, "type": 513, "version": 6 }, { "bytes": 1157, "pid": 7682, "type": 514, "version": 6 }, { "bytes": 1213, "pid": 7683, "type": 515, "version": 6 } ], "version": 6 }, { "pcrPid": 81, "program": 5, "streams": [ { "descriptors": [ { "CaptionService": [ { "digital_cc": "708", "easyReader": false, "iso639lang": "eng", "line21field": true, "serviceNumber": 1, "wideAspectRatio": false } ], "descriptorTag": 134 } ], "pid": 81, "streamType": 2, "streamTypeString": "Video MPEG-2" }, { "descriptors": [ { "bitRateCode": 10, "bsid": 8, "bsmod": 0, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "eng", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "eng" } ], "descriptorTag": 10 } ], "pid": 84, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" } ], "tableId": 2, "tableName": "PMT", "version": 12 }, { "pcrPid": 65, "program": 4, "streams": [ { "descriptors": [ { "CaptionService": [ { "digital_cc": "708", "easyReader": false, "iso639lang": "eng", "line21field": true, "serviceNumber": 1, "wideAspectRatio": false } ], "descriptorTag": 134 } ], "pid": 65, "streamType": 2, "streamTypeString": "Video MPEG-2" }, { "descriptors": [ { "bitRateCode": 14, "bsid": 8, "bsmod": 0, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "eng", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "eng" } ], "descriptorTag": 10 } ], "pid": 68, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "descriptors": [ { "bitRateCode": 8, "bsid": 8, "bsmod": 0, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "spa", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "spa" } ], "descriptorTag": 10 } ], "pid": 69, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" }, { "descriptors": [ { "bitRateCode": 8, "bsid": 8, "bsmod": 2, "description": "", "descriptorTag": 129, "fullSvc": true, "language": "fre", "numChannels": "2/0", "sampleRate": "48", "surroundMode": "Not indicated" }, { "ISO639Lang": [ { "audioType": 0, "language": "fre" } ], "descriptorTag": 10 } ], "pid": 70, "streamType": 129, "streamTypeString": "Audio AC3 (ATSC)" } ], "tableId": 2, "tableName": "PMT", "version": 12 } ]
tuner specify tuner id
feeder specify feeder id
scan scan for services, optional arg comma (,) separated list of channels to scan
scanepg same as 'scan' with EPG data collection enabled during scan
startscan same as 'scan' but asynchronous
startscanepg combo of 'scanepg' and 'startscan'
tune tune to a channel or service, ie:
tune=33 (full mux) / tune=44~3 (svc id 3)
channels list channels
channel tune physical channel (unsafe - use tune instead)
service select service (unsafe - use tune instead)
stream add output file / tcp / udp / http stream, ie:
stream=udp:192.168.1.100:1234
stream=tcp:192.168.1.200:5555
stream=file:output.ts
stream (over http with no arg will begin streaming to current socket)
epg dump collected EPG data
xmltv dump collected EPG data in XMLTV format
stop stop the tuner
stopoutput stop the tuner and output
check display debug info if debug is enabled
debug enable debug
parser enable / disable the parser for data shovel
listen listen for TS on a TCP or UDP port
save save scanned channels
quit stop the server and exit