libdvbtee는 MPEG2 전송 스트림용 스트림 파서 및 서비스 정보 수집기 라이브러리입니다. 라이브러리에는 PSI(프로그램 서비스 정보) 구문 분석기와 다양한 네트워크 스트리밍 방법에 대한 지원이 포함되어 있으며 linux-dvb 커널 API와 HDHomeRun 네트워크 스트리밍 API를 인식합니다.
라이브러리에는 UDP, TCP, HTTP, DMA 및 기타 다양한 메커니즘을 통해 데이터를 획득하고 스트리밍하는 기능을 포함하여 모든 기능을 갖춘 텔레비전 미들웨어 애플리케이션을 구동하기에 충분한 기능이 포함되어 있습니다.
libdvbtee_server
사용하면 http 세션이나 명령줄 인터페이스에서 이러한 기능을 제어할 수 있으며 여러 튜너를 제어하는 데 사용할 수 있습니다.
libdvbtee_parser
는 node-dvbtee에서 사용하기 위해 libdvbtee 소스에서 구축된 라이브러리입니다. libdvbtee_parser
libdvbtee
와 동일한 git 개발 저장소 내에서 호스팅되므로 동일한 단일 README.md 파일을 공유합니다.
dvbtee 실행 가능 응용 프로그램은 스캐닝, 조정, EPG 검색, 들어오는 네트워크 스트림 수신, 네트워크 스트림 스트리밍, 여러 튜너 관리 등을 포함한 다양한 기능을 제공합니다.
서버는 텔넷이나 http를 통해 액세스할 수 있습니다. 기본 포트 번호는 64080
이지만 구성 가능합니다. server_example
은 포트 번호 62080
을 사용합니다.
http를 통해 서버에 액세스할 때 명령 앞에 /를, 인수 앞에 =를 붙입니다. 텔넷을 통해 서버에 접속할 경우 'command=argument' 형식으로 입력하고 Enter 키를 누릅니다.
마이클 아이라 크루프키
linuxtv dot org의 mkrufky
libdvbtee를 빌드하는 권장 방법은 build-auto.sh
스크립트를 사용하는 것입니다.
./build-auto.sh
dvbtee/dvbtee < mpegfile.ts
libdvbtee는 원래 쉬운 다중 플랫폼 빌드 지원을 위해 qmake 빌드 시스템을 사용하여 개발되었습니다. libdvbtee는 여전히 qmake 시스템을 지원하지만 이제 다양한 이유로 autotools를 기본 빌드 시스템으로 사용합니다.
autoreconf --install
./configure
make
dvbtee/dvbtee < mpegfile.ts
이상한 이유로 이전 버전의 테이블/설명자 디코더를 사용하여 libdvbtee를 빌드하려는 경우 --enable-olddecoder를 지정하여 구성하십시오.
autoreconf --install
./configure --enable-olddecoder
make
dvbtee/dvbtee < mpegfile.ts
autotools 대신 qmake를 사용하려면 다음 명령을 사용하십시오.
qmake -r
make
LD_LIBRARY_PATH=libdvbtee:libdvbtee_server dvbtee/dvbtee < mpegfile.ts
이상한 이유로 이전 버전의 테이블/설명자 디코더를 사용하여 libdvbtee를 빌드하려는 경우 qmake에 CONFIG+=olddecoder를 지정하십시오.
qmake -r CONFIG+=olddecoder
make
LD_LIBRARY_PATH=libdvbtee:libdvbtee_server dvbtee/dvbtee < mpegfile.ts
libdvbtee는 PSIP 구문 분석을 위해 libdvbpsi에 의존합니다. libdvbtee는 이전 libdvbpsi 릴리스에 대해 빌드되지만 ATSC 지원과 같은 libdvbtee의 최신 기능을 모두 제공하려면 최신 빌드가 필요합니다.
libdvbtee의 빌드 시스템은 libdvbtee 소스 트리의 최상위 수준에 libdvbpsi 저장소의 복사본을 배치하여 최신 버전의 libdvbpsi에 대해 빌드하고 연결할 수 있습니다.
이 README에서는 단계별 지침을 제공하는 대신 최신 libdvbpsi 소스를 가져오고, 빌드 시스템을 구성하고, 두 라이브러리를 함께 빌드하는 셸 스크립트가 제공됩니다.
autotools를 사용하는 최신 버전의 libdvbpsi와 함께 libdvbtee의 통합 빌드의 경우(권장):
./build-auto.sh
dvbtee/dvbtee < mpegfile.ts
qmake를 사용하여 최신 버전의 libdvbpsi와 함께 libdvbtee의 통합 빌드의 경우:
./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
물리적 채널 33의 서비스 ID 1을 조정하고 이를 UDP 포트로 스트리밍하려면 다음을 수행하세요.
dvbtee -c33 -I1 -oudp://192.168.1.100:1234
어댑터 1의 두 번째 프런트엔드를 조정하고 물리적 채널 44의 전체 TS를 TCP 수신기로 스트리밍하려면:
dvbtee -c44 -otcp://192.168.1.200:5555
TCP 포트를 수신하고 UDP 포트로 스트리밍하려면:
dvbtee -itcp://5555 -oudp://192.168.1.100:1234
캡처된 파일을 구문 분석하고 PSIP 데이터를 필터링하여 PAT/PMT 및 PES 스트림을 파일에 저장하려면:
dvbtee -Finput.ts -O3 -ofile://output.ts
10초 동안 UDP 스트림을 구문 분석하려면 다음을 수행하세요.
dvbtee -iudp://127.0.0.1:1234 -t10
첫 번째로 연결된 튜너를 사용하여 서비스를 검색하려면:
dvbtee -s -a0
속도 및 부분 중복성에 최적화된 5개의 튜너를 사용하여 ClearQAM 서비스를 검색하려면 다음을 수행하세요.
dvbtee -A2 -T5 -s4
속도와 중복성에 최적화된 2개의 HdHomeRun 튜너를 사용하여 ATSC 서비스를 검색하려면:
dvbtee -A1 -H -T2 -s3
어댑터 0을 사용하여 서버를 시작하려면:
dvbtee -a0 -S
특정 HdHomeRun 장치의 tuner1을 사용하여 서버를 시작하려면(예: ABCDABCD):
dvbtee -H ABCDABCD-1 -S
JSON 출력이 활성화된 채널을 스캔하려면 다음 명령을 사용하세요.
dvbtee -s -c13 -j
...다음과 유사한 출력을 생성해야 합니다.
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