├── .gitignore
├── 2to3.log
├── FM-TX.grc
├── README.md
├── create-test.sh
├── dvbsnooper_1.txt
├── dvbsnooper_2.txt
├── dvbt-bitrate.py
├── dvbt-hackrf.py
├── dvbt-tsrfsend.py
├── dvbt.conf
├── dvbt2
├── create-test.sh
├── dvbt2-hackrf.py
└── src.sh
├── dvbtconfig.py
├── killall.sh
├── notes.txt
├── opencaster
├── config.py
└── null.ts
├── run-sd-live.sh
├── src-decklink.sh
├── src-rtp.sh
├── tsrfsend
└── wcsan_r3_20151219_01.log
/.gitignore:
--------------------------------------------------------------------------------
1 | /*.mkv
2 | /*.mp2
3 | /*.ts
4 | /*.pes
5 | /*.pyc
6 | /fifos/
7 | /dvbt2/*.ts
8 | /opencaster/*.sec
9 | /opencaster/*.ts
10 |
--------------------------------------------------------------------------------
/2to3.log:
--------------------------------------------------------------------------------
1 | $ 2to3-2.7 -w *.py
2 | RefactoringTool: Skipping optional fixer: buffer
3 | RefactoringTool: Skipping optional fixer: idioms
4 | RefactoringTool: Skipping optional fixer: set_literal
5 | RefactoringTool: Skipping optional fixer: ws_comma
6 | RefactoringTool: Refactored dvbt-bitrate.py
7 | --- dvbt-bitrate.py (original)
8 | +++ dvbt-bitrate.py (refactored)
9 | @@ -99,9 +99,9 @@
10 | MaxBitrate = 423.0 / 544.0 * TBandwidth * TCodeRate * TConstellation * TGuardInterval
11 |
12 | if short:
13 | - print "%d" % MaxBitrate
14 | + print("%d" % MaxBitrate)
15 | else:
16 | - print "Maximum Bitrate = %d bps (%9.3f kbps, %6.3f Mbps)" % (MaxBitrate, MaxBitrate/1000, MaxBitrate/(1000000))
17 | + print("Maximum Bitrate = %d bps (%9.3f kbps, %6.3f Mbps)" % (MaxBitrate, MaxBitrate/1000, MaxBitrate/(1000000)))
18 |
19 | if __name__ == '__main__':
20 | main(sys.argv[1:])
21 | RefactoringTool: Refactored dvbtconfig.py
22 | --- dvbtconfig.py (original)
23 | +++ dvbtconfig.py (refactored)
24 | @@ -15,10 +15,10 @@
25 | # along with this program. If not, see .
26 |
27 | import dvbt
28 | -import ConfigParser
29 | +import configparser
30 |
31 | class DVBTConfig:
32 | - config = ConfigParser.RawConfigParser()
33 | + config = configparser.RawConfigParser()
34 |
35 | # DVB-T Parameters
36 | dflt_channel_mhz = 6
37 | @@ -49,9 +49,9 @@
38 | if c < 5 or c > 8:
39 | raise ValueError("illegal value for bandwith: %d" % c)
40 | return c
41 | - except ConfigParser.NoSectionError:
42 | + except configparser.NoSectionError:
43 | return self.dflt_channel_mhz
44 | - except ConfigParser.NoOptionError:
45 | + except configparser.NoOptionError:
46 | return self.dflt_channel_mhz
47 |
48 |
49 | @@ -63,9 +63,9 @@
50 | if m.upper() == "8K":
51 | return dvbt.T8k
52 | raise ValueError("illegal value for mode: %s" % m)
53 | - except ConfigParser.NoSectionError:
54 | + except configparser.NoSectionError:
55 | return self.dflt_mode
56 | - except ConfigParser.NoOptionError:
57 | + except configparser.NoOptionError:
58 | return self.dflt_mode
59 |
60 | def get_code_rate(self):
61 | @@ -82,9 +82,9 @@
62 | if c == "7/8":
63 | return dvbt.C7_8
64 | raise ValueError("illegal value for code_rate: %s" % c)
65 | - except ConfigParser.NoSectionError:
66 | + except configparser.NoSectionError:
67 | return self.dflt_code_rate
68 | - except ConfigParser.NoOptionError:
69 | + except configparser.NoOptionError:
70 | return self.dflt_code_rate
71 |
72 | def get_constellation(self):
73 | @@ -97,9 +97,9 @@
74 | if c.upper() == "QAM64":
75 | return dvbt.QAM64
76 | raise ValueError("illegal value for constellation: %s" % c)
77 | - except ConfigParser.NoSectionError:
78 | + except configparser.NoSectionError:
79 | return self.dflt_constellation
80 | - except ConfigParser.NoOptionError:
81 | + except configparser.NoOptionError:
82 | return self.dflt_constellation
83 |
84 | def get_guard_interval(self):
85 | @@ -114,9 +114,9 @@
86 | if g == "1/4":
87 | return dvbt.G1_4
88 | raise ValueError("illegal value for guard_interval: %s" % g)
89 | - except ConfigParser.NoSectionError:
90 | + except configparser.NoSectionError:
91 | return self.dflt_guard_interval
92 | - except ConfigParser.NoOptionError:
93 | + except configparser.NoOptionError:
94 | return self.dflt_guard_interval
95 |
96 |
97 | @@ -126,47 +126,47 @@
98 | if f < 474000000 or f > 858000000:
99 | raise ValueError("center frequency is out of allowed range: %d" % f)
100 | return f
101 | - except ConfigParser.NoSectionError:
102 | + except configparser.NoSectionError:
103 | return self.dflt_center_freq
104 | - except ConfigParser.NoOptionError:
105 | + except configparser.NoOptionError:
106 | return self.dflt_center_freq
107 |
108 | def get_hackrf_rf_gain(self):
109 | try:
110 | return self.config.getint('hackrf', 'rf-gain')
111 | - except ConfigParser.NoSectionError:
112 | + except configparser.NoSectionError:
113 | return self.dflt_hackrf_rf_gain
114 | - except ConfigParser.NoOptionError:
115 | + except configparser.NoOptionError:
116 | return self.dflt_hackrf_rf_gain
117 |
118 | def get_hackrf_if_gain(self):
119 | try:
120 | return self.config.getint('hackrf', 'if-gain')
121 | - except ConfigParser.NoSectionError:
122 | + except configparser.NoSectionError:
123 | return self.dflt_hackrf_if_gain
124 | - except ConfigParser.NoOptionError:
125 | + except configparser.NoOptionError:
126 | return self.dflt_hackrf_if_gain
127 |
128 | def get_hackrf_bb_gain(self):
129 | try:
130 | return self.config.getint('hackrf', 'bb-gain')
131 | - except ConfigParser.NoSectionError:
132 | + except configparser.NoSectionError:
133 | return self.dflt_hackrf_bb_gain
134 | - except ConfigParser.NoOptionError:
135 | + except configparser.NoOptionError:
136 | return self.dflt_hackrf_bb_gain
137 |
138 | def get_tsrfsend_cell_id(self):
139 | try:
140 | return self.config.getint('tsrfsend', 'cell-id')
141 | - except ConfigParser.NoSectionError:
142 | + except configparser.NoSectionError:
143 | return self.dflt_tsrfsend_cell_id
144 | - except ConfigParser.NoOptionError:
145 | + except configparser.NoOptionError:
146 | return self.dflt_tsrfsend_cell_id
147 |
148 | def get_tsrfsend_gain(self):
149 | try:
150 | return self.config.getint('tsrfsend', 'gain')
151 | - except ConfigParser.NoSectionError:
152 | + except configparser.NoSectionError:
153 | return self.dflt_tsrfsend_gain
154 | - except ConfigParser.NoOptionError:
155 | + except configparser.NoOptionError:
156 | return self.dflt_tsrfsend_gain
157 | RefactoringTool: No changes to dvbt-hackrf.py
158 | RefactoringTool: No changes to dvbt-tsrfsend.py
159 | RefactoringTool: Files that were modified:
160 | RefactoringTool: dvbt-bitrate.py
161 | RefactoringTool: dvbtconfig.py
162 | RefactoringTool: dvbt-hackrf.py
163 | RefactoringTool: dvbt-tsrfsend.py
164 |
165 |
--------------------------------------------------------------------------------
/FM-TX.grc:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Sat Dec 12 14:12:29 2015
5 |
6 | options
7 |
8 | id
9 | top_block
10 |
11 |
12 | _enabled
13 | True
14 |
15 |
16 | title
17 |
18 |
19 |
20 | author
21 |
22 |
23 |
24 | description
25 |
26 |
27 |
28 | window_size
29 | 1280, 1024
30 |
31 |
32 | generate_options
33 | wx_gui
34 |
35 |
36 | category
37 | Custom
38 |
39 |
40 | run_options
41 | prompt
42 |
43 |
44 | run
45 | True
46 |
47 |
48 | max_nouts
49 | 0
50 |
51 |
52 | realtime_scheduling
53 |
54 |
55 |
56 | alias
57 |
58 |
59 |
60 | _coordinate
61 | (10, 10)
62 |
63 |
64 | _rotation
65 | 0
66 |
67 |
68 |
69 | variable
70 |
71 | id
72 | samp_rate
73 |
74 |
75 | _enabled
76 | True
77 |
78 |
79 | value
80 | 32000
81 |
82 |
83 | alias
84 |
85 |
86 |
87 | _coordinate
88 | (10, 170)
89 |
90 |
91 | _rotation
92 | 0
93 |
94 |
95 |
96 | analog_nbfm_tx
97 |
98 | id
99 | analog_nbfm_tx_0
100 |
101 |
102 | _enabled
103 | True
104 |
105 |
106 | audio_rate
107 | samp_rate
108 |
109 |
110 | quad_rate
111 | samp_rate
112 |
113 |
114 | tau
115 | 75e-6
116 |
117 |
118 | max_dev
119 | 5e3
120 |
121 |
122 | alias
123 |
124 |
125 |
126 | affinity
127 |
128 |
129 |
130 | minoutbuf
131 | 0
132 |
133 |
134 | maxoutbuf
135 | 0
136 |
137 |
138 | _coordinate
139 | (772, 185)
140 |
141 |
142 | _rotation
143 | 0
144 |
145 |
146 |
147 | analog_sig_source_x
148 |
149 | id
150 | analog_sig_source_x_0
151 |
152 |
153 | _enabled
154 | True
155 |
156 |
157 | type
158 | float
159 |
160 |
161 | samp_rate
162 | samp_rate
163 |
164 |
165 | waveform
166 | analog.GR_SIN_WAVE
167 |
168 |
169 | freq
170 | 1000
171 |
172 |
173 | amp
174 | 100
175 |
176 |
177 | offset
178 | 0
179 |
180 |
181 | alias
182 |
183 |
184 |
185 | affinity
186 |
187 |
188 |
189 | minoutbuf
190 | 0
191 |
192 |
193 | maxoutbuf
194 | 0
195 |
196 |
197 | _coordinate
198 | (482, 187)
199 |
200 |
201 | _rotation
202 | 0
203 |
204 |
205 |
206 | osmosdr_sink
207 |
208 | id
209 | osmosdr_sink_0
210 |
211 |
212 | _enabled
213 | True
214 |
215 |
216 | type
217 | fc32
218 |
219 |
220 | args
221 |
222 |
223 |
224 | sync
225 |
226 |
227 |
228 | num_mboards
229 | 1
230 |
231 |
232 | clock_source0
233 |
234 |
235 |
236 | time_source0
237 |
238 |
239 |
240 | clock_source1
241 |
242 |
243 |
244 | time_source1
245 |
246 |
247 |
248 | clock_source2
249 |
250 |
251 |
252 | time_source2
253 |
254 |
255 |
256 | clock_source3
257 |
258 |
259 |
260 | time_source3
261 |
262 |
263 |
264 | clock_source4
265 |
266 |
267 |
268 | time_source4
269 |
270 |
271 |
272 | clock_source5
273 |
274 |
275 |
276 | time_source5
277 |
278 |
279 |
280 | clock_source6
281 |
282 |
283 |
284 | time_source6
285 |
286 |
287 |
288 | clock_source7
289 |
290 |
291 |
292 | time_source7
293 |
294 |
295 |
296 | nchan
297 | 1
298 |
299 |
300 | sample_rate
301 | samp_rate
302 |
303 |
304 | freq0
305 | 430.125e6
306 |
307 |
308 | corr0
309 | 0
310 |
311 |
312 | gain0
313 | 10
314 |
315 |
316 | if_gain0
317 | 20
318 |
319 |
320 | bb_gain0
321 | 20
322 |
323 |
324 | ant0
325 |
326 |
327 |
328 | bw0
329 | 0
330 |
331 |
332 | freq1
333 | 100e6
334 |
335 |
336 | corr1
337 | 0
338 |
339 |
340 | gain1
341 | 10
342 |
343 |
344 | if_gain1
345 | 20
346 |
347 |
348 | bb_gain1
349 | 20
350 |
351 |
352 | ant1
353 |
354 |
355 |
356 | bw1
357 | 0
358 |
359 |
360 | freq2
361 | 100e6
362 |
363 |
364 | corr2
365 | 0
366 |
367 |
368 | gain2
369 | 10
370 |
371 |
372 | if_gain2
373 | 20
374 |
375 |
376 | bb_gain2
377 | 20
378 |
379 |
380 | ant2
381 |
382 |
383 |
384 | bw2
385 | 0
386 |
387 |
388 | freq3
389 | 100e6
390 |
391 |
392 | corr3
393 | 0
394 |
395 |
396 | gain3
397 | 10
398 |
399 |
400 | if_gain3
401 | 20
402 |
403 |
404 | bb_gain3
405 | 20
406 |
407 |
408 | ant3
409 |
410 |
411 |
412 | bw3
413 | 0
414 |
415 |
416 | freq4
417 | 100e6
418 |
419 |
420 | corr4
421 | 0
422 |
423 |
424 | gain4
425 | 10
426 |
427 |
428 | if_gain4
429 | 20
430 |
431 |
432 | bb_gain4
433 | 20
434 |
435 |
436 | ant4
437 |
438 |
439 |
440 | bw4
441 | 0
442 |
443 |
444 | freq5
445 | 100e6
446 |
447 |
448 | corr5
449 | 0
450 |
451 |
452 | gain5
453 | 10
454 |
455 |
456 | if_gain5
457 | 20
458 |
459 |
460 | bb_gain5
461 | 20
462 |
463 |
464 | ant5
465 |
466 |
467 |
468 | bw5
469 | 0
470 |
471 |
472 | freq6
473 | 100e6
474 |
475 |
476 | corr6
477 | 0
478 |
479 |
480 | gain6
481 | 10
482 |
483 |
484 | if_gain6
485 | 20
486 |
487 |
488 | bb_gain6
489 | 20
490 |
491 |
492 | ant6
493 |
494 |
495 |
496 | bw6
497 | 0
498 |
499 |
500 | freq7
501 | 100e6
502 |
503 |
504 | corr7
505 | 0
506 |
507 |
508 | gain7
509 | 10
510 |
511 |
512 | if_gain7
513 | 20
514 |
515 |
516 | bb_gain7
517 | 20
518 |
519 |
520 | ant7
521 |
522 |
523 |
524 | bw7
525 | 0
526 |
527 |
528 | freq8
529 | 100e6
530 |
531 |
532 | corr8
533 | 0
534 |
535 |
536 | gain8
537 | 10
538 |
539 |
540 | if_gain8
541 | 20
542 |
543 |
544 | bb_gain8
545 | 20
546 |
547 |
548 | ant8
549 |
550 |
551 |
552 | bw8
553 | 0
554 |
555 |
556 | freq9
557 | 100e6
558 |
559 |
560 | corr9
561 | 0
562 |
563 |
564 | gain9
565 | 10
566 |
567 |
568 | if_gain9
569 | 20
570 |
571 |
572 | bb_gain9
573 | 20
574 |
575 |
576 | ant9
577 |
578 |
579 |
580 | bw9
581 | 0
582 |
583 |
584 | freq10
585 | 100e6
586 |
587 |
588 | corr10
589 | 0
590 |
591 |
592 | gain10
593 | 10
594 |
595 |
596 | if_gain10
597 | 20
598 |
599 |
600 | bb_gain10
601 | 20
602 |
603 |
604 | ant10
605 |
606 |
607 |
608 | bw10
609 | 0
610 |
611 |
612 | freq11
613 | 100e6
614 |
615 |
616 | corr11
617 | 0
618 |
619 |
620 | gain11
621 | 10
622 |
623 |
624 | if_gain11
625 | 20
626 |
627 |
628 | bb_gain11
629 | 20
630 |
631 |
632 | ant11
633 |
634 |
635 |
636 | bw11
637 | 0
638 |
639 |
640 | freq12
641 | 100e6
642 |
643 |
644 | corr12
645 | 0
646 |
647 |
648 | gain12
649 | 10
650 |
651 |
652 | if_gain12
653 | 20
654 |
655 |
656 | bb_gain12
657 | 20
658 |
659 |
660 | ant12
661 |
662 |
663 |
664 | bw12
665 | 0
666 |
667 |
668 | freq13
669 | 100e6
670 |
671 |
672 | corr13
673 | 0
674 |
675 |
676 | gain13
677 | 10
678 |
679 |
680 | if_gain13
681 | 20
682 |
683 |
684 | bb_gain13
685 | 20
686 |
687 |
688 | ant13
689 |
690 |
691 |
692 | bw13
693 | 0
694 |
695 |
696 | freq14
697 | 100e6
698 |
699 |
700 | corr14
701 | 0
702 |
703 |
704 | gain14
705 | 10
706 |
707 |
708 | if_gain14
709 | 20
710 |
711 |
712 | bb_gain14
713 | 20
714 |
715 |
716 | ant14
717 |
718 |
719 |
720 | bw14
721 | 0
722 |
723 |
724 | freq15
725 | 100e6
726 |
727 |
728 | corr15
729 | 0
730 |
731 |
732 | gain15
733 | 10
734 |
735 |
736 | if_gain15
737 | 20
738 |
739 |
740 | bb_gain15
741 | 20
742 |
743 |
744 | ant15
745 |
746 |
747 |
748 | bw15
749 | 0
750 |
751 |
752 | freq16
753 | 100e6
754 |
755 |
756 | corr16
757 | 0
758 |
759 |
760 | gain16
761 | 10
762 |
763 |
764 | if_gain16
765 | 20
766 |
767 |
768 | bb_gain16
769 | 20
770 |
771 |
772 | ant16
773 |
774 |
775 |
776 | bw16
777 | 0
778 |
779 |
780 | freq17
781 | 100e6
782 |
783 |
784 | corr17
785 | 0
786 |
787 |
788 | gain17
789 | 10
790 |
791 |
792 | if_gain17
793 | 20
794 |
795 |
796 | bb_gain17
797 | 20
798 |
799 |
800 | ant17
801 |
802 |
803 |
804 | bw17
805 | 0
806 |
807 |
808 | freq18
809 | 100e6
810 |
811 |
812 | corr18
813 | 0
814 |
815 |
816 | gain18
817 | 10
818 |
819 |
820 | if_gain18
821 | 20
822 |
823 |
824 | bb_gain18
825 | 20
826 |
827 |
828 | ant18
829 |
830 |
831 |
832 | bw18
833 | 0
834 |
835 |
836 | freq19
837 | 100e6
838 |
839 |
840 | corr19
841 | 0
842 |
843 |
844 | gain19
845 | 10
846 |
847 |
848 | if_gain19
849 | 20
850 |
851 |
852 | bb_gain19
853 | 20
854 |
855 |
856 | ant19
857 |
858 |
859 |
860 | bw19
861 | 0
862 |
863 |
864 | freq20
865 | 100e6
866 |
867 |
868 | corr20
869 | 0
870 |
871 |
872 | gain20
873 | 10
874 |
875 |
876 | if_gain20
877 | 20
878 |
879 |
880 | bb_gain20
881 | 20
882 |
883 |
884 | ant20
885 |
886 |
887 |
888 | bw20
889 | 0
890 |
891 |
892 | freq21
893 | 100e6
894 |
895 |
896 | corr21
897 | 0
898 |
899 |
900 | gain21
901 | 10
902 |
903 |
904 | if_gain21
905 | 20
906 |
907 |
908 | bb_gain21
909 | 20
910 |
911 |
912 | ant21
913 |
914 |
915 |
916 | bw21
917 | 0
918 |
919 |
920 | freq22
921 | 100e6
922 |
923 |
924 | corr22
925 | 0
926 |
927 |
928 | gain22
929 | 10
930 |
931 |
932 | if_gain22
933 | 20
934 |
935 |
936 | bb_gain22
937 | 20
938 |
939 |
940 | ant22
941 |
942 |
943 |
944 | bw22
945 | 0
946 |
947 |
948 | freq23
949 | 100e6
950 |
951 |
952 | corr23
953 | 0
954 |
955 |
956 | gain23
957 | 10
958 |
959 |
960 | if_gain23
961 | 20
962 |
963 |
964 | bb_gain23
965 | 20
966 |
967 |
968 | ant23
969 |
970 |
971 |
972 | bw23
973 | 0
974 |
975 |
976 | freq24
977 | 100e6
978 |
979 |
980 | corr24
981 | 0
982 |
983 |
984 | gain24
985 | 10
986 |
987 |
988 | if_gain24
989 | 20
990 |
991 |
992 | bb_gain24
993 | 20
994 |
995 |
996 | ant24
997 |
998 |
999 |
1000 | bw24
1001 | 0
1002 |
1003 |
1004 | freq25
1005 | 100e6
1006 |
1007 |
1008 | corr25
1009 | 0
1010 |
1011 |
1012 | gain25
1013 | 10
1014 |
1015 |
1016 | if_gain25
1017 | 20
1018 |
1019 |
1020 | bb_gain25
1021 | 20
1022 |
1023 |
1024 | ant25
1025 |
1026 |
1027 |
1028 | bw25
1029 | 0
1030 |
1031 |
1032 | freq26
1033 | 100e6
1034 |
1035 |
1036 | corr26
1037 | 0
1038 |
1039 |
1040 | gain26
1041 | 10
1042 |
1043 |
1044 | if_gain26
1045 | 20
1046 |
1047 |
1048 | bb_gain26
1049 | 20
1050 |
1051 |
1052 | ant26
1053 |
1054 |
1055 |
1056 | bw26
1057 | 0
1058 |
1059 |
1060 | freq27
1061 | 100e6
1062 |
1063 |
1064 | corr27
1065 | 0
1066 |
1067 |
1068 | gain27
1069 | 10
1070 |
1071 |
1072 | if_gain27
1073 | 20
1074 |
1075 |
1076 | bb_gain27
1077 | 20
1078 |
1079 |
1080 | ant27
1081 |
1082 |
1083 |
1084 | bw27
1085 | 0
1086 |
1087 |
1088 | freq28
1089 | 100e6
1090 |
1091 |
1092 | corr28
1093 | 0
1094 |
1095 |
1096 | gain28
1097 | 10
1098 |
1099 |
1100 | if_gain28
1101 | 20
1102 |
1103 |
1104 | bb_gain28
1105 | 20
1106 |
1107 |
1108 | ant28
1109 |
1110 |
1111 |
1112 | bw28
1113 | 0
1114 |
1115 |
1116 | freq29
1117 | 100e6
1118 |
1119 |
1120 | corr29
1121 | 0
1122 |
1123 |
1124 | gain29
1125 | 10
1126 |
1127 |
1128 | if_gain29
1129 | 20
1130 |
1131 |
1132 | bb_gain29
1133 | 20
1134 |
1135 |
1136 | ant29
1137 |
1138 |
1139 |
1140 | bw29
1141 | 0
1142 |
1143 |
1144 | freq30
1145 | 100e6
1146 |
1147 |
1148 | corr30
1149 | 0
1150 |
1151 |
1152 | gain30
1153 | 10
1154 |
1155 |
1156 | if_gain30
1157 | 20
1158 |
1159 |
1160 | bb_gain30
1161 | 20
1162 |
1163 |
1164 | ant30
1165 |
1166 |
1167 |
1168 | bw30
1169 | 0
1170 |
1171 |
1172 | freq31
1173 | 100e6
1174 |
1175 |
1176 | corr31
1177 | 0
1178 |
1179 |
1180 | gain31
1181 | 10
1182 |
1183 |
1184 | if_gain31
1185 | 20
1186 |
1187 |
1188 | bb_gain31
1189 | 20
1190 |
1191 |
1192 | ant31
1193 |
1194 |
1195 |
1196 | bw31
1197 | 0
1198 |
1199 |
1200 | alias
1201 |
1202 |
1203 |
1204 | affinity
1205 |
1206 |
1207 |
1208 | _coordinate
1209 | (1035, 167)
1210 |
1211 |
1212 | _rotation
1213 | 0
1214 |
1215 |
1216 |
1217 | analog_nbfm_tx_0
1218 | osmosdr_sink_0
1219 | 0
1220 | 0
1221 |
1222 |
1223 | analog_sig_source_x_0
1224 | analog_nbfm_tx_0
1225 | 0
1226 | 0
1227 |
1228 |
1229 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # hackrf-dvb-t
2 | DVB-T(2) for HackRF/rad1o
3 |
4 | Cloned in 2021 in order to push it further.
5 |
--------------------------------------------------------------------------------
/create-test.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | gst-launch-1.0 videotestsrc ! video/x-raw,width=1024,height=576,framerate=25/1 ! \
4 | textoverlay text="realraum DVB-T Test" shaded-background=true font-desc="Ubuntu 20" ! \
5 | videoscale ! video/x-raw,width=720,height=576 ! jpegenc ! queue ! mux. \
6 | audiotestsrc ! audio/x-raw,channels=2,rate=48000 ! audioconvert ! \
7 | vorbisenc bitrate=250000 ! queue ! mux. \
8 | matroskamux name=mux ! filesink location=test.mkv
9 |
--------------------------------------------------------------------------------
/dvbsnooper_1.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/realraum/hackrf-dvb-t/3691c3acadcccfbf35a1f298eedc2cfcf2486b08/dvbsnooper_1.txt
--------------------------------------------------------------------------------
/dvbsnooper_2.txt:
--------------------------------------------------------------------------------
1 | dvbsnoop V1.4.50 -- http://dvbsnoop.sourceforge.net/
2 |
3 | ------------------------------------------------------------
4 | SECT-Packet: 00000001 PID: 0 (0x0000), Length: 24 (0x0018)
5 | Time received: Sat 2016-02-27 16:54:31.552
6 | ------------------------------------------------------------
7 | PID: 0 (0x0000) [= assigned for: ISO 13818-1 Program Association Table (PAT)]
8 |
9 | Guess table from table id...
10 | PAT-decoding....
11 | Table_ID: 0 (0x00) [= Program Association Table (PAT)]
12 | section_syntax_indicator: 1 (0x01)
13 | (fixed): 0 (0x00)
14 | reserved_1: 3 (0x03)
15 | Section_length: 21 (0x0015)
16 | Transport_Stream_ID: 500 (0x01f4)
17 | reserved_2: 3 (0x03)
18 | Version_number: 10 (0x0a)
19 | current_next_indicator: 1 (0x01) [= valid now]
20 | Section_number: 0 (0x00)
21 | Last_Section_number: 0 (0x00)
22 |
23 | Program_number: 10101 (0x2775)
24 | reserved: 7 (0x07)
25 | Program_map_PID: 501 (0x01f5)
26 |
27 | Program_number: 10112 (0x2780)
28 | reserved: 7 (0x07)
29 | Program_map_PID: 502 (0x01f6)
30 |
31 | Program_number: 10132 (0x2794)
32 | reserved: 7 (0x07)
33 | Program_map_PID: 503 (0x01f7)
34 |
35 | CRC: 1976516666 (0x75cf403a)
36 | ==========================================================
37 |
38 |
39 | ------------------------------------------------------------
40 | SECT-Packet: 00000001 PID: 501 (0x01f5), Length: 126 (0x007e)
41 | Time received: Sat 2016-02-27 16:54:31.680
42 | ------------------------------------------------------------
43 | PID: 501 (0x01f5)
44 |
45 | Guess table from table id...
46 | PMT-decoding....
47 | Table_ID: 2 (0x02) [= Program Map Table (PMT)]
48 | section_syntax_indicator: 1 (0x01)
49 | (fixed '0'): 0 (0x00)
50 | reserved_1: 3 (0x03)
51 | Section_length: 123 (0x007b)
52 | Program_number: 10101 (0x2775)
53 | reserved_2: 3 (0x03)
54 | Version_number: 17 (0x11)
55 | current_next_indicator: 1 (0x01) [= valid now]
56 | Section_number: 0 (0x00)
57 | Last_Section_number: 0 (0x00)
58 | reserved_3: 7 (0x07)
59 | PCR PID: 5010 (0x1392)
60 | reserved_4: 15 (0x0f)
61 | Program_info_length: 0 (0x0000)
62 |
63 | Stream_type loop:
64 |
65 | Stream_type: 2 (0x02) [= ITU-T Rec. H.262 | ISO/IEC 13818-2 Video | ISO/IEC 11172-2 constr. parameter video stream]
66 | reserved_1: 7 (0x07)
67 | Elementary_PID: 5010 (0x1392)
68 | reserved_2: 15 (0x0f)
69 | ES_info_length: 3 (0x0003)
70 |
71 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
72 | descriptor_length: 1 (0x01)
73 | component_tag: 1 (0x01)
74 |
75 |
76 | Stream_type: 3 (0x03) [= ISO/IEC 11172 Audio]
77 | reserved_1: 7 (0x07)
78 | Elementary_PID: 5011 (0x1393)
79 | reserved_2: 15 (0x0f)
80 | ES_info_length: 9 (0x0009)
81 |
82 | MPEG-DescriptorTag: 10 (0x0a) [= ISO_639_language_descriptor]
83 | descriptor_length: 4 (0x04)
84 | ISO639_language_code: ger
85 | Audio_type: 1 (0x01) [= clean effects]
86 |
87 |
88 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
89 | descriptor_length: 1 (0x01)
90 | component_tag: 2 (0x02)
91 |
92 |
93 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
94 | reserved_1: 7 (0x07)
95 | Elementary_PID: 5013 (0x1395)
96 | reserved_2: 15 (0x0f)
97 | ES_info_length: 12 (0x000c)
98 |
99 | MPEG-DescriptorTag: 10 (0x0a) [= ISO_639_language_descriptor]
100 | descriptor_length: 4 (0x04)
101 | ISO639_language_code: ger
102 | Audio_type: 1 (0x01) [= clean effects]
103 |
104 |
105 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
106 | descriptor_length: 1 (0x01)
107 | component_tag: 5 (0x05)
108 |
109 | DVB-DescriptorTag: 106 (0x6a) [= AC3_descriptor]
110 | descriptor_length: 1 (0x01)
111 | component_type_flag: 0 (0x00)
112 | bsid_flag: 0 (0x00)
113 | mainid_flag: 0 (0x00)
114 | asvc_flag: 0 (0x00)
115 | reserved: 0 (0x00)
116 |
117 |
118 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
119 | reserved_1: 7 (0x07)
120 | Elementary_PID: 5014 (0x1396)
121 | reserved_2: 15 (0x0f)
122 | ES_info_length: 19 (0x0013)
123 |
124 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
125 | descriptor_length: 1 (0x01)
126 | component_tag: 6 (0x06)
127 |
128 | DVB-DescriptorTag: 69 (0x45) [= VBI_data_descriptor]
129 | descriptor_length: 6 (0x06)
130 |
131 | Data_service_id: 4 (0x04) [= VPS (Video Programming System)]
132 | Data_service_descriptor_length: 1 (0x01)
133 |
134 | reserved_1: 3 (0x03)
135 | field_parity: 1 (0x01)
136 | line_offset: 16 (0x10)
137 |
138 | Data_service_id: 5 (0x05) [= WSS (Wide Screen Signalling)]
139 | Data_service_descriptor_length: 1 (0x01)
140 |
141 | reserved_1: 3 (0x03)
142 | field_parity: 1 (0x01)
143 | line_offset: 23 (0x17)
144 |
145 | DVB-DescriptorTag: 195 (0xc3) [= User defined]
146 | descriptor_length: 6 (0x06)
147 | Descriptor-data:
148 | 0000: 04 01 f0 05 01 f7 ......
149 |
150 |
151 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
152 | reserved_1: 7 (0x07)
153 | Elementary_PID: 5015 (0x1397)
154 | reserved_2: 15 (0x0f)
155 | ES_info_length: 10 (0x000a)
156 |
157 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
158 | descriptor_length: 1 (0x01)
159 | component_tag: 4 (0x04)
160 |
161 | DVB-DescriptorTag: 86 (0x56) [= teletext_descriptor]
162 | descriptor_length: 5 (0x05)
163 | ISO639_language_code: ger
164 | Teletext_type: 1 (0x01) [= initial teletext page]
165 | Teletext_magazine_number: 1 (0x01)
166 | Teletext_page_number: 0 (0x00)
167 |
168 |
169 |
170 | Stream_type: 5 (0x05) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private sections]
171 | reserved_1: 7 (0x07)
172 | Elementary_PID: 7410 (0x1cf2)
173 | reserved_2: 15 (0x0f)
174 | ES_info_length: 8 (0x0008)
175 |
176 | DVB-DescriptorTag: 111 (0x6f) [= application_signalling_descriptor]
177 | descriptor_length: 3 (0x03)
178 | Application type: 16 (0x0010)
179 | reserved: 7 (0x07)
180 | AIT version nr.: 0 (0x00)
181 |
182 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
183 | descriptor_length: 1 (0x01)
184 | component_tag: 21 (0x15)
185 |
186 |
187 | Stream_type: 11 (0x0b) [= ISO/IEC 13818-6 DSM-CC U-N Messages]
188 | reserved_1: 7 (0x07)
189 | Elementary_PID: 7411 (0x1cf3)
190 | reserved_2: 15 (0x0f)
191 | ES_info_length: 14 (0x000e)
192 |
193 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
194 | descriptor_length: 1 (0x01)
195 | component_tag: 22 (0x16)
196 |
197 | MPEG-DescriptorTag: 19 (0x13) [= carousel_identifier_descriptor]
198 | descriptor_length: 5 (0x05)
199 | Carousel_id: 7411 (0x00001cf3)
200 | format_id: 0 (0x00)
201 |
202 | DVB-DescriptorTag: 102 (0x66) [= data_broadcast_id_descriptor]
203 | descriptor_length: 2 (0x02)
204 | Data_broadcast_ID: 291 (0x0123) [= >>ERROR: not (yet) defined... Report!<<]
205 |
206 | CRC: 3394287989 (0xca50b975)
207 | ==========================================================
208 |
209 |
210 | ------------------------------------------------------------
211 | SECT-Packet: 00000001 PID: 502 (0x01f6), Length: 126 (0x007e)
212 | Time received: Sat 2016-02-27 16:54:32.104
213 | ------------------------------------------------------------
214 | PID: 502 (0x01f6)
215 |
216 | Guess table from table id...
217 | PMT-decoding....
218 | Table_ID: 2 (0x02) [= Program Map Table (PMT)]
219 | section_syntax_indicator: 1 (0x01)
220 | (fixed '0'): 0 (0x00)
221 | reserved_1: 3 (0x03)
222 | Section_length: 123 (0x007b)
223 | Program_number: 10112 (0x2780)
224 | reserved_2: 3 (0x03)
225 | Version_number: 23 (0x17)
226 | current_next_indicator: 1 (0x01) [= valid now]
227 | Section_number: 0 (0x00)
228 | Last_Section_number: 0 (0x00)
229 | reserved_3: 7 (0x07)
230 | PCR PID: 5020 (0x139c)
231 | reserved_4: 15 (0x0f)
232 | Program_info_length: 0 (0x0000)
233 |
234 | Stream_type loop:
235 |
236 | Stream_type: 2 (0x02) [= ITU-T Rec. H.262 | ISO/IEC 13818-2 Video | ISO/IEC 11172-2 constr. parameter video stream]
237 | reserved_1: 7 (0x07)
238 | Elementary_PID: 5020 (0x139c)
239 | reserved_2: 15 (0x0f)
240 | ES_info_length: 3 (0x0003)
241 |
242 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
243 | descriptor_length: 1 (0x01)
244 | component_tag: 3 (0x03)
245 |
246 |
247 | Stream_type: 3 (0x03) [= ISO/IEC 11172 Audio]
248 | reserved_1: 7 (0x07)
249 | Elementary_PID: 5021 (0x139d)
250 | reserved_2: 15 (0x0f)
251 | ES_info_length: 9 (0x0009)
252 |
253 | MPEG-DescriptorTag: 10 (0x0a) [= ISO_639_language_descriptor]
254 | descriptor_length: 4 (0x04)
255 | ISO639_language_code: ger
256 | Audio_type: 1 (0x01) [= clean effects]
257 |
258 |
259 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
260 | descriptor_length: 1 (0x01)
261 | component_tag: 4 (0x04)
262 |
263 |
264 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
265 | reserved_1: 7 (0x07)
266 | Elementary_PID: 5023 (0x139f)
267 | reserved_2: 15 (0x0f)
268 | ES_info_length: 12 (0x000c)
269 |
270 | MPEG-DescriptorTag: 10 (0x0a) [= ISO_639_language_descriptor]
271 | descriptor_length: 4 (0x04)
272 | ISO639_language_code: ger
273 | Audio_type: 1 (0x01) [= clean effects]
274 |
275 |
276 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
277 | descriptor_length: 1 (0x01)
278 | component_tag: 7 (0x07)
279 |
280 | DVB-DescriptorTag: 106 (0x6a) [= AC3_descriptor]
281 | descriptor_length: 1 (0x01)
282 | component_type_flag: 0 (0x00)
283 | bsid_flag: 0 (0x00)
284 | mainid_flag: 0 (0x00)
285 | asvc_flag: 0 (0x00)
286 | reserved: 0 (0x00)
287 |
288 |
289 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
290 | reserved_1: 7 (0x07)
291 | Elementary_PID: 5024 (0x13a0)
292 | reserved_2: 15 (0x0f)
293 | ES_info_length: 19 (0x0013)
294 |
295 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
296 | descriptor_length: 1 (0x01)
297 | component_tag: 8 (0x08)
298 |
299 | DVB-DescriptorTag: 69 (0x45) [= VBI_data_descriptor]
300 | descriptor_length: 6 (0x06)
301 |
302 | Data_service_id: 4 (0x04) [= VPS (Video Programming System)]
303 | Data_service_descriptor_length: 1 (0x01)
304 |
305 | reserved_1: 3 (0x03)
306 | field_parity: 1 (0x01)
307 | line_offset: 16 (0x10)
308 |
309 | Data_service_id: 5 (0x05) [= WSS (Wide Screen Signalling)]
310 | Data_service_descriptor_length: 1 (0x01)
311 |
312 | reserved_1: 3 (0x03)
313 | field_parity: 1 (0x01)
314 | line_offset: 23 (0x17)
315 |
316 | DVB-DescriptorTag: 195 (0xc3) [= User defined]
317 | descriptor_length: 6 (0x06)
318 | Descriptor-data:
319 | 0000: 04 01 f0 05 01 f7 ......
320 |
321 |
322 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
323 | reserved_1: 7 (0x07)
324 | Elementary_PID: 5025 (0x13a1)
325 | reserved_2: 15 (0x0f)
326 | ES_info_length: 10 (0x000a)
327 |
328 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
329 | descriptor_length: 1 (0x01)
330 | component_tag: 5 (0x05)
331 |
332 | DVB-DescriptorTag: 86 (0x56) [= teletext_descriptor]
333 | descriptor_length: 5 (0x05)
334 | ISO639_language_code: ger
335 | Teletext_type: 1 (0x01) [= initial teletext page]
336 | Teletext_magazine_number: 1 (0x01)
337 | Teletext_page_number: 0 (0x00)
338 |
339 |
340 |
341 | Stream_type: 5 (0x05) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private sections]
342 | reserved_1: 7 (0x07)
343 | Elementary_PID: 7410 (0x1cf2)
344 | reserved_2: 15 (0x0f)
345 | ES_info_length: 8 (0x0008)
346 |
347 | DVB-DescriptorTag: 111 (0x6f) [= application_signalling_descriptor]
348 | descriptor_length: 3 (0x03)
349 | Application type: 16 (0x0010)
350 | reserved: 7 (0x07)
351 | AIT version nr.: 0 (0x00)
352 |
353 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
354 | descriptor_length: 1 (0x01)
355 | component_tag: 21 (0x15)
356 |
357 |
358 | Stream_type: 11 (0x0b) [= ISO/IEC 13818-6 DSM-CC U-N Messages]
359 | reserved_1: 7 (0x07)
360 | Elementary_PID: 7411 (0x1cf3)
361 | reserved_2: 15 (0x0f)
362 | ES_info_length: 14 (0x000e)
363 |
364 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
365 | descriptor_length: 1 (0x01)
366 | component_tag: 22 (0x16)
367 |
368 | MPEG-DescriptorTag: 19 (0x13) [= carousel_identifier_descriptor]
369 | descriptor_length: 5 (0x05)
370 | Carousel_id: 7411 (0x00001cf3)
371 | format_id: 0 (0x00)
372 |
373 | DVB-DescriptorTag: 102 (0x66) [= data_broadcast_id_descriptor]
374 | descriptor_length: 2 (0x02)
375 | Data_broadcast_ID: 291 (0x0123) [= >>ERROR: not (yet) defined... Report!<<]
376 |
377 | CRC: 1798674472 (0x6b359828)
378 | ==========================================================
379 |
380 |
381 | ------------------------------------------------------------
382 | SECT-Packet: 00000001 PID: 503 (0x01f7), Length: 126 (0x007e)
383 | Time received: Sat 2016-02-27 16:54:32.224
384 | ------------------------------------------------------------
385 | PID: 503 (0x01f7)
386 |
387 | Guess table from table id...
388 | PMT-decoding....
389 | Table_ID: 2 (0x02) [= Program Map Table (PMT)]
390 | section_syntax_indicator: 1 (0x01)
391 | (fixed '0'): 0 (0x00)
392 | reserved_1: 3 (0x03)
393 | Section_length: 123 (0x007b)
394 | Program_number: 10132 (0x2794)
395 | reserved_2: 3 (0x03)
396 | Version_number: 24 (0x18)
397 | current_next_indicator: 1 (0x01) [= valid now]
398 | Section_number: 0 (0x00)
399 | Last_Section_number: 0 (0x00)
400 | reserved_3: 7 (0x07)
401 | PCR PID: 5020 (0x139c)
402 | reserved_4: 15 (0x0f)
403 | Program_info_length: 0 (0x0000)
404 |
405 | Stream_type loop:
406 |
407 | Stream_type: 2 (0x02) [= ITU-T Rec. H.262 | ISO/IEC 13818-2 Video | ISO/IEC 11172-2 constr. parameter video stream]
408 | reserved_1: 7 (0x07)
409 | Elementary_PID: 5020 (0x139c)
410 | reserved_2: 15 (0x0f)
411 | ES_info_length: 3 (0x0003)
412 |
413 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
414 | descriptor_length: 1 (0x01)
415 | component_tag: 3 (0x03)
416 |
417 |
418 | Stream_type: 3 (0x03) [= ISO/IEC 11172 Audio]
419 | reserved_1: 7 (0x07)
420 | Elementary_PID: 5021 (0x139d)
421 | reserved_2: 15 (0x0f)
422 | ES_info_length: 9 (0x0009)
423 |
424 | MPEG-DescriptorTag: 10 (0x0a) [= ISO_639_language_descriptor]
425 | descriptor_length: 4 (0x04)
426 | ISO639_language_code: ger
427 | Audio_type: 1 (0x01) [= clean effects]
428 |
429 |
430 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
431 | descriptor_length: 1 (0x01)
432 | component_tag: 4 (0x04)
433 |
434 |
435 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
436 | reserved_1: 7 (0x07)
437 | Elementary_PID: 5023 (0x139f)
438 | reserved_2: 15 (0x0f)
439 | ES_info_length: 12 (0x000c)
440 |
441 | MPEG-DescriptorTag: 10 (0x0a) [= ISO_639_language_descriptor]
442 | descriptor_length: 4 (0x04)
443 | ISO639_language_code: ger
444 | Audio_type: 1 (0x01) [= clean effects]
445 |
446 |
447 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
448 | descriptor_length: 1 (0x01)
449 | component_tag: 7 (0x07)
450 |
451 | DVB-DescriptorTag: 106 (0x6a) [= AC3_descriptor]
452 | descriptor_length: 1 (0x01)
453 | component_type_flag: 0 (0x00)
454 | bsid_flag: 0 (0x00)
455 | mainid_flag: 0 (0x00)
456 | asvc_flag: 0 (0x00)
457 | reserved: 0 (0x00)
458 |
459 |
460 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
461 | reserved_1: 7 (0x07)
462 | Elementary_PID: 5024 (0x13a0)
463 | reserved_2: 15 (0x0f)
464 | ES_info_length: 19 (0x0013)
465 |
466 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
467 | descriptor_length: 1 (0x01)
468 | component_tag: 8 (0x08)
469 |
470 | DVB-DescriptorTag: 69 (0x45) [= VBI_data_descriptor]
471 | descriptor_length: 6 (0x06)
472 |
473 | Data_service_id: 4 (0x04) [= VPS (Video Programming System)]
474 | Data_service_descriptor_length: 1 (0x01)
475 |
476 | reserved_1: 3 (0x03)
477 | field_parity: 1 (0x01)
478 | line_offset: 16 (0x10)
479 |
480 | Data_service_id: 5 (0x05) [= WSS (Wide Screen Signalling)]
481 | Data_service_descriptor_length: 1 (0x01)
482 |
483 | reserved_1: 3 (0x03)
484 | field_parity: 1 (0x01)
485 | line_offset: 23 (0x17)
486 |
487 | DVB-DescriptorTag: 195 (0xc3) [= User defined]
488 | descriptor_length: 6 (0x06)
489 | Descriptor-data:
490 | 0000: 04 01 f0 05 01 f7 ......
491 |
492 |
493 | Stream_type: 6 (0x06) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data]
494 | reserved_1: 7 (0x07)
495 | Elementary_PID: 5025 (0x13a1)
496 | reserved_2: 15 (0x0f)
497 | ES_info_length: 10 (0x000a)
498 |
499 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
500 | descriptor_length: 1 (0x01)
501 | component_tag: 5 (0x05)
502 |
503 | DVB-DescriptorTag: 86 (0x56) [= teletext_descriptor]
504 | descriptor_length: 5 (0x05)
505 | ISO639_language_code: ger
506 | Teletext_type: 1 (0x01) [= initial teletext page]
507 | Teletext_magazine_number: 1 (0x01)
508 | Teletext_page_number: 0 (0x00)
509 |
510 |
511 |
512 | Stream_type: 5 (0x05) [= ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private sections]
513 | reserved_1: 7 (0x07)
514 | Elementary_PID: 7410 (0x1cf2)
515 | reserved_2: 15 (0x0f)
516 | ES_info_length: 8 (0x0008)
517 |
518 | DVB-DescriptorTag: 111 (0x6f) [= application_signalling_descriptor]
519 | descriptor_length: 3 (0x03)
520 | Application type: 16 (0x0010)
521 | reserved: 7 (0x07)
522 | AIT version nr.: 0 (0x00)
523 |
524 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
525 | descriptor_length: 1 (0x01)
526 | component_tag: 21 (0x15)
527 |
528 |
529 | Stream_type: 11 (0x0b) [= ISO/IEC 13818-6 DSM-CC U-N Messages]
530 | reserved_1: 7 (0x07)
531 | Elementary_PID: 7411 (0x1cf3)
532 | reserved_2: 15 (0x0f)
533 | ES_info_length: 14 (0x000e)
534 |
535 | DVB-DescriptorTag: 82 (0x52) [= stream_identifier_descriptor]
536 | descriptor_length: 1 (0x01)
537 | component_tag: 22 (0x16)
538 |
539 | MPEG-DescriptorTag: 19 (0x13) [= carousel_identifier_descriptor]
540 | descriptor_length: 5 (0x05)
541 | Carousel_id: 7411 (0x00001cf3)
542 | format_id: 0 (0x00)
543 |
544 | DVB-DescriptorTag: 102 (0x66) [= data_broadcast_id_descriptor]
545 | descriptor_length: 2 (0x02)
546 | Data_broadcast_ID: 291 (0x0123) [= >>ERROR: not (yet) defined... Report!<<]
547 |
548 | CRC: 799201788 (0x2fa2d9fc)
549 | ==========================================================
550 |
551 |
552 | ------------------------------------------------------------
553 | SECT-Packet: 00000001 PID: 7410 (0x1cf2), Length: 125 (0x007d)
554 | Time received: Sat 2016-02-27 16:54:32.920
555 | ------------------------------------------------------------
556 | PID: 7410 (0x1cf2)
557 |
558 | Guess table from table id...
559 | AIT-decoding....
560 | Table_ID: 116 (0x74) [= MHP- Application Information Table (AIT)]
561 | Section_syntax_indicator: 1 (0x01)
562 | reserved_1: 1 (0x01)
563 | reserved_2: 3 (0x03)
564 | section_length: 122 (0x007a)
565 | test_application_flag: 0 (0x00)
566 | application_type: 16 (0x0010) [= subject to registration with DVB]
567 | reserved_3: 3 (0x03)
568 | Version_number: 2 (0x02)
569 | Current_next_indicator: 1 (0x01) [= valid now]
570 | Section_number: 0 (0x00)
571 | Last_section_number: 0 (0x00)
572 | reserved_4: 15 (0x0f)
573 | common_descriptors_length: 0 (0x0000)
574 |
575 | reserved_5: 15 (0x0f)
576 | application_loop_length: 109 (0x006d)
577 | organisation_id: 13 (0x0000000d)
578 | appliction_id: 2 (0x0002) [= unsigned applications]
579 | application_control_code: 1 (0x01) [= AUTOSTART]
580 | reserved: 15 (0x0f)
581 | application_descriptor_loop_length: 100 (0x0064)
582 |
583 | MHP_AIT-DescriptorTag: 2 (0x02) [= Transport protocol descriptor]
584 | descriptor_length: 37 (0x25)
585 | protocol_id: 3 (0x0003) [= Transport via HTTP over the interaction channel]
586 | transport_protocol_label: 0 (0x00)
587 |
588 | URL_base_length: 32 (0x20)
589 | URL_base: "http://orfhbbtv.orf.apa.net/orf/"
590 |
591 | URL_extension_length: 0 (0x00)
592 | URL_extension: ""
593 |
594 | MHP_AIT-DescriptorTag: 2 (0x02) [= Transport protocol descriptor]
595 | descriptor_length: 5 (0x05)
596 | protocol_id: 1 (0x0001) [= MHP Object Carousel]
597 | transport_protocol_label: 1 (0x01)
598 | remote_connection: 0 (0x00)
599 | reserved: 127 (0x7f)
600 | component_tag: 22 (0x16)
601 |
602 | MHP_AIT-DescriptorTag: 0 (0x00) [= Application descriptor]
603 | descriptor_length: 10 (0x0a)
604 | application_profile_length: 5 (0x05)
605 |
606 | application_profile: 0 (0x0000)
607 | version.major: 1 (0x01)
608 | version.minor: 1 (0x01)
609 | version.micro: 1 (0x01)
610 |
611 | service_bound_flag: 0 (0x00)
612 | visibility: 3 (0x03) [= application visible to user and appl. listening api]
613 | reserved: 31 (0x1f)
614 | application_priority: 5 (0x05)
615 | transport_protocol_label: 0 (0x00)
616 | transport_protocol_label: 1 (0x01)
617 |
618 | MHP_AIT-DescriptorTag: 1 (0x01) [= Application name descriptor]
619 | descriptor_length: 17 (0x11)
620 | ISO639_language_code: deu
621 | application_name_length: 13 (0x0d)
622 | application_name: "ORF HbbTV - T" -- Charset: Latin alphabet
623 |
624 |
625 | MHP_AIT-DescriptorTag: 21 (0x15) [= reserved to MHP]
626 | descriptor_length: 21 (0x15)
627 | ----> ERROR: unimplemented descriptor (MHP_AIT context), Report!
628 | Descriptor-data:
629 | 0000: 6e 65 77 73 70 6f 72 74 61 6c 2f 69 6e 64 65 78 newsportal/index
630 | 0010: 2e 68 74 6d 6c .html
631 |
632 | CRC: 3806169792 (0xe2dd8ac0)
633 | ==========================================================
634 |
635 |
636 | ------------------------------------------------------------
637 | SECT-Packet: 00000001 PID: 7411 (0x1cf3), Length: 4096 (0x1000)
638 | Time received: Sat 2016-02-27 16:54:33.024
639 | ------------------------------------------------------------
640 | PID: 7411 (0x1cf3)
641 |
642 | Guess table from table id...
643 | DSM-CC-decoding....
644 | Table_ID: 60 (0x3c) [= DSM-CC - Download Data Messages (DDB)]
645 | Section_syntax_indicator: 1 (0x01)
646 | private_indicator: 0 (0x00)
647 | reserved_1: 3 (0x03)
648 | dsmcc_section_length: 4093 (0x0ffd)
649 | table_id_extension: 75 (0x004b)
650 | reserved_3: 3 (0x03)
651 | Version_number: 2 (0x02)
652 | Current_next_indicator: 1 (0x01) [= valid now]
653 | Section_number: 5 (0x05)
654 | Last_section_number: 7 (0x07)
655 | DSM-CC Message Header:
656 | protocolDiscriminator: 17 (0x11)
657 | dsmccType: 3 (0x03) [= Download message]
658 | messageId: 4099 (0x1003) [= DownloadDataBlock (DDB)]
659 | downloadId: 7411 (0x00001cf3)
660 | reserved: 255 (0xff)
661 | adaptationLength: 0 (0x00)
662 | messageLength: 4072 (0x0fe8)
663 | moduleId: 75 (0x004b)
664 | moduleVersion: 2 (0x02)
665 | reserved: 255 (0xff)
666 | blockNumber: 5 (0x0005)
667 | Block Data:
668 | 0000: da d5 9c 75 d4 a7 a5 41 a5 5e 09 56 68 db 2a c4 ...u...A.^.Vh.*.
669 | 0010: 9c 0e 41 ed 8f 4a e6 ef bc 33 a6 6a 1a 76 ab a7 ..A..J...3.j.v..
670 | 0020: 5c 59 5d 3c 97 79 db 75 2c b9 74 f4 e7 1d 3a 56 \Y]<.y.u,.t...:V
671 | 0030: dc 3a 08 4c 3d a4 4f 1c bf df 72 4f 1f 85 17 ba .:.L=.O...rO....
672 | 0040: 55 cc 90 04 49 fe ce ae d8 62 01 25 e9 54 8c 65 U...I....b.%.T.e
673 | 0050: 1e 54 f5 29 3d 6f ba 3e 4f b8 4d 4b c3 1a 84 96 .T.)=o.>O.MK....
674 | 0060: 77 d7 52 8d 5a c1 c2 bc c8 4a 9e 0f 04 9e e3 83 w.R.Z....J......
675 | 0070: 5d 4c 46 e7 5a 48 ee 2e 48 8e 56 4c 4d 78 cb 9f ]LF.ZH..H.VLMx..
676 | 0080: 93 d3 fc fa d7 5d f1 93 c2 ea 2c ec f5 6b 68 cc .....]....,..kh.
677 | 0090: 92 c4 de 44 84 2e 3c c6 e3 00 fe b5 e6 5a 76 a5 ...D..<......Zv.
678 | 00a0: 71 30 8a 0b 8d f1 a8 38 00 70 a2 bd dc 2c dd 5a q0.....8.p...,.Z
679 | 00b0: 0a fb 9e 46 22 31 85 66 ec 6d 6b 36 56 51 6a be ...F"1.f.mk6VQj.
680 | 00c0: 1b fe cb d3 12 05 89 1c cf 79 11 09 e6 a0 2a 36 .........y....*6
681 | 00d0: e3 1d 7f 1a f5 bb 38 0e 91 68 46 9c b2 9b 33 28 ......8..hF...3(
682 | 00e0: 98 4a 23 2e c5 5f 0a 54 0e f9 c7 eb 5e 5b ab cd .J#.._.T....^[..
683 | 00f0: 2b 5a 58 db b2 ed 6b 7d cd 1b 2f f1 29 23 39 fd +ZX...k}../.)#9.
684 | 0100: 2b d5 fe 10 6a 57 3e 22 f3 f4 f4 dd 74 f0 45 94 +...jW>"....t.E.
685 | 0110: 88 60 61 39 c9 e7 ae 39 ac b1 94 93 a1 cc b7 4f .`a9...9.......O
686 | 0120: fe 01 58 5a 8f db 59 f5 47 a0 f8 07 c2 fa 7f 82 ..XZ..Y.G.......
687 | 0130: ca de 58 69 d6 76 c9 74 cd 31 92 68 81 70 cc 72 ..Xi.v.t.1.h.p.r
688 | 0140: 7e 5e 08 3c 9a f6 1f 02 df e9 77 77 9a 85 d5 c5 ~^.<......ww....
689 | 0150: cc 92 4f 19 05 7e d2 f9 f2 c7 3f 70 1f ba 2b ca ..O..~....?p..+.
690 | 0160: 2d 62 d6 99 5a 38 6c 6e 16 45 25 63 f3 36 e7 6f -b..Z8ln.E%c.6.o
691 | 0170: a8 1f e3 5b fe 16 d1 75 b6 d5 21 be d4 6d 55 05 ...[...u..!..mU.
692 | 0180: ba be c6 6c e5 c6 07 65 38 e3 de bc a5 3b 2d 11 ...l...e8....;-.
693 | 0190: e8 49 49 e8 fa 1e ce 2e ad b5 54 86 ee d0 14 2c .II.......T....,
694 | 01a0: 4e 25 0b b4 b0 04 8f e9 51 dd ea d0 c3 e6 db c1 N%......Q.......
695 | 01b0: 32 cb 75 b0 9d 85 b9 cf d2 bc af e1 af 8b f5 90 2.u.............
696 | 01c0: 6f 6c 75 bb 2b a3 6d 1c 8f 22 5d ce d1 a8 db b8 olu.+.m.."].....
697 | 01d0: fc aa 01 e3 f1 15 7e 6f 10 6a da e4 7a 8d de 8f ......~o.j..z...
698 | 01e0: a3 c3 6b 34 6e 61 82 6b 86 cb 48 39 19 c2 9f 61 ..k4na.k..H9...a
699 | 01f0: da a2 ee 42 8a 5b 14 7c 65 af 5f ea 91 58 e8 1a ...B.[.|e._..X..
700 | 0200: 06 8f f6 fb b6 9b cf 95 82 e2 38 d0 10 79 38 38 ..........8..y88
701 | 0210: 27 69 15 cf ff 00 66 4a fa d5 95 8e bd 61 6d 6f 'i....fJ.....amo
702 | 0220: 6a f2 6e bc 66 9c 22 a2 60 e1 41 23 9c 9c 71 5c j.n.f.".`.A#..q\
703 | 0230: d6 8b a6 7c 42 d2 f5 bd 47 fe 12 bd 4e 38 74 e9 ...|B...G...N8t.
704 | 0240: a2 2b 6f 13 15 f3 24 dd 91 91 b7 a6 33 45 cf 87 .+o...$.....3E..
705 | 0250: 35 2b 53 90 c6 58 17 05 d5 e4 3b 9b fe fa 35 ac 5+S..X....;...5.
706 | 0260: 35 bf 33 b0 e6 b9 52 51 57 bf 53 d2 12 1d 07 59 5.3...RQW.S....Y
707 | 0270: d4 0e 9c fa 0e 8f 12 45 21 44 fb 3c 88 c4 a8 fb .......E!D.<....
708 | 0280: ac a4 0f af 15 a5 61 e1 79 74 fd 52 e2 de 53 14 ......a.yt.R..S.
709 | 0290: 91 46 a6 48 19 b9 48 32 30 14 8f 5e 73 f4 35 cc .F.H..H20..^s.5.
710 | 02a0: f8 4e ea 2d 2b 53 b5 b4 9e 01 a6 47 26 24 69 25 .N.-+S.....G&$i%
711 | 02b0: c3 27 e0 fc e3 f1 35 cc 7c 5c f8 93 a8 a6 99 75 .'....5.|\.....u
712 | 02c0: 67 e0 7b f8 ef e3 91 c2 5c bd c2 14 11 f3 ea 00 g.{.....\.......
713 | 02d0: 27 a7 6f 5a c6 52 84 75 6c b5 4e 72 7c a9 1e ab '.oZ.R.ul.Nr|...
714 | 02e0: aa 5d 6a f6 5e 15 dd 69 3d 8c ba b5 a4 8c ad 75 .]j.^..i=......u
715 | 02f0: 30 0a 90 c4 3a b0 62 7b 60 57 39 ae de 59 6b 91 0...:.b{`W9..Yk.
716 | 0300: 40 bf 67 d2 35 b3 75 87 cc ea a8 b2 b8 f5 27 3c @.g.5.u.......'<
717 | 0310: f1 8a e3 3c 23 27 f6 bf c3 ab bf 0e 65 2e ae b5 ...<#'......e...
718 | 0320: 34 0b 7f 71 6e ee 62 84 30 38 40 cc 72 5b 93 9c 4..qn.b.08@.r[..
719 | 0330: 67 a5 26 81 e1 44 f8 5d a5 d8 69 be 1d d2 ee f5 g.&..D.]..i.....
720 | 0340: a8 65 bb 2d 7d 2c 92 86 92 0c e3 0e 32 7e ee 7f .e.-},......2~..
721 | 0350: 91 a4 fd e5 71 28 f2 ca c7 53 06 8d a1 f8 38 2d ....q(...S....8-
722 | 0360: ea e8 96 fe 1e 9a 55 65 9d 6d 18 18 03 13 9e 70 ......Ue.m.....p
723 | 0370: 00 24 8a e5 45 87 87 b5 c9 e1 b2 b6 d3 92 ca 4f .$..E..........O
724 | 0380: 33 ce b1 96 3c 23 b2 b7 5c 9c 72 a7 03 f5 a8 bc 3...<#..\.r.....
725 | 0390: 67 e1 7b bf 1b 46 6f d7 c4 ed e1 e9 60 98 ad bd g.{..Fo.....`...
726 | 03a0: 9d d1 56 59 24 19 50 48 50 4e d2 32 7f 11 59 d7 ..VY$.PHPN.2..Y.
727 | 03b0: ff 00 0e 75 bf 0d 68 de 1a 9a c6 38 f4 ed 6d 58 ...u..h....8..mX
728 | 03c0: 41 a8 dd 99 59 e2 9a 11 b7 e6 19 27 1d 5b 18 c1 A...Y......'.[..
729 | 03d0: e6 b3 94 67 6e c6 d1 71 d9 8f d6 8e b2 97 1a 8d ...gn..q........
730 | 03e0: 9e b3 a9 49 6d 68 b1 8f 28 b4 46 34 85 01 1d 64 ...Imh..(.F4...d
731 | 03f0: 27 18 e0 9f c6 a8 42 61 d4 6c 5e 4d 03 55 b5 d5 '.....Ba.l^M.U..
732 | 0400: a5 b6 8b 11 c9 2c 82 28 89 23 a8 62 48 27 8e b5 .....,.(.#.bH'..
733 | 0410: 17 c5 1b fd 23 59 f0 57 fc 23 ba ef 89 25 82 38 ....#Y.W.#...%.8
734 | 0420: 9b cf 9e 73 19 12 dc 26 70 17 85 e9 bb 1f 80 af ...s...&p.......
735 | 0430: 98 5b 55 9e 1f 11 e9 de 1a f0 f6 a5 25 d5 8b 95 .[U.........%...
736 | 0440: 42 eb c7 96 87 b7 41 9f d6 aa 14 a3 2d 59 32 a9 B.....A.....-Y2.
737 | 0450: 28 bb 23 da f5 7d 2f c4 1e 3e 92 c4 99 20 b1 d3 (.#..}/..>... ..
738 | 0460: ed 24 dc 8b bb 70 2e 0f e1 9e d4 dd 43 e1 dc 46 .$...p......C..F
739 | 0470: 68 e7 d4 f5 28 b5 3b 9c f1 f6 89 41 44 f6 0a 6b h...(.;....AD..k
740 | 0480: a2 be b8 9a 2d 3a de d3 4d 45 8a 08 90 2b 15 c9 ....-:..ME...+..
741 | 0490: 39 f4 ac 16 b7 9e e3 ca 1e 70 80 64 af cf 92 09 9........p.d....
742 | 04a0: ae f8 51 8c 56 9a 1c 93 ad 29 33 26 ff 00 c1 fa ..Q.V....)3&....
743 | 04b0: 7b 44 d0 4f aa 6e 8e 61 87 86 ca d4 c7 c7 a6 ec {D.O.n.a........
744 | 04c0: 9f e5 5d 17 82 f4 0b 3d 2f 51 b5 b2 f0 6e 8c 1f ..]....=/Q...n..
745 | 04d0: 57 9c 1d 97 37 07 cc 99 0e 08 c8 6c 02 a3 15 b5 W...7......l....
746 | 04e0: 6f a0 68 7a 4c 16 72 5d ea 0f 35 e3 37 cc a0 8f o.hzL.r]..5.7...
747 | 04f0: 6f 6c 57 d0 1a 37 82 a7 d0 99 35 2d 16 ce ca 5b olW..7....5-...[
748 | 0500: eb 98 97 74 d3 6e c4 6a 54 63 18 35 56 a6 96 84 ...t.n.jTc.5V...
749 | 0510: 73 4d e8 7c db e3 ef 81 5a 8d 95 c0 d6 be 24 df sM.|....Z.....$.
750 | 0520: df 6b b0 72 63 6b 69 8f 93 6e 47 f0 9e a1 40 f5 .k.rcki..nG...@.
751 | 0530: f6 ae 73 c3 de 13 d0 f4 39 27 d4 f4 4b 36 58 e7 ..s.....9'..K6X.
752 | 0540: 8e 2f 34 33 86 c4 a2 4f 97 6f 1c 12 76 fd 6b eb ./43...O.o..v.k.
753 | 0550: 7b ad 43 5a b6 65 82 e4 69 f7 2c cd 89 50 83 e4 {.CZ.e..i.,..P..
754 | 0560: b8 f7 dd df f4 eb 58 be 1a f0 0e 8d a0 eb bf db ......X.........
755 | 0570: f1 c2 ba 59 9d 5a 35 d3 9e 45 31 3b 80 4e e4 dc ...Y.Z5..E1;.N..
756 | 0580: 4f 3c fa f6 ae 79 c3 9d a7 1d 0d e1 3e 48 b5 2e O<...y......>H..
757 | 0590: a6 45 86 bd 1e 8f 65 6e b7 e5 e0 9a 58 d5 ca 38 .E....en....X..8
758 | 05a0: c1 1c 51 5e 93 7d 24 d7 73 09 20 d3 20 99 0a 81 ..Q^.}$.s. . ...
759 | 05b0: fb c0 84 82 07 3d 28 ae f5 24 91 c9 69 1f 95 fe .....=(..$..i...
760 | 05c0: 1d b6 87 5f d4 6e 2c ee 6d fc b1 3a 80 11 9c f9 ..._.n,.m..:....
761 | 05d0: 85 f9 ef d4 e3 8a fa ee 2f 80 bf 08 fe 0f f8 67 ......../......g
762 | 05e0: 45 d4 3e 26 5c 6a b7 fa be a1 10 92 01 6c e4 6c E.>&\j.......l.l
763 | 05f0: dc 09 1f 2e e1 c0 e9 5f 2c 68 d6 d2 5b 6b c2 27 ......._,h..[k.'
764 | 0600: 63 6d 29 5d f1 c8 cb 97 4c e7 91 8e dc 57 dd be cm)]....L....W..
765 | 0610: 11 f1 1f 81 7f 68 8f 0c e9 de 11 f1 74 20 eb 96 .....h......t ..
766 | 0620: 10 04 b7 71 90 d9 41 b4 3a 9e dc 76 35 c7 75 7b ...q..A.:..v5.u{
767 | 0630: 1d 36 d0 f9 76 ef 40 be 92 6d 63 58 d0 f4 ad 45 .6..v.@..mcX...E
768 | 0640: 3c 35 04 d2 2c 37 cd 1e e5 f2 d4 f1 b8 e7 8c 0a <5..,7..........
769 | 0650: 9a 1d 0f 53 93 45 8f 54 d3 f4 6d 46 6d 39 8a 9f ...S.E.T..mFm9..
770 | 0660: b6 b4 65 51 d8 b6 d0 14 e7 b9 c0 af a5 7e 10 f8 ..eQ.........~..
771 | 0670: 78 e9 7e 1f f8 95 f0 be ec fd a4 d9 79 a9 6a 5d x.~.........y.j]
772 | 0680: 83 19 11 f7 8e 83 a7 dd 14 ef 89 f7 51 7c 3d f8 ............Q|=.
773 | 0690: 69 f0 f3 c2 11 c0 55 ee 2f e2 8e 54 55 ce c5 13 i.....U./..TU...
774 | 06a0: 6f 04 fe 22 97 29 5c ec f9 e6 6f 05 f8 a1 03 cc o..".)\...o.....
775 | 06b0: da 15 e5 b2 2c 42 49 44 91 60 85 e3 9f a7 35 eb ....,BID.`....5.
776 | 06c0: 7e 35 f0 a7 82 93 e1 ff 00 86 ae 21 8a eb 47 b9 ~5.........!..G.
777 | 06d0: 95 4f 9d 75 22 63 70 e3 23 af 5e b5 dd 7e d3 1f .O.u"cp.#.^..~..
778 | 06e0: 11 af fc 31 a3 d9 f8 73 43 b6 b6 8d f5 ab 3d b7 ...1...sC.....=.
779 | 06f0: 17 12 46 59 96 31 b4 61 70 46 0f 23 9e 6a 0f 88 ..FY.1.apF.#.j..
780 | 0700: 56 62 e7 e1 cf c2 6b 63 14 72 2c da 85 b4 72 06 Vb....kc.r,...r.
781 | 0710: 38 f9 1a 48 c3 7e 84 d0 90 b9 9b 3c 0e 2f 85 fe 8..H.~.....<./..
782 | 0720: 25 8a 09 b5 3d 23 4d d4 2e 34 40 37 a5 e1 b7 e1 %...=#M..4@7....
783 | 0730: 93 d4 f3 59 de 1e f0 83 6b 42 f3 50 d1 f4 fb ed ...Y....kB.P....
784 | 0740: 4c c6 80 5c 14 52 c1 07 38 e3 3d 7a d7 dc 5a 84 L..\.R..8.=z..Z.
785 | 0750: 27 44 f1 b5 b4 f7 de 2b d3 74 ed 01 2c be cf fd 'D.....+.t..,...
786 | 0760: 99 71 71 1c 64 9e 30 70 c4 7a 57 9a 7c 1a ba 82 .qq.d.0p.zW.|...
787 | 0770: c7 c5 bf 18 e5 d2 de 19 60 b5 9d 4d b1 4c 14 2a ........`..M.L.*
788 | 0780: 0c b8 20 8e 08 3e d4 9c 17 51 f3 9f 3e 5d f8 27 .. ..>...Q..>].'
789 | 0790: 53 d2 6d a2 d4 35 1f 0e ea 56 96 00 7f ac b8 83 S.m..5...V......
790 | 07a0: 6a b1 ed 8e 7d 71 57 ac bc 3d 77 0e 9c 9a a7 89 j...}qW..=w.....
791 | 07b0: 34 09 f4 db 29 32 2d e5 9b 29 14 99 e9 b7 8f 4a 4...)2-..).....J
792 | 07c0: f7 7d 3b c5 b7 fe 32 f8 0f e2 9d 4b 5c b9 37 32 .};...2....K\.72
793 | 07d0: 45 72 55 1d 87 dd 50 eb 80 2b c9 35 3f 8c 3a 87 ErU...P..+.5?.:.
794 | 07e0: 8e fc 25 a6 f8 7a ea 0b 4f b1 69 e6 30 5e 3f be ..%..z..O.i.0^?.
795 | 07f0: db 14 aa 93 cf 71 9c f1 53 24 91 51 94 a4 45 a4 .....q..S$.Q..E.
796 | 0800: 6b 7a 97 87 50 0d 27 50 68 21 1b b0 af 70 c5 72 kz..P.'Ph!...p.r
797 | 0810: c3 19 c5 74 fe 3a b8 d2 1e 0f 0e 5e 49 e2 01 71 ...t.:.....^I..q
798 | 0820: ac c6 9b 9c a8 de b9 39 ee 4f 1d 7a 62 b8 c8 f6 .......9.O.zb...
799 | 0830: 24 6d 28 b7 3c 2e d5 0b d7 eb 50 2e b3 65 63 fb $m(.<.....P..ec.
800 | 0840: db 88 f6 31 1b 76 84 3b c7 bd 65 19 72 ec 68 e3 ...1.v.;..e.r.h.
801 | 0850: b3 35 6e 2f f5 ad 52 f9 ae 2f b5 58 a7 96 12 cd .5n/..R../.X....
802 | 0860: 02 ee f2 a3 56 f5 0a 38 f4 ac 1f 19 e9 3a fe b9 ....V..8.....:..
803 | 0870: 2a 5e 5b c9 0a dd a4 40 4e 21 90 86 07 3c 63 03 *^[....@N!...>..:M..6
805 | 0890: 31 dc 32 24 d7 04 6f 65 07 d3 20 fe 95 d7 0f 82 1.2$..oe.. .....
806 | 08a0: f7 7e 48 df ab ed ba db b7 cd 0c 08 3f 41 5a 26 .~H.........?AZ&
807 | 08b0: f7 6b 42 5b b3 d1 9e 5b e1 0d 4a eb c3 9a 1d c6 .kB[...[..J.....
808 | 08c0: 8f af 85 be 92 57 32 85 23 cd 29 9c 92 b9 3c f7 .....W2.#.)...<.
809 | 08d0: e9 ed 57 ad 1d a2 61 75 a7 35 bc 12 c8 a0 22 4a ..W...au.5...."J
810 | 08e0: fb 59 14 1f bb 8c 70 39 35 9d e3 3b 2b ef 0a 6b .Y....p95..;+..k
811 | 08f0: 83 4a 96 f2 2b f6 55 0c 6e 15 70 3b 60 1f 7e 6b .J..+.U.n.p;`.~k
812 | 0900: 9b 8e 1b 5b f7 91 af ae e6 95 18 fc a5 50 91 93 ...[.........P..
813 | 0910: eb 81 d0 56 d7 a3 ca 9e a9 9c f6 af 76 9d ac 69 ...V........v..i
814 | 0920: 6a b6 b7 de 27 d5 a4 75 d6 ed 34 9f b3 48 ac 14 j...'..u..4..H..
815 | 0930: c6 0a 16 03 19 c7 73 8c d3 bc 55 6f 7d 24 89 70 ......s...Uo}$.p
816 | 0940: b7 da 7d f2 a8 11 99 23 9b 73 c9 ee 46 38 3f 8d ..}....#.s..F8?.
817 | 0950: 73 d7 de 1a b2 bb b6 7b 78 e4 11 a7 48 ee 16 51 s......{x...H..Q
818 | 0960: bd 5b 39 e3 f5 a9 c6 99 25 bc 51 8b 6b b2 58 82 .[9.....%.Q.k.X.
819 | 0970: 1c b0 fb e7 fb d5 94 a7 cc ef 23 75 05 15 68 95 ..........#u..h.
820 | 0980: 5f 53 b9 93 6c 1e 23 b6 bf bd b7 27 10 b0 b9 72 _S..l.#....'...r
821 | 0990: b1 0e 9c 0e 83 bd 75 6b e0 ff 00 0f dc e9 09 2d ......uk.......-
822 | 09a0: a6 a1 3d ad ee 42 aa 48 37 23 93 d0 92 4f 1f 95 ..=..B.H7#...O..
823 | 09b0: 73 ff 00 62 9e 02 ef 1c 99 51 c3 91 52 a4 ba 85 s..b.....Q..R...
824 | 09c0: d4 d0 85 96 59 64 e8 b9 18 50 a3 de a5 38 ee 8b ....Yd...P...8..
825 | 09d0: 6a 5a 6a 24 5a 5b 69 97 8e 9a bd ac cc c4 ed 31 jZj$Z[i........1
826 | 09e0: c6 c7 3c 77 15 a1 ac 41 6f a7 5b 41 79 a7 43 2b ...b1.\(NQW..U.-.
844 | 0b00: 49 4f 28 47 10 1f c0 47 38 a2 ec 56 46 e5 ae b7 IO(G...G8..VF...
845 | 0b10: 06 c0 c1 02 be 48 c2 1d c0 d4 87 53 26 3f 36 39 .....H.....S&?69
846 | 0b20: 36 10 46 17 a6 3f 0a aa 34 a3 71 88 e3 55 08 c3 6.F..?..4.q..U..
847 | 0b30: 2a 43 0c 03 f5 ab 27 48 e6 31 6e 55 1b 00 1d e0 *C....'H.1nU....
848 | 0b40: 9c d1 79 3d c2 c9 17 a2 d4 99 be 6d db 01 ec ad ..y=.......m....
849 | 0b50: 5a 10 3a 79 61 a4 71 2b 1e 76 b3 60 e3 d6 b9 17 Z.:ya.q+.v.`....
850 | 0b60: d1 ee 1b cc 59 ae 23 ca 9c 8d 80 ae 3f 33 4c 83 ....Y.#.....?3L.
851 | 0b70: 44 dc 64 97 cf 97 27 e5 cb 9c 7e 54 6a 0c da f1 D.d...'...~Tj...
852 | 0b80: 96 83 67 af f8 63 52 b4 52 f1 49 e4 34 b1 94 39 ..g..cR.R.I.4..9
853 | 0b90: 39 00 90 47 bd 7c 7f a5 de 41 f6 b9 ed 91 ca c6 9..G.|...A......
854 | 0ba0: cc 42 f9 ed 99 01 07 9e 0f 6e 0f 7a fa de 08 c5 .B.......n.z....
855 | 0bb0: a9 46 17 6e a8 98 2f 8e a1 47 51 5f 2d f9 32 c7 .F.n../..GQ_-.2.
856 | 0bc0: af 6b 06 ca 2d d6 a6 76 65 46 71 86 cd 7a f9 7b .k..-..veFq..z.{
857 | 0bd0: 7e f5 d6 87 97 8d 51 bc 5d f5 35 b5 44 b6 4d 13 ~.....Q.].5.D.M.
858 | 0be0: 4e be b8 b9 94 32 4f e5 fc cb 80 77 74 1d 79 1c N....2O....wt.y.
859 | 0bf0: 57 59 f0 a6 fd fc 3b e3 5b 0b 8b 49 0f 97 23 6c WY....;.[..I..#l
860 | 0c00: 62 a7 04 06 18 fc b9 ae 33 c4 5a ca 0d 13 4e d3 b.......3.Z...N.
861 | 0c10: de 2f b2 cb 6d 20 96 5b 76 95 4a 11 d8 ee e9 9f ./..m .[v.J.....
862 | 0c20: c6 ba 1f 84 ba 0e a3 ad 6a a9 a9 58 6e b5 d3 ac ........j..Xn...
863 | 0c30: fe 6f 3a 55 24 4b 20 e8 a3 d4 67 19 23 d6 b6 a9 .o:U$K ...g.#...
864 | 0c40: 5a 31 84 93 ea 61 4e 8c a4 d5 ba 1f 4c 6a 3e 38 Z1...aN.....Lj>8
865 | 0c50: 87 4c d6 ef 6e 2f 2f f0 a0 05 46 32 91 c6 d1 c7 .L..n//...F2....
866 | 0c60: e7 53 f8 3b 58 f1 ec 06 7d 46 f2 c6 cd b4 69 e3 .S.;X...}F....i.
867 | 0c70: 32 ac 26 f9 9a 55 52 38 20 6c ea 7e bd ab ce b5 2.&..UR8 l.~....
868 | 0c80: af 07 be bf 12 dd 6b 2f 0c 9a 82 31 c2 c0 0a a6 ......k/...1....
869 | 0c90: 33 90 08 24 f6 f7 ad 01 a9 f8 ba c5 48 f0 ed a4 3..$........H...
870 | 0ca0: 7b 52 0d 88 8d 28 71 1e 07 50 01 e9 5e 32 8a 4b {R...(q..P..^2.K
871 | 0cb0: 73 d5 6b 7d 0e b2 c2 ef 5a d4 f5 56 b3 1a 5d c5 s.k}....Z..V..].
872 | 0cc0: 9c 53 29 91 e6 ba 24 46 a3 27 00 7a 9c e3 8a d1 .S)...$F.'.z....
873 | 0cd0: d1 34 59 ad 16 77 bd f1 3b dc de 45 74 5d 63 b4 .4Y..w..;..Et]c.
874 | 0ce0: 4f 95 00 27 e4 2a 0e 0f ff 00 5a b9 ed 0f 5e bc O..'.*....Z...^.
875 | 0cf0: 87 47 30 ea d7 ae f7 72 3e f9 cb 29 18 6f 41 e8 .G0....r>..).oA.
876 | 0d00: 3a 52 9f 11 5f c1 77 14 fe 1d 8e dd e4 93 02 e6 :R.._.w.........
877 | 0d10: 47 90 2e 17 d7 69 20 93 f4 a4 e5 70 e5 3b 3b dd G....i ....p.;;.
878 | 0d20: 12 e3 59 d6 17 5f fb 44 12 c9 0a a2 c5 6d 31 c6 ..Y.._.D.....m1.
879 | 0d30: e5 cf 24 f5 da 79 38 eb 58 da ae 90 da 85 cc 9a ..$..y8.X.......
880 | 0d40: 6e ae 75 40 d3 c8 27 8b 51 86 df 28 8a 3f e5 93 n.u@..'.Q..(.?..
881 | 0d50: fc c3 03 9c 0e b9 03 35 ca da 5c f8 c6 db 5b 5b .......5..\...[[
882 | 0d60: 88 de c2 e6 c7 78 e7 3b 46 df f7 4b 67 3d 6b b0 .....x.;F..Kg=k.
883 | 0d70: d5 3c 5d a9 c7 6b 23 d8 da 8d 52 49 08 46 83 cd .<]..k#...RI.F..
884 | 0d80: 50 22 18 fb d4 39 68 1c b6 66 e6 af e1 78 fc 49 P"...9h..f...x.I
885 | 0d90: a5 5e 68 6f 14 90 d8 cb 10 8d a6 0b b5 94 e0 8f .^ho............
886 | 0da0: 93 d0 8f ad 79 9c 4f e0 1f 0e 5a be 95 e2 18 6f ....y.O...Z....o
887 | 0db0: 2e b5 1b 56 2a 04 8f bd 65 20 71 bc 13 c7 18 f5 ...V*...e q.....
888 | 0dc0: ae a2 c3 c5 2f 6d 36 9f 6d 7f 2b dd 2c 11 60 5c ..../m6.m.+.,.`\
889 | 0dd0: 31 c1 52 7a e4 f4 3d 05 71 1a 6f 81 3c 25 37 88 1.Rz..=.q.o.<%7.
890 | 0de0: 75 1b db 8d 42 f5 2d 6f dc ba 45 9f 90 49 d0 9e u...B.-o..E..I..
891 | 0df0: 57 d8 f7 a8 b5 3b fb e8 d2 f5 22 bd c7 63 a5 8b W....;...."..c..
892 | 0e00: e2 97 c3 dd 0b c2 4d 65 65 6c d6 d2 3f ef 7e c7 ......Meel..?.~.
893 | 0e10: 68 81 59 a5 3c 92 84 11 d0 9e be f5 cb e9 9a ee h.Y.<...........
894 | 0e20: a3 f1 02 5d 1e ce 0d 7e 7d 02 28 e5 33 cb 71 6f ...]...~}.(.3.qo
895 | 0e30: 16 e9 6e 55 79 f2 4f 23 ae 31 d4 f5 aa 63 e1 96 ..nUy.O#.1...c..
896 | 0e40: a1 77 3d fc 96 17 ba 7c 2d 14 ac 2c 9c 8e 76 64 .w=....|-..,..vd
897 | 0e50: e3 77 3e 98 cf 4a e0 35 ad 3b c5 ff 00 0f f5 88 .w>..J.5.;......
898 | 0e60: ec b4 8b cd 3e e6 28 a4 4b b6 bc 63 b6 28 30 d9 ....>.(.K..c.(0.
899 | 0e70: 65 5f 9b e6 c8 5e 80 9e b4 ee b9 ac b6 15 b4 bc e_...^..........
900 | 0e80: 9e a7 d3 fe 14 f0 ee 9f e2 4d 36 6b bd 7a c9 56 .........M6k.z.V
901 | 0e90: fe 49 a4 8a 29 24 40 1d 55 18 aa b7 d7 00 1a a2 .I..)$@.U.......
902 | 0ea0: d7 d7 9e 17 d6 23 d1 35 6b 85 d7 34 4b 9d a8 93 .....#.5k..4K...
903 | 0eb0: cd 10 22 09 b3 80 a7 39 ee 45 71 df 0f 7e 25 45 .."....9.Eq..~%E
904 | 0ec0: e2 38 b5 09 a1 99 b4 5b db c7 5f 36 7b 98 5a 38 .8.....[.._6{.Z8
905 | 0ed0: 65 0a 36 99 23 dd 8c 1c 8f 53 d6 a0 f1 27 c5 ed e.6.#....S...'..
906 | 0ee0: 17 47 ba 9f 4b 86 f9 b5 28 ed 14 16 b8 89 4b 99 .G..K...(.....K.
907 | 0ef0: e7 39 dc 77 01 83 d0 63 1e b5 d7 3a 9c 91 bb 39 .9.w...c...:...9
908 | 0f00: e1 07 37 64 7a 83 78 53 4f f1 3d b0 bc bf d0 f4 ..7dz.xSO.=.....
909 | 0f10: bf b6 db 93 1b 47 71 64 8e 92 2f 6e 48 e3 a8 ed .....Gqd../nH...
910 | 0f20: 5e 6b f1 47 43 d0 7c 25 a3 47 7d 7f e0 ef 0e 68 ^k.GC.|%.G}....h
911 | 0f30: b2 c9 32 c3 0d dd 96 d5 95 09 cf cd 80 83 d3 d6 ..2.............
912 | 0f40: b2 7c 1b f1 73 c5 9e 3b 17 3a 4f 84 a0 87 4b b5 .|..s..;.:O...K.
913 | 0f50: b6 52 d2 6a 3a 8c 0e bb 13 3c f2 4a 8d df d2 b3 .R.j:....<.J....
914 | 0f60: fe 2d 78 44 78 83 e1 75 fa e9 ba da f8 b3 5f 8a .-xDx..u......_.
915 | 0f70: 4f b4 49 34 73 ab 21 00 1c aa 63 bf 23 8c 93 55 O.I4s.!...c.#..U
916 | 0f80: 19 29 2d 55 95 85 25 cb a5 cc 8d 7b 54 8f c3 d6 .)-U..%....{T...
917 | 0f90: ad e5 b2 3b 48 40 58 b3 ce 70 0f 03 bd 79 9e ab ...;H@X..p...y..
918 | 0fa0: e2 8d 62 5d d6 b2 47 0d ba 33 79 91 ef 6d 8c 3f ..b]..G..3y..m.?
919 | 0fb0: 21 ef 5e a9 e0 af 85 71 6a 5a 0e 93 75 f1 1b 52 !.^....qjZ..u..R
920 | 0fc0: 6d 06 66 8f ca 8e 08 67 4f 39 bd 0b 13 91 9e 7a m.f....gO9.....z
921 | 0fd0: 60 1a f7 4f 0d fc 3e f0 6f c3 ad 36 5b 9d 2a c2 `..O..>.o..6[.*.
922 | 0fe0: 11 20 .
923 | CRC: 961531203 (0x394fcd43)
924 | ==========================================================
925 |
926 |
--------------------------------------------------------------------------------
/dvbt-bitrate.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 |
3 | # Copyright 2015 Christian Pointner
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | import sys
19 | import dvbt
20 | from dvbtconfig import DVBTConfig
21 |
22 | def main(args):
23 | nargs = len(args)
24 | if nargs == 0:
25 | short = False
26 | elif nargs == 1 and args[0] == "--short":
27 | short = True
28 | else:
29 | sys.stderr.write("Usage: dvbt-bitrate.py [ --short ]\n");
30 | sys.exit(1)
31 |
32 | ## Config Options
33 | config = DVBTConfig('dvbt.conf')
34 |
35 | # DVB-T Parameters
36 | channel_mhz = config.get_channel_mhz()
37 | mode = config.get_mode()
38 | code_rate = config.get_code_rate()
39 | constellation = config.get_constellation()
40 | guard_interval = config.get_guard_interval()
41 |
42 | ##
43 |
44 | # this is based on the formula found at:
45 | # http://www.dveo.com/broadcast/bit-rate-calculation-for-COFDM-modulation.shtml
46 | #
47 | # DVB-T modulator maximum play rate depends on code rate, constellation, guard interval, bandwidth.
48 | # The maximum bit rate can be calculated as below.
49 | #
50 | # TBandwidth = {6,000,000, 7,000,000, 8,000,000} in Hz for 6MHz, 7MHz, 8MHz
51 | # TCodeRate = {1/2, 2/3, 3/4, 5/6, 7/8}
52 | # TConstellation = {2, 4, 6} <- QPSK = 2, 16QAM=4, 64QAM = 6
53 | # TGuardInterval = {4/5, 8/9, 16/17, 32/33}, 1/4 = 4/5, 1/8 = 8/9, 1/16 => 16/17, 1/32 => 32/33}
54 | # 2K/8K mode does not matter
55 | #
56 | # Maximum bit rate = 1512 / 2048 * 188 / 204 * 64 / 56 * TBandwidth * TcodeRate * TConstellation * TGuardInterval (bps)
57 | # = 423 / 544 * TBandwidth * TCodeRate * TConstellation * TGuardInterval (bps)
58 | #
59 |
60 | TBandwidth = channel_mhz * 1000000
61 |
62 | TCodeRate = 0.0
63 | if code_rate == dvbt.C1_2:
64 | TCodeRate = 1.0/2.0
65 | elif code_rate == dvbt.C2_3:
66 | TCodeRate = 2.0/3.0
67 | elif code_rate == dvbt.C3_4:
68 | TCodeRate = 3.0/4.0
69 | elif code_rate == dvbt.C5_6:
70 | TCodeRate = 5.0/6.0
71 | elif code_rate == dvbt.C7_8:
72 | TCodeRate = 7.0/8.0
73 | else:
74 | raise ValueError("invalid cod_rate")
75 |
76 | TConstellation = 0
77 | if constellation == dvbt.QPSK:
78 | TConstellation = 2
79 | elif constellation == dvbt.QAM16:
80 | TConstellation = 4
81 | elif constellation == dvbt.QAM64:
82 | TConstellation = 6
83 | else:
84 | raise ValueError("invalid constellation")
85 |
86 | TGuardInterval = 0.0
87 | if guard_interval == dvbt.G1_32:
88 | TGuardInterval = 32.0/33.0
89 | elif guard_interval == dvbt.G1_16:
90 | TGuardInterval = 16.0/17.0
91 | elif guard_interval == dvbt.G1_8:
92 | TGuardInterval = 8.0/9.0
93 | elif guard_interval == dvbt.G1_4:
94 | TGuardInterval = 4.0/5.0
95 | else:
96 | raise ValueError("invalid guard_interval")
97 |
98 |
99 | MaxBitrate = 423.0 / 544.0 * TBandwidth * TCodeRate * TConstellation * TGuardInterval
100 |
101 | if short:
102 | print("%d" % MaxBitrate)
103 | else:
104 | print("Maximum Bitrate = %d bps (%9.3f kbps, %6.3f Mbps)" % (MaxBitrate, MaxBitrate/1000, MaxBitrate/(1000000)))
105 |
106 | if __name__ == '__main__':
107 | main(sys.argv[1:])
108 |
--------------------------------------------------------------------------------
/dvbt-hackrf.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 |
3 | # Copyright 2014 Ron Economos (w6rz@comcast.net)
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | from gnuradio import blocks
19 | from gnuradio import digital
20 | from gnuradio import fft
21 | from gnuradio import gr
22 | from gnuradio import filter
23 | from gnuradio.fft import window
24 | import dvbt
25 | import osmosdr
26 | import sys
27 | from dvbtconfig import DVBTConfig
28 |
29 | def main(args):
30 | nargs = len(args)
31 | if nargs == 1:
32 | infile = args[0]
33 | outfile = None
34 | elif nargs == 2:
35 | infile = args[0]
36 | outfile = args[1]
37 | else:
38 | sys.stderr.write("Usage: dvbt-hackrf.py infile [output_file]\n");
39 | sys.exit(1)
40 |
41 | ## Config Options
42 | config = DVBTConfig('dvbt.conf')
43 |
44 | # DVB-T Parameters
45 | channel_mhz = config.get_channel_mhz()
46 | mode = config.get_mode()
47 | code_rate = config.get_code_rate()
48 | constellation = config.get_constellation()
49 | guard_interval = config.get_guard_interval()
50 |
51 | # Hack-RF Parameters
52 | center_freq = config.get_center_freq()
53 | rf_gain = config.get_hackrf_rf_gain()
54 | if_gain = config.get_hackrf_if_gain()
55 | bb_gain = config.get_hackrf_bb_gain()
56 |
57 | ##
58 |
59 | samp_rate = 10000000.0
60 |
61 | if mode == dvbt.T2k:
62 | factor = 1
63 | carriers = 2048
64 | elif mode == dvbt.T8k:
65 | factor = 4
66 | carriers = 8192
67 |
68 | if guard_interval == dvbt.G1_32:
69 | gi = carriers / 32
70 | elif guard_interval == dvbt.G1_16:
71 | gi = carriers / 16
72 | elif guard_interval == dvbt.G1_8:
73 | gi = carriers / 8
74 | elif guard_interval == dvbt.G1_4:
75 | gi = carriers / 4
76 |
77 | if channel_mhz == 8:
78 | bandwidth = 8750000
79 | elif channel_mhz == 7:
80 | bandwidth = 7000000
81 | elif channel_mhz == 6:
82 | bandwidth = 6000000
83 | elif channel_mhz == 5:
84 | bandwidth = 5000000
85 | else:
86 | bandwidth = 8750000
87 |
88 | log=gr.logger("dvbt-hackrf")
89 | log.set_level("DEBUG");
90 | log.debug("logger initilized")
91 |
92 | tb = gr.top_block()
93 | log.debug("top block initialized")
94 |
95 | src = blocks.file_source(gr.sizeof_char, infile, True)
96 | log.debug("source block initialized")
97 |
98 | dvbt_energy_dispersal = dvbt.energy_dispersal(1 * factor)
99 | dvbt_reed_solomon_enc = dvbt.reed_solomon_enc(2, 8, 0x11d, 255, 239, 8, 51, (8 * factor))
100 | dvbt_convolutional_interleaver = dvbt.convolutional_interleaver((136 * factor), 12, 17)
101 | dvbt_inner_coder = dvbt.inner_coder(1, (1512 * factor), constellation, dvbt.NH, code_rate)
102 | dvbt_bit_inner_interleaver = dvbt.bit_inner_interleaver((1512 * factor), constellation, dvbt.NH, mode)
103 | dvbt_symbol_inner_interleaver = dvbt.symbol_inner_interleaver((1512 * factor), mode, 1)
104 | dvbt_dvbt_map = dvbt.dvbt_map((1512 * factor), constellation, dvbt.NH, mode, 1)
105 | dvbt_reference_signals = dvbt.reference_signals(gr.sizeof_gr_complex, (1512 * factor), carriers, constellation, dvbt.NH, code_rate, code_rate, dvbt.G1_32, mode, 0, 0)
106 | fft_vxx = fft.fft_vcc(carriers, False, (window.rectangular(carriers)), True, 10)
107 | digital_ofdm_cyclic_prefixer = digital.ofdm_cyclic_prefixer(carriers, carriers+(gi), 0, "")
108 | rational_resampler_xxx = filter.rational_resampler_ccc(interpolation=70, decimation=64, taps=None, fractional_bw=None)
109 | blocks_multiply_const_vxx = blocks.multiply_const_vcc((0.0022097087, ))
110 | log.debug("DVB-T blocks initialized")
111 |
112 | out = osmosdr.sink(args="numchan=1")
113 | out.set_sample_rate(samp_rate)
114 | out.set_center_freq(center_freq, 0)
115 | out.set_freq_corr(0, 0)
116 | out.set_gain(rf_gain, 0)
117 | out.set_if_gain(if_gain, 0)
118 | out.set_bb_gain(bb_gain, 0)
119 | out.set_antenna("", 0)
120 | out.set_bandwidth(0, 0)
121 | log.debug("Output block initialized")
122 |
123 | tb.connect(src, dvbt_energy_dispersal)
124 | tb.connect(dvbt_energy_dispersal, dvbt_reed_solomon_enc)
125 | tb.connect(dvbt_reed_solomon_enc, dvbt_convolutional_interleaver)
126 | tb.connect(dvbt_convolutional_interleaver, dvbt_inner_coder)
127 | tb.connect(dvbt_inner_coder, dvbt_bit_inner_interleaver)
128 | tb.connect(dvbt_bit_inner_interleaver, dvbt_symbol_inner_interleaver)
129 | tb.connect(dvbt_symbol_inner_interleaver, dvbt_dvbt_map)
130 | tb.connect(dvbt_dvbt_map, dvbt_reference_signals)
131 | tb.connect(dvbt_reference_signals, fft_vxx)
132 | tb.connect(fft_vxx, digital_ofdm_cyclic_prefixer)
133 | tb.connect(digital_ofdm_cyclic_prefixer, blocks_multiply_const_vxx)
134 | tb.connect(blocks_multiply_const_vxx, rational_resampler_xxx)
135 | tb.connect(rational_resampler_xxx, out)
136 | log.debug("all blocks connected")
137 |
138 | if outfile:
139 | dst = blocks.file_sink(gr.sizeof_gr_complex, outfile)
140 | tb.connect(blocks_multiply_const_vxx, dst)
141 |
142 | log.debug("running gnuradio")
143 | tb.run()
144 |
145 |
146 | if __name__ == '__main__':
147 | main(sys.argv[1:])
148 |
--------------------------------------------------------------------------------
/dvbt-tsrfsend.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 |
3 | # Copyright 2015 Christian Pointner
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | import os
19 | import sys
20 | import dvbt
21 | from dvbtconfig import DVBTConfig
22 |
23 | def main(args):
24 | nargs = len(args)
25 | if nargs == 1:
26 | infile = args[0]
27 | device = '0'
28 | elif nargs == 2:
29 | infile = args[0]
30 | device = args[1]
31 | else:
32 | sys.stderr.write("Usage: dvbt-hackrf.py infile [device-index (default=0)]\n");
33 | sys.exit(1)
34 |
35 | gainDBm = '3'
36 |
37 | ## Config Options
38 | config = DVBTConfig('dvbt.conf')
39 |
40 | # DVB-T Parameters
41 | channel_mhz = config.get_channel_mhz()
42 | mode = config.get_mode()
43 | code_rate = config.get_code_rate()
44 | constellation = config.get_constellation()
45 | guard_interval = config.get_guard_interval()
46 |
47 | # HF Parameters
48 | center_freq = '%d' % (config.get_center_freq()/1000)
49 | gain = '%d' % config.get_tsrfsend_gain()
50 | cell_id = '%d' % config.get_tsrfsend_cell_id()
51 |
52 |
53 | ##
54 |
55 | # this is based on the formula found at:
56 | # http://www.dveo.com/broadcast/bit-rate-calculation-for-COFDM-modulation.shtml
57 | #
58 | # DVB-T modulator maximum play rate depends on code rate, constellation, guard interval, bandwidth.
59 | # The maximum bit rate can be calculated as below.
60 | #
61 | # TBandwidth = {6,000,000, 7,000,000, 8,000,000} in Hz for 6MHz, 7MHz, 8MHz
62 | # TCodeRate = {1/2, 2/3, 3/4, 5/6, 7/8}
63 | # TConstellation = {2, 4, 6} <- QPSK = 2, 16QAM=4, 64QAM = 6
64 | # TGuardInterval = {4/5, 8/9, 16/17, 32/33}, 1/4 = 4/5, 1/8 = 8/9, 1/16 => 16/17, 1/32 => 32/33}
65 | # 2K/8K mode does not matter
66 | #
67 | # Maximum bit rate = 1512 / 2048 * 188 / 204 * 64 / 56 * TBandwidth * TcodeRate * TConstellation * TGuardInterval (bps)
68 | # = 423 / 544 * TBandwidth * TCodeRate * TConstellation * TGuardInterval (bps)
69 | #
70 |
71 | argBW = '%d' % (channel_mhz * 1000)
72 |
73 | argCR = '1/2'
74 | if code_rate == dvbt.C1_2:
75 | argCR = '1/2'
76 | elif code_rate == dvbt.C2_3:
77 | argCR = '2/3'
78 | elif code_rate == dvbt.C3_4:
79 | argCR = '3/4'
80 | elif code_rate == dvbt.C5_6:
81 | argCR = '5/6'
82 | elif code_rate == dvbt.C7_8:
83 | argCR = '7/8'
84 | else:
85 | raise ValueError("invalid cod_rate")
86 |
87 | argCO = '4'
88 | if constellation == dvbt.QPSK:
89 | argCO = '4'
90 | elif constellation == dvbt.QAM16:
91 | argCO = '16'
92 | elif constellation == dvbt.QAM64:
93 | argCO = '64'
94 | else:
95 | raise ValueError("invalid constellation")
96 |
97 | argGI = '1/4'
98 | if guard_interval == dvbt.G1_32:
99 | argGI = '1/32'
100 | elif guard_interval == dvbt.G1_16:
101 | argGI = '1/16'
102 | elif guard_interval == dvbt.G1_8:
103 | argGI = '1/8'
104 | elif guard_interval == dvbt.G1_4:
105 | argGI = '1/4'
106 | else:
107 | raise ValueError("invalid guard_interval")
108 |
109 | argMO = '2'
110 | if mode == dvbt.T2k:
111 | argMO = '2'
112 | elif mode == dvbt.T8k:
113 | argMO = '8'
114 | else:
115 | raise ValueError("invalid guard_interval")
116 |
117 | os.execl('./tsrfsend', 'tsrfsend', infile, device, center_freq, argBW, argCO, argCR, argGI, argMO, cell_id, gain)
118 |
119 | if __name__ == '__main__':
120 | main(sys.argv[1:])
121 |
--------------------------------------------------------------------------------
/dvbt.conf:
--------------------------------------------------------------------------------
1 | [dvb-t]
2 | bandwith = 8
3 | mode = 2k
4 | code-rate = 1/2
5 | constellation = QPSK
6 | guard-interval = 1/4
7 |
8 | [channel]
9 | frequency = 642000000
10 |
11 | [hackrf]
12 | rf-gain = 14
13 | if-gain = 42
14 | bb-gain = 40
15 |
16 | [tsrfsend]
17 | cell-id = 0
18 | gain = 3
19 |
--------------------------------------------------------------------------------
/dvbt2/create-test.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | gst-launch-1.0 videotestsrc ! video/x-raw,width=1920,height=1080,framerate=25/1 ! \
4 | textoverlay text="realraum DVB-T2 Test" shaded-background=true font-desc="Ubuntu 20" ! \
5 | jpegenc ! queue ! mux. \
6 | audiotestsrc ! audio/x-raw,channels=2,rate=48000 ! audioconvert ! \
7 | vorbisenc bitrate=250000 ! queue ! mux. \
8 | matroskamux name=mux ! filesink location=test.mkv
9 |
--------------------------------------------------------------------------------
/dvbt2/dvbt2-hackrf.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 |
3 | # Copyright 2015 Ron Economos (w6rz@comcast.net)
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | from gnuradio import blocks
19 | from gnuradio import digital
20 | from gnuradio import gr
21 | import dvbt2
22 | import osmosdr
23 | import sys
24 |
25 | def main(args):
26 | nargs = len(args)
27 | if nargs == 1:
28 | infile = args[0]
29 | outfile = None
30 | elif nargs == 2:
31 | infile = args[0]
32 | outfile = args[1]
33 | else:
34 | sys.stderr.write("Usage: dvbt2-hackrf.py input_file [output_file]\n");
35 | sys.exit(1)
36 |
37 | try:
38 | shmaxfile = open('/proc/sys/kernel/shmmax', 'r')
39 | shmax = int(shmaxfile.readline())
40 | if shmax < 1024*1024*1024:
41 | print("")
42 | print("In order to run this, the maximum size of shared memory must be > %d" % (1024*1024*1024))
43 | print("your current maximum is at %d" % (shmax))
44 | print("please run the following command to fix this:")
45 | print("")
46 | print(" # sudo sh -c 'echo $(( 1024 * 1024 * 1024 )) > /proc/sys/kernel/shmmax'")
47 | print("")
48 | sys.exit(1)
49 |
50 | except Exception as e:
51 | print("!! Warning: Can't read shared memory maxsize (%s), \n your maximum might be to low to run this\n" % e)
52 |
53 | ## Config Options
54 |
55 | # DVB-T2 Parameters
56 | version = dvbt2.VERSION_111
57 | fft_size = dvbt2.FFTSIZE_4K
58 | input_mode = dvbt2.INPUTMODE_NORMAL
59 | frame_size = dvbt2.FECFRAME_NORMAL
60 | code_rate = dvbt2.C2_3
61 | data_symbols = 100
62 | fec_blocks = 31
63 | ti_blocks = 3
64 | constellation = dvbt2.MOD_64QAM
65 | rotation = dvbt2.ROTATION_ON
66 | guard_interval = dvbt2.GI_1_32
67 | mode = dvbt2.PREAMBLE_T2_SISO
68 | carrier_mode = dvbt2.CARRIERS_NORMAL
69 | pilot_pattern = dvbt2.PILOT_PP7
70 | l1_constellation = dvbt2.L1_MOD_16QAM
71 | papr_mode = dvbt2.PAPR_OFF
72 | papr_vclip = 3.3
73 | papr_iterations = 3
74 | channel_mhz = 8
75 |
76 | # Hack-RF Parameters
77 | center_freq = 474000000
78 | rf_gain = 14
79 | if_gain = 20
80 | bb_gain = 20
81 |
82 | ##
83 |
84 | samp_rate = channel_mhz * 8000000.0 / 7
85 |
86 | if channel_mhz == 10:
87 | bandwidth = 10000000
88 | equalization_bandwidth = dvbt2.BANDWIDTH_10_0_MHZ
89 | elif channel_mhz == 8:
90 | bandwidth = 8750000
91 | equalization_bandwidth = dvbt2.BANDWIDTH_8_0_MHZ
92 | elif channel_mhz == 7:
93 | bandwidth = 7000000
94 | equalization_bandwidth = dvbt2.BANDWIDTH_7_0_MHZ
95 | elif channel_mhz == 6:
96 | bandwidth = 5500000
97 | equalization_bandwidth = dvbt2.BANDWIDTH_6_0_MHZ
98 | elif channel_mhz == 5:
99 | bandwidth = 5000000
100 | equalization_bandwidth = dvbt2.BANDWIDTH_5_0_MHZ
101 | else:
102 | bandwidth = 1750000
103 | equalization_bandwidth = dvbt2.BANDWIDTH_1_7_MHZ
104 |
105 | if fft_size == dvbt2.FFTSIZE_1K:
106 | fftsize = 1024
107 | elif fft_size == dvbt2.FFTSIZE_2K:
108 | fftsize = 2048
109 | elif fft_size == dvbt2.FFTSIZE_4K:
110 | fftsize = 4096
111 | elif fft_size == dvbt2.FFTSIZE_8K:
112 | fftsize = 8192
113 | elif fft_size == dvbt2.FFTSIZE_8K_T2GI:
114 | fftsize = 8192
115 | elif fft_size == dvbt2.FFTSIZE_16K:
116 | fftsize = 16384
117 | elif fft_size == dvbt2.FFTSIZE_16K_T2GI:
118 | fftsize = 16384
119 | elif fft_size == dvbt2.FFTSIZE_32K:
120 | fftsize = 32768
121 | elif fft_size == dvbt2.FFTSIZE_32K_T2GI:
122 | fftsize = 32768
123 |
124 | if guard_interval == dvbt2.GI_1_32:
125 | gi = fftsize / 32
126 | elif guard_interval == dvbt2.GI_1_16:
127 | gi = fftsize / 16
128 | elif guard_interval == dvbt2.GI_1_8:
129 | gi = fftsize / 8
130 | elif guard_interval == dvbt2.GI_1_4:
131 | gi = fftsize / 4
132 | elif guard_interval == dvbt2.GI_1_128:
133 | gi = fftsize / 128
134 | elif guard_interval == dvbt2.GI_19_128:
135 | gi = (fftsize * 19) / 128
136 | elif guard_interval == dvbt2.GI_19_256:
137 | gi = (fftsize * 19) / 256
138 |
139 | log=gr.logger("dvbt2-hackrf")
140 | log.set_level("DEBUG");
141 | log.debug("logger initilized")
142 |
143 | tb = gr.top_block()
144 | log.debug("top block initialized")
145 |
146 | src = blocks.file_source(gr.sizeof_char, infile, True)
147 | log.debug("source block initialized")
148 |
149 | dvbt2_bbheader = dvbt2.bbheader_bb(frame_size, code_rate, input_mode, dvbt2.INBAND_OFF, fec_blocks, 4000000)
150 | dvbt2_bbscrambler = dvbt2.bbscrambler_bb(frame_size, code_rate)
151 | dvbt2_bch = dvbt2.bch_bb(frame_size, code_rate)
152 | dvbt2_ldpc = dvbt2.ldpc_bb(frame_size, code_rate)
153 | dvbt2_interleaver = dvbt2.interleaver_bb(frame_size, code_rate, constellation)
154 | dvbt2_modulator = dvbt2.modulator_bc(frame_size, constellation, rotation)
155 | dvbt2_cellinterleaver = dvbt2.cellinterleaver_cc(frame_size, constellation, fec_blocks, ti_blocks)
156 | dvbt2_framemapper = dvbt2.framemapper_cc(frame_size, code_rate, constellation, rotation, fec_blocks, ti_blocks, carrier_mode, fft_size, guard_interval, l1_constellation, pilot_pattern, 2, data_symbols, papr_mode, version, mode, input_mode, dvbt2.RESERVED_OFF, dvbt2.L1_SCRAMBLED_OFF, dvbt2.INBAND_OFF)
157 | dvbt2_freqinterleaver = dvbt2.freqinterleaver_cc(carrier_mode, fft_size, pilot_pattern, guard_interval, data_symbols, papr_mode, version, mode)
158 | dvbt2_pilotgenerator = dvbt2.pilotgenerator_cc(carrier_mode, fft_size, pilot_pattern, guard_interval, data_symbols, papr_mode, version, mode, dvbt2.MISO_TX1, dvbt2.EQUALIZATION_ON, equalization_bandwidth, fftsize)
159 | dvbt2_paprtr = dvbt2.paprtr_cc(carrier_mode, fft_size, pilot_pattern, guard_interval, data_symbols, papr_mode, version, papr_vclip, papr_iterations, fftsize)
160 | digital_ofdm_cyclic_prefixer = digital.ofdm_cyclic_prefixer(fftsize, fftsize+(gi), 0, "")
161 | dvbt2_p1insertion = dvbt2.p1insertion_cc(carrier_mode, fft_size, guard_interval, data_symbols, mode, dvbt2.SHOWLEVELS_OFF, 3.31)
162 | blocks_multiply_const = blocks.multiply_const_vcc((0.2, ))
163 | log.debug("DVB-T2 blocks initialized")
164 |
165 | out = osmosdr.sink(args="numchan=1")
166 | out.set_sample_rate(samp_rate)
167 | out.set_center_freq(center_freq, 0)
168 | out.set_freq_corr(0, 0)
169 | out.set_gain(rf_gain, 0)
170 | out.set_if_gain(if_gain, 0)
171 | out.set_bb_gain(bb_gain, 0)
172 | out.set_antenna("", 0)
173 | out.set_bandwidth(bandwidth, 0)
174 | log.debug("Output block initialized")
175 |
176 | tb.connect(src, dvbt2_bbheader)
177 | tb.connect(dvbt2_bbheader, dvbt2_bbscrambler)
178 | tb.connect(dvbt2_bbscrambler, dvbt2_bch)
179 | tb.connect(dvbt2_bch, dvbt2_ldpc)
180 | tb.connect(dvbt2_ldpc, dvbt2_interleaver)
181 | tb.connect(dvbt2_interleaver, dvbt2_modulator)
182 | tb.connect(dvbt2_modulator, dvbt2_cellinterleaver)
183 | tb.connect(dvbt2_cellinterleaver, dvbt2_framemapper)
184 | tb.connect(dvbt2_framemapper, dvbt2_freqinterleaver)
185 | tb.connect(dvbt2_freqinterleaver, dvbt2_pilotgenerator)
186 | tb.connect(dvbt2_pilotgenerator, dvbt2_paprtr)
187 | tb.connect(dvbt2_paprtr, digital_ofdm_cyclic_prefixer)
188 | tb.connect(digital_ofdm_cyclic_prefixer, dvbt2_p1insertion)
189 | tb.connect(dvbt2_p1insertion, blocks_multiply_const)
190 | tb.connect(blocks_multiply_const, out)
191 | log.debug("all blocks connected")
192 |
193 | if outfile:
194 | dst = blocks.file_sink(gr.sizeof_gr_complex, outfile)
195 | tb.connect(blocks_multiply_const, dst)
196 |
197 | log.debug("running gnuradio")
198 | tb.run()
199 |
200 | if __name__ == '__main__':
201 | main(sys.argv[1:])
202 |
--------------------------------------------------------------------------------
/dvbt2/src.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | OUT=$1
4 | IN=$2
5 |
6 | if [ -z "$2" ]; then
7 | rm -f "$OUT"
8 | mkfifo "$OUT"
9 | # exec ffmpeg -f alsa -i pulse -f video4linux2 -s 640x480 -i /dev/video0 -vcodec mpeg2video -s 640x480 -r 25 -vb 4000000 -acodec mp2 -ar 48000 -ab 192000 -ac 2 \
10 | # -metadata service_provider="realraum" \
11 | # -metadata service_name="realraum DVB-T Test" \
12 | # -f mpegts -y "$OUT"
13 | else
14 | # exec ffmpeg -i "$IN" -vcodec mpeg2video -s 1920x1080 -r 25 -flags cgop+ilme -sc_threshold 1000000000 -g 25 -bf 2 -b:v 4M -minrate 4M -maxrate 4M -bufsize 2.3M -acodec mp2 -ac 2 -b:a 256k \
15 | # -metadata service_provider="realraum" -metadata service_name="realraum DVB-T2 Test" -f mpegts -y "$OUT"
16 | exec ffmpeg -i "$IN" -vcodec copy -acodec copy -copyts \
17 | -metadata service_provider="realraum" -metadata service_name="realraum DVB-T2 Test" -f mpegts -y "$OUT"
18 |
19 | fi
20 |
--------------------------------------------------------------------------------
/dvbtconfig.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 | #
3 | # Copyright (C) 2016 Christian Pointner
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | import dvbt
19 | import configparser
20 |
21 | class DVBTConfig:
22 | config = configparser.RawConfigParser()
23 |
24 | # DVB-T Parameters
25 | dflt_channel_mhz = 6
26 | dflt_mode = dvbt.T2k
27 | dflt_code_rate = dvbt.C1_2
28 | dflt_constellation = dvbt.QPSK
29 | dflt_guard_interval = dvbt.G1_32
30 |
31 | # Channel Parameters
32 | dflt_center_freq = 498000000
33 |
34 | # Hack-RF Parameters
35 | dflt_hackrf_rf_gain = 14
36 | dflt_hackrf_if_gain = 20
37 | dflt_hackrf_bb_gain = 20
38 |
39 | # tsrfsend Parameters
40 | dflt_tsrfsend_gain = 0
41 | dflt_tsrfsend_cell_id = 0
42 |
43 |
44 | def __init__(self, configfile):
45 | self.config.readfp(open(configfile))
46 |
47 | def get_channel_mhz(self):
48 | try:
49 | c = self.config.getint('dvb-t', 'bandwith')
50 | if c < 5 or c > 8:
51 | raise ValueError("illegal value for bandwith: %d" % c)
52 | return c
53 | except configparser.NoSectionError:
54 | return self.dflt_channel_mhz
55 | except configparser.NoOptionError:
56 | return self.dflt_channel_mhz
57 |
58 |
59 | def get_mode(self):
60 | try:
61 | m = self.config.get('dvb-t', 'mode')
62 | if m.upper() == "2K":
63 | return dvbt.T2k
64 | if m.upper() == "8K":
65 | return dvbt.T8k
66 | raise ValueError("illegal value for mode: %s" % m)
67 | except configparser.NoSectionError:
68 | return self.dflt_mode
69 | except configparser.NoOptionError:
70 | return self.dflt_mode
71 |
72 | def get_code_rate(self):
73 | try:
74 | c = self.config.get('dvb-t', 'code-rate')
75 | if c == "1/2":
76 | return dvbt.C1_2
77 | if c == "2/3":
78 | return dvbt.C2_3
79 | if c == "3/4":
80 | return dvbt.C3_4
81 | if c == "5/6":
82 | return dvbt.C5_6
83 | if c == "7/8":
84 | return dvbt.C7_8
85 | raise ValueError("illegal value for code_rate: %s" % c)
86 | except configparser.NoSectionError:
87 | return self.dflt_code_rate
88 | except configparser.NoOptionError:
89 | return self.dflt_code_rate
90 |
91 | def get_constellation(self):
92 | try:
93 | c = self.config.get('dvb-t', 'constellation')
94 | if c.upper() == "QPSK":
95 | return dvbt.QPSK
96 | if c.upper() == "QAM16":
97 | return dvbt.QAM16
98 | if c.upper() == "QAM64":
99 | return dvbt.QAM64
100 | raise ValueError("illegal value for constellation: %s" % c)
101 | except configparser.NoSectionError:
102 | return self.dflt_constellation
103 | except configparser.NoOptionError:
104 | return self.dflt_constellation
105 |
106 | def get_guard_interval(self):
107 | try:
108 | g = self.config.get('dvb-t', 'guard-interval')
109 | if g == "1/32":
110 | return dvbt.G1_32
111 | if g == "1/16":
112 | return dvbt.G1_16
113 | if g == "1/8":
114 | return dvbt.G1_8
115 | if g == "1/4":
116 | return dvbt.G1_4
117 | raise ValueError("illegal value for guard_interval: %s" % g)
118 | except configparser.NoSectionError:
119 | return self.dflt_guard_interval
120 | except configparser.NoOptionError:
121 | return self.dflt_guard_interval
122 |
123 |
124 | def get_center_freq(self):
125 | try:
126 | f = self.config.getint('channel', 'frequency')
127 | if f < 474000000 or f > 858000000:
128 | raise ValueError("center frequency is out of allowed range: %d" % f)
129 | return f
130 | except configparser.NoSectionError:
131 | return self.dflt_center_freq
132 | except configparser.NoOptionError:
133 | return self.dflt_center_freq
134 |
135 | def get_hackrf_rf_gain(self):
136 | try:
137 | return self.config.getint('hackrf', 'rf-gain')
138 | except configparser.NoSectionError:
139 | return self.dflt_hackrf_rf_gain
140 | except configparser.NoOptionError:
141 | return self.dflt_hackrf_rf_gain
142 |
143 | def get_hackrf_if_gain(self):
144 | try:
145 | return self.config.getint('hackrf', 'if-gain')
146 | except configparser.NoSectionError:
147 | return self.dflt_hackrf_if_gain
148 | except configparser.NoOptionError:
149 | return self.dflt_hackrf_if_gain
150 |
151 | def get_hackrf_bb_gain(self):
152 | try:
153 | return self.config.getint('hackrf', 'bb-gain')
154 | except configparser.NoSectionError:
155 | return self.dflt_hackrf_bb_gain
156 | except configparser.NoOptionError:
157 | return self.dflt_hackrf_bb_gain
158 |
159 | def get_tsrfsend_cell_id(self):
160 | try:
161 | return self.config.getint('tsrfsend', 'cell-id')
162 | except configparser.NoSectionError:
163 | return self.dflt_tsrfsend_cell_id
164 | except configparser.NoOptionError:
165 | return self.dflt_tsrfsend_cell_id
166 |
167 | def get_tsrfsend_gain(self):
168 | try:
169 | return self.config.getint('tsrfsend', 'gain')
170 | except configparser.NoSectionError:
171 | return self.dflt_tsrfsend_gain
172 | except configparser.NoOptionError:
173 | return self.dflt_tsrfsend_gain
174 |
--------------------------------------------------------------------------------
/killall.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | killall -9 ffmpeg
4 | killall esvideompeg2pes
5 | killall pesvideo2ts
6 | killall esaudio2pes
7 | killall pesaudio2ts
8 | killall tscbrmuxer
9 | killall tstdt
10 | killall tsstamp
11 |
12 | exit 0
13 |
--------------------------------------------------------------------------------
/notes.txt:
--------------------------------------------------------------------------------
1 |
2 | examples
3 | https://github.com/argilo/sdr-examples
4 |
5 | dvb-t gr lib
6 | https://github.com/BogdanDIA/gr-dvbt
7 |
8 | dvb [t|t2|s|s2] gr lib
9 | https://github.com/drmpeg
10 | http://www.w6rz.net/
11 | http://www.etsi.org/deliver/etsi_en/302700_302799/302755/01.03.01_60/en_302755v010301p.pdf
12 | ftp://ftp.kw.bbc.co.uk/t2refs/
13 | ftp://ftp.kw.bbc.co.uk/t2refs/docs/T2StreamsParameterSets81.xlsx
14 | http://www.enensys.com/documents/whitePapers/ENENSYS%20Technologies%20-%20POSTER%20-%20Find%20Your%20Way%20in%20DVB-T2.pdf
15 |
16 | VV009-4KFFT
17 |
18 |
19 | tutorial
20 | http://www.irrational.net/2014/03/02/digital-atv/
21 |
22 | Creating DVB-T compatible MPEG2 streams using FFMPEG
23 | http://www.waveguide.se/?article=creating-dvb-t-compatible-mpeg2-streams-using-ffmpeg
24 |
25 |
26 | if modules in gnuradio are missing check:
27 | /.gnuradio/config.conf:
28 | [grc]
29 | local_blocks_path=/usr/local/share/gnuradio/grc/blocks/
30 |
31 | if rtl-sdr was used as sdr commend lines in
32 | /etc/modprobe.d/rtl-sdr-blacklist.conf
33 |
34 | for receiving dvb there must be /etc/dvb/*device*
35 | channel-scan e.g. for vlc-playlist
36 | w_scan -c AT -L > channels.xspf
37 |
38 |
39 | The bitrate of the MPEG-TS stream must be as close to the maximum bitrate for a given
40 | modulation parameters. Please use dvbt-bitrate.py to calculate the bitrate.
41 | see http://www.saschateichmann.de/dvb-t-hf.html
42 |
43 | opencaster
44 | https://github.com/aventuri/opencaster.git
45 | SDT service description table
46 | NIT network information section
47 | PAT programm association table
48 | PMT programm map section
49 | EIT event information table
50 | TDT time date table
51 |
52 | USB DVB-T transmitter:
53 | http://www.hides.com.tw/product_opencaster_eng.html
54 |
55 | to look at
56 | http://yo3iiu.ro/blog/?p=1244
57 | https://gnuradio.org/redmine/projects/gnuradio/repository/revisions/a1e3f6ce0fb58de8e1ba634d32844cd62c400508/show/gr-dtv/lib/dvbt2
58 | https://gnuradio.org/redmine/projects/gnuradio/repository/revisions/master/show/gr-dtv/examples
59 | https://nuand.com/forums/viewtopic.php?f=8&t=3676
60 | https://nuand.com/forums/viewtopic.php?f=8&t=3499&start=10
61 | http://wiki.oz9aec.net/index.php/Simple_DVB_with_Gstreamer_and_GNU_Radio
62 | http://wiki.oz9aec.net/index.php/.gnuradiorc
63 |
64 | http://www.avalpa.com/assets/freesoft/opencaster/AvalpaBroadcastServerUserManual-v3.0.pdf
65 | https://www.researchgate.net/publication/257645300_Generating_a_transport_stream_for_digital_terrestrial_television_system_in_conformance_with_ISDB-Tb_standard
66 |
67 |
68 |
69 | HF-Analyse
70 |
71 | 501818-494186=7632
72 | 501808-494165=7643
73 | 501797-494167=7630
74 | ORS ~ 8000khz
75 |
76 | todo genaue analyse mit träger & co
77 |
--------------------------------------------------------------------------------
/opencaster/config.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 |
3 | #
4 | # Copyright (C) 2008 Lorenzo Pallara, l.pallara@avalpa.com
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License as published by
8 | # the Free Software Foundation; either version 2 of the License, or
9 | # (at your option) any later version.
10 | #
11 | # This program is distributed in the hope that it will be useful,
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | # GNU General Public License for more details.
15 | #
16 | # You should have received a copy of the GNU General Public License
17 | # along with this program; if not, write to the Free Software
18 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 |
20 | import os
21 |
22 | from dvbobjects.PSI.PAT import *
23 | from dvbobjects.PSI.NIT import *
24 | from dvbobjects.PSI.SDT import *
25 | from dvbobjects.PSI.PMT import *
26 | from dvbobjects.PSI.TDT import *
27 | from dvbobjects.PSI.EIT import *
28 | from dvbobjects.DVB.Descriptors import *
29 | from dvbobjects.MPEG.Descriptors import *
30 |
31 |
32 |
33 |
34 | #
35 | # Shared values
36 | #
37 |
38 | avalpa_transport_stream_id = 1 # demo value, an official value should be demanded to dvb org
39 | avalpa_original_transport_stream_id = 1 # demo value, an official value should be demanded to dvb org
40 | avalpa1_service_id = 1 # demo value
41 | avalpa1_pmt_pid = 1031
42 | avalpa1_version = 1
43 |
44 | #
45 | # Network Information Table
46 | # this is a basic NIT with the minimum desciptors, OpenCaster has a big library ready to use
47 | #
48 |
49 |
50 | nit = network_information_section(
51 | network_id = 1,
52 | network_descriptor_loop = [
53 | network_descriptor(network_name = "realraum MUX-A",),
54 | ],
55 | transport_stream_loop = [
56 | transport_stream_loop_item(
57 | transport_stream_id = avalpa_transport_stream_id,
58 | original_network_id = avalpa_original_transport_stream_id,
59 | transport_descriptor_loop = [
60 | service_list_descriptor(
61 | dvb_service_descriptor_loop = [
62 | service_descriptor_loop_item(
63 | service_ID = avalpa1_service_id,
64 | service_type = 1, # digital tv service type; 0x19 hd ditigal tv
65 | ),
66 | ],
67 | ),
68 | ],
69 | ),
70 | ],
71 | version_number = avalpa1_version, # you need to change the table number every time you edit, so the decoder will compare its version with the new one and update the table
72 | section_number = 0,
73 | last_section_number = 0,
74 | )
75 |
76 |
77 | #
78 | # Program Association Table (ISO/IEC 13818-1 2.4.4.3)
79 | #
80 |
81 | pat = program_association_section(
82 | transport_stream_id = avalpa_transport_stream_id,
83 | program_loop = [
84 | program_loop_item(
85 | program_number = avalpa1_service_id,
86 | PID = avalpa1_pmt_pid,
87 | ),
88 | program_loop_item(
89 | program_number = 0, # special program for the NIT
90 | PID = 16,
91 | ),
92 | ],
93 | version_number = avalpa1_version, # you need to change the table number every time you edit, so the decoder will compare its version with the new one and update the table
94 | section_number = 0,
95 | last_section_number = 0,
96 | )
97 |
98 |
99 |
100 | #
101 | # Service Description Table (ETSI EN 300 468 5.2.3)
102 | # this is a basic SDT with the minimum desciptors, OpenCaster has a big library ready to use
103 | #
104 |
105 | sdt = service_description_section(
106 | transport_stream_id = avalpa_transport_stream_id,
107 | original_network_id = avalpa_original_transport_stream_id,
108 | service_loop = [
109 | service_loop_item(
110 | service_ID = avalpa1_service_id,
111 | EIT_schedule_flag = 0, # 0 no current even information is broadcasted, 1 broadcasted
112 | EIT_present_following_flag = 0, # 0 no next event information is broadcasted, 1 is broadcasted
113 | running_status = 4, # 4 service is running, 1 not running, 2 starts in a few seconds, 3 pausing
114 | free_CA_mode = 0, # 0 means service is not scrambled, 1 means at least a stream is scrambled
115 | service_descriptor_loop = [
116 | service_descriptor(
117 | service_type = 1, # digital television service
118 | service_provider_name = "realraum", # no spaces!!
119 | service_name = "realraum TV", # spaces are allowed
120 | ),
121 | ],
122 | ),
123 | ],
124 | version_number = avalpa1_version, # you need to change the table number every time you edit, so the decoder will compare its version with the new one and update the table
125 | section_number = 0,
126 | last_section_number = 0,
127 | )
128 |
129 |
130 | #
131 | # Program Map Table (ISO/IEC 13818-1 2.4.4.8)
132 | # this is a basic PMT the the minimum desciptors, OpenCaster has a big library ready to use
133 | #
134 |
135 | pmt = program_map_section(
136 | program_number = avalpa1_service_id,
137 | PCR_PID = 2064,
138 | program_info_descriptor_loop = [],
139 | stream_loop = [
140 | stream_loop_item(
141 | stream_type = 2, # mpeg2 video stream type; h264 0x18 hd avc; see page 76 usermanual
142 | elementary_PID = 2064,
143 | element_info_descriptor_loop = []
144 | ),
145 | stream_loop_item(
146 | stream_type = 3, # mpeg2 audio stream type; for 624 see page 76 usermanual
147 | elementary_PID = 2068,
148 | element_info_descriptor_loop = []
149 | ),
150 | ],
151 | version_number = avalpa1_version, # you need to change the table number every time you edit, so the decoder will compare its version with the new one and update the table
152 | section_number = 0,
153 | last_section_number = 0,
154 | )
155 |
156 | #
157 | # Event Information Table (ETSI EN 300 468 5.2.4)
158 | #
159 |
160 | eit = event_information_section(
161 | table_id = EIT_ACTUAL_TS_PRESENT_FOLLOWING,
162 | service_id = avalpa1_service_id,
163 | transport_stream_id = avalpa_transport_stream_id,
164 | original_network_id = avalpa_original_transport_stream_id,
165 | event_loop = [
166 | event_loop_item(
167 | event_id = 2,
168 | start_year = 116, # since 1900
169 | start_month = 02,
170 | start_day = 27,
171 | start_hours = 0x15,
172 | start_minutes = 0x02,
173 | start_seconds = 0x00,
174 | duration_hours = 0x02,
175 | duration_minutes = 0x00,
176 | duration_seconds = 0x00,
177 | running_status = 4, # 4 service is running, 1 not running, 2 starts in a few seconds, 3 pausing
178 | free_CA_mode = 0, # 0 means service is not scrambled, 1 means at least a stream is scrambled
179 | event_descriptor_loop = [
180 | short_event_descriptor (
181 | ISO639_language_code = "DEU",
182 | event_name = "realraum now",
183 | text = "des wos jetzt laft",
184 | )
185 | ],
186 | ),
187 | ],
188 | segment_last_section_number = 1,
189 | version_number = avalpa1_version,
190 | section_number = 0,
191 | last_section_number = 1, # pay attention here, we have another section after this!
192 | )
193 |
194 |
195 | eit_follow = event_information_section(
196 | table_id = EIT_ACTUAL_TS_PRESENT_FOLLOWING,
197 | service_id = avalpa1_service_id,
198 | transport_stream_id = avalpa_transport_stream_id,
199 | original_network_id = avalpa_original_transport_stream_id,
200 | event_loop = [
201 | event_loop_item(
202 | event_id = 3,
203 | start_year = 116, # since 1900
204 | start_month = 0o2,
205 | start_day = 27,
206 | start_hours = 0x17,
207 | start_minutes = 0x02,
208 | start_seconds = 0x00,
209 | duration_hours = 0x02,
210 | duration_minutes = 0x00,
211 | duration_seconds = 0x00,
212 | running_status = 1, # 4 service is running, 1 not running, 2 starts in a few seconds, 3 pausing
213 | free_CA_mode = 0, # 0 means service is not scrambled, 1 means at least a stream is scrambled
214 | event_descriptor_loop = [
215 | short_event_descriptor (
216 | ISO639_language_code = "DEU",
217 | event_name = "realraum next",
218 | text = "des wird no kumman",
219 | )
220 | ],
221 | ),
222 | ],
223 | segment_last_section_number = 1,
224 | version_number = avalpa1_version,
225 | section_number = 1, # this is the second section
226 | last_section_number = 1,
227 | )
228 |
229 | #
230 | # Time Description Table (ETSI EN 300 468 5.2.5)
231 | # it should be replaced at run time with tstdt
232 | #
233 |
234 | tdt = time_date_section(
235 | year = 116, # since 1900
236 | month = 2,
237 | day = 27,
238 | hour = 0x15, # use hex like decimals
239 | minute = 0x20,
240 | second = 0x21,
241 | version_number = avalpa1_version,
242 | section_number = 0,
243 | last_section_number = 0,
244 | )
245 |
246 |
247 |
248 | #
249 | # PSI marshalling and encapsulation
250 | #
251 |
252 | out = open("./nit.sec", "wb")
253 | out.write(nit.pack())
254 | out.close
255 | out = open("./nit.sec", "wb") # python flush bug
256 | out.close
257 | os.system('sec2ts 16 < ./nit.sec > ./nit.ts')
258 |
259 | out = open("./pat.sec", "wb")
260 | out.write(pat.pack())
261 | out.close
262 | out = open("./pat.sec", "wb") # python flush bug
263 | out.close
264 | os.system('sec2ts 0 < ./pat.sec > ./pat.ts')
265 |
266 | out = open("./sdt.sec", "wb")
267 | out.write(sdt.pack())
268 | out.close
269 | out = open("./sdt.sec", "wb") # python flush bug
270 | out.close
271 | os.system('sec2ts 17 < ./sdt.sec > ./sdt.ts')
272 |
273 | out = open("./pmt.sec", "wb")
274 | out.write(pmt.pack())
275 | out.close
276 | out = open("./pmt.sec", "wb") # python flush bug
277 | out.close
278 | os.system('sec2ts ' + str(avalpa1_pmt_pid) + ' < ./pmt.sec > ./pmt.ts')
279 |
280 | out = open("./eit.sec", "wb")
281 | out.write(eit.pack())
282 | out.close
283 | out = open("./eit.sec", "wb") # python flush bug
284 | out.close
285 | os.system('sec2ts 18 < ./eit.sec > ./eit.ts')
286 |
287 | out = open("./eit_follow.sec", "wb")
288 | out.write(eit_follow.pack())
289 | out.close
290 | out = open("./eit_follow.sec", "wb") # python flush bug
291 | out.close
292 | os.system('sec2ts 18 < ./eit_follow.sec >> ./eit.ts')
293 |
294 | out = open("./tdt.sec", "wb")
295 | out.write(tdt.pack())
296 | out.close
297 | out = open("./tdt.sec", "wb") # python flush bug
298 | out.close
299 | os.system('sec2ts 20 < ./tdt.sec > ./tdt.ts')
300 |
--------------------------------------------------------------------------------
/opencaster/null.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/realraum/hackrf-dvb-t/3691c3acadcccfbf35a1f298eedc2cfcf2486b08/opencaster/null.ts
--------------------------------------------------------------------------------
/run-sd-live.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | FIFO_D="fifos"
4 |
5 | RAW_VIDEO_FIFO="$FIFO_D/video.raw"
6 | PES_VIDEO_FIFO="$FIFO_D/video.pes"
7 | TS_VIDEO_FIFO="$FIFO_D/video.ts"
8 |
9 | RAW_AUDIO_FIFO="$FIFO_D/audio.raw"
10 | PES_AUDIO_FIFO="$FIFO_D/audio.pes"
11 | TS_AUDIO_FIFO="$FIFO_D/audio.ts"
12 |
13 | MUXED_FIFO="$FIFO_D/muxed.ts"
14 | TDT_FIFO="$FIFO_D/tdt.ts"
15 | STAMP_FIFO="$FIFO_D/stamp.ts"
16 |
17 | ####
18 |
19 | ./killall.sh
20 |
21 | ##
22 |
23 | mkdir -p "$FIFO_D"
24 | rm -f "$RAW_VIDEO_FIFO"
25 | rm -f "$PES_VIDEO_FIFO"
26 | rm -f "$TS_VIDEO_FIFO"
27 | rm -f "$RAW_AUDIO_FIFO"
28 | rm -f "$PES_AUDIO_FIFO"
29 | rm -f "$TS_AUDIO_FIFO"
30 | rm -f "$MUXED_FIFO"
31 | rm -f "$TDT_FIFO"
32 | rm -f "$STAMP_FIFO"
33 |
34 | mkfifo "$RAW_VIDEO_FIFO"
35 | mkfifo "$PES_VIDEO_FIFO"
36 | mkfifo "$TS_VIDEO_FIFO"
37 | mkfifo "$RAW_AUDIO_FIFO"
38 | mkfifo "$PES_AUDIO_FIFO"
39 | mkfifo "$TS_AUDIO_FIFO"
40 | mkfifo "$MUXED_FIFO"
41 | mkfifo "$TDT_FIFO"
42 | mkfifo "$STAMP_FIFO"
43 |
44 | BRUTTO_RATE=`./dvbt-bitrate.py --short`
45 |
46 | VIDEO_RATE=4200000
47 | AUDIO_RATE=188000
48 | PAT_RATE=3008
49 | PMT_RATE=3008
50 | SDT_RATE=1500
51 | NIT_RATE=1400
52 | EIT_RATE=2000
53 | TDT_RATE=2000
54 |
55 | NETTO_RATE=$(($VIDEO_RATE + $AUDIO_RATE + $PAT_RATE + $PMT_RATE + $SDT_RATE + $NIT_RATE + $EIT_RATE + $TDT_RATE))
56 | NULL_RATE=$(($BRUTTO_RATE - $NETTO_RATE))
57 |
58 |
59 | ./src-decklink.sh "$RAW_VIDEO_FIFO" "$RAW_AUDIO_FIFO" &
60 | #./src-rtp.sh "$RAW_VIDEO_FIFO" "$RAW_AUDIO_FIFO" &
61 | #./src-rtp.sh "$RAW_VIDEO_FIFO" /dev/null &
62 | #./src-rtp.sh /dev/null "$RAW_AUDIO_FIFO" &
63 |
64 | ## Video (tutorial page: 69)
65 | esvideompeg2pes "$RAW_VIDEO_FIFO" > "$PES_VIDEO_FIFO" &
66 | pesvideo2ts 2064 25 112 $VIDEO_RATE 0 "$PES_VIDEO_FIFO" > "$TS_VIDEO_FIFO" &
67 |
68 | ## Audio (tutorial page: 70)
69 | esaudio2pes "$RAW_AUDIO_FIFO" 1152 48000 384 0 > "$PES_AUDIO_FIFO" &
70 | pesaudio2ts 2068 1152 48000 384 0 "$PES_AUDIO_FIFO" > "$TS_AUDIO_FIFO" &
71 |
72 |
73 | #tsloop video.ts > "$TS_VIDEO_FIFO" &
74 | #tsloop audio.ts > "$TS_AUDIO_FIFO" &
75 |
76 | #tsloop clock-video.ts > "$TS_VIDEO_FIFO" &
77 | #tsloop clock-audio.ts > "$TS_AUDIO_FIFO" &
78 |
79 |
80 | ## Mux (tutorial page: 31)
81 | tscbrmuxer b:$VIDEO_RATE "$TS_VIDEO_FIFO" b:$AUDIO_RATE "$TS_AUDIO_FIFO" \
82 | b:$PAT_RATE opencaster/pat.ts b:$PMT_RATE opencaster/pmt.ts b:$SDT_RATE opencaster/sdt.ts \
83 | b:$NIT_RATE opencaster/nit.ts b:$EIT_RATE opencaster/eit.ts b:$TDT_RATE opencaster/tdt.ts \
84 | b:$NULL_RATE opencaster/null.ts > "$MUXED_FIFO" &
85 |
86 | tstdt "$MUXED_FIFO" > "$TDT_FIFO" &
87 | tsstamp "$TDT_FIFO" $BRUTTO_RATE > "$STAMP_FIFO" &
88 |
89 | #cat "$STAMP_FIFO" > all.ts
90 | #./dvbt-hackrf.py "$STAMP_FIFO"
91 | ./dvbt-tsrfsend.py "$STAMP_FIFO"
92 |
93 |
94 | exit 0
95 |
--------------------------------------------------------------------------------
/src-decklink.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | VFIFO=$1
4 | AFIFO=$2
5 |
6 | if [ -z $VFIFO ] || [ -z $AFIFO ]; then
7 | echo "Usage: $0 "
8 | exit 1
9 | fi
10 |
11 | #exec ffmpeg -i rtp://89.106.211.60:5000 \
12 | exec ../../bmdtools/bmdcapture -C 0 V 3 -A 2 -m 9 -F nut -f pipe:1 | ffmpeg -vsync passthrough -i pipe:0 \
13 | -vcodec mpeg2video -s 720x576 -r 25 -g 25 -pix_fmt yuv420p -bf 2 -b:v 3550k -minrate 3550k -maxrate 3550k -bufsize 2000k -f mp2 -map 0:0 pipe:3 \
14 | -acodec mp2 -ac 2 -b:a 128k -f mp2 -map 0:1 pipe:4 3> "$VFIFO" 4> "$AFIFO"
15 |
--------------------------------------------------------------------------------
/src-rtp.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | VFIFO=$1
4 | AFIFO=$2
5 |
6 | if [ -z $VFIFO ] || [ -z $AFIFO ]; then
7 | echo "Usage: $0 "
8 | exit 1
9 | fi
10 |
11 | exec ffmpeg -i rtp://89.106.211.60:5000 \
12 | -vcodec mpeg2video -s 720x576 -r 25 -g 25 -bf 2 -b:v 3550k -minrate 3550k -maxrate 3550k -bufsize 2000k -f mp2 -map 0:0 pipe:3 \
13 | -acodec mp2 -ac 2 -b:a 128k -f mp2 -map 0:1 pipe:4 3> "$VFIFO" 4> "$AFIFO"
14 |
--------------------------------------------------------------------------------
/tsrfsend:
--------------------------------------------------------------------------------
1 | ../tsrfsend-nosvn/tsrfsend
--------------------------------------------------------------------------------
/wcsan_r3_20151219_01.log:
--------------------------------------------------------------------------------
1 | spel@spel-pc:~/Documents/Gnuradio/hackrf-dvb-t$ w_scan -c AT -L
2 | w_scan version 20130331 (compiled for DVB API 5.10)
3 | using settings for AUSTRIA
4 | DVB aerial
5 | DVB-T Europe
6 | scan type TERRESTRIAL, channellist 4
7 | output format vlc xspf playlist
8 | output charset 'UTF-8'
9 | Info: using DVB adapter auto detection.
10 | /dev/dvb/adapter0/frontend0 -> TERRESTRIAL "Sony CXD2820R": very good :-))
11 |
12 | Using TERRESTRIAL frontend (adapter /dev/dvb/adapter0/frontend0)
13 | -_-_-_-_ Getting frontend capabilities-_-_-_-_
14 | Using DVB API 5.a
15 | frontend 'Sony CXD2820R' supports
16 | DVB-T2
17 | INVERSION_AUTO
18 | QAM_AUTO
19 | TRANSMISSION_MODE_AUTO
20 | GUARD_INTERVAL_AUTO
21 | HIERARCHY_AUTO
22 | FEC_AUTO
23 | FREQ (45.00MHz ... 864.00MHz)
24 | -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
25 | Scanning 7MHz frequencies...
26 | 177500: (time: 00:02)
27 | 184500: (time: 00:08)
28 | 191500: (time: 00:15)
29 | 198500: (time: 00:21)
30 | 205500: (time: 00:28)
31 | 212500: (time: 00:34)
32 | 219500: (time: 00:41)
33 | 226500: (time: 00:47)
34 | Scanning 8MHz frequencies...
35 | 474000: (time: 00:55)
36 | 482000: (time: 01:01)
37 | 490000: (time: 01:08) (time: 01:11) signal ok:
38 | QAM_AUTO f = 490000 kHz I999B8C999D999T999G999Y999
39 | updating transponder:
40 | (QAM_AUTO f = 490000 kHz I999B8C999D999T999G999Y999) 0x0000
41 | to (QAM_AUTO f = 490000 kHz I999B8C999D999T32G16Y999P1) 0x4004
42 | 498000: (time: 01:27)
43 | 506000: (time: 01:34)
44 | 514000: (time: 01:41) (time: 01:42) signal ok:
45 | QAM_AUTO f = 514000 kHz I999B8C999D999T999G999Y999
46 | new transponder:
47 | (QAM_16 f = 858000 kHz I999B8C34D0T8G4Y0) 0x405A
48 | 522000: (time: 01:55)
49 | 530000: (time: 02:01)
50 | 538000: (time: 02:08)
51 | 546000: (time: 02:20)
52 | 554000: (time: 02:26)
53 | 562000: (time: 02:33)
54 | 570000: (time: 02:39)
55 | 578000: (time: 02:46)
56 | 586000: (time: 02:52)
57 | 594000: (time: 02:59)
58 | 602000: (time: 03:05)
59 | 610000: (time: 03:12)
60 | 618000: (time: 03:18) (time: 03:24) signal ok:
61 | QAM_AUTO f = 618000 kHz I999B8C999D999T999G999Y999
62 | updating transponder:
63 | (QAM_AUTO f = 618000 kHz I999B8C999D999T999G999Y999) 0x0000
64 | to (QAM_AUTO f = 618000 kHz I999B8C999D999T32G16Y999P1) 0x4004
65 | 626000: (time: 03:40)
66 | 634000: (time: 03:46)
67 | 642000: (time: 03:54)
68 | 650000: (time: 04:00)
69 | 658000: (time: 04:07)
70 | 666000: (time: 04:13)
71 | 674000: (time: 04:20)
72 | 682000: (time: 04:26) (time: 04:35) signal ok:
73 | QAM_AUTO f = 682000 kHz I999B8C999D999T999G999Y999
74 | Info: no data from NIT(actual)
75 | 690000: (time: 04:53)
76 | 698000: (time: 04:59)
77 | 706000: (time: 05:06) (time: 05:09) signal ok:
78 | QAM_AUTO f = 706000 kHz I999B8C999D999T999G999Y999
79 | updating transponder:
80 | (QAM_AUTO f = 706000 kHz I999B8C999D999T999G999Y999) 0x0000
81 | to (QAM_AUTO f = 706000 kHz I999B8C999D999T32G16Y999P1) 0x4004
82 | 714000: (time: 05:25)
83 | 722000: (time: 05:31)
84 | 730000: (time: 05:38)
85 | 738000: (time: 05:44)
86 | 746000: (time: 05:51)
87 | 754000: (time: 05:57)
88 | 762000: (time: 06:04)
89 | 770000: (time: 06:10)
90 | 778000: (time: 06:18)
91 | 786000: (time: 06:24)
92 | 794000: (time: 06:31)
93 | 802000: (time: 06:37)
94 | 810000: (time: 06:44)
95 | 818000: (time: 06:50)
96 | 826000: (time: 06:57)
97 | 834000: (time: 07:03)
98 | 842000: (time: 07:10)
99 | 850000: (time: 07:16)
100 | 858000: skipped (already known transponder)
101 | tune to: QAM_AUTO f = 490000 kHz I999B8C999D999T32G16Y999P1
102 | (time: 07:24) service = ATV HD (ATV)
103 | service = ORF III HD (ORF)
104 | service = ORF SPORT+ HD (ORF)
105 | service = 3sat HD (ORF)
106 | service = ATV II (ATV)
107 | service = SRF 1 (SFR)
108 | service = Puls4 (sevenonemedia)
109 | service = SAT.1 Gold (sevenonemedia)
110 | tune to: QAM_AUTO f = 514000 kHz I999B8C999D999T999G999Y999
111 | (time: 07:40) service = ORF1 (ORF)
112 | service = ORF2 St (ORF)
113 | service = ATV (ATV+)
114 | service = ORF2 B (ORF)
115 | tune to: QAM_16 f = 858000 kHz I999B8C34D0T8G4Y0
116 | (time: 07:53) ----------no signal----------
117 | tune to: QAM_16 f = 858000 kHz I999B8C34D0T8G4Y0 (no signal)
118 | (time: 07:57) ----------no signal----------
119 | tune to: QAM_AUTO f = 618000 kHz I999B8C999D999T32G16Y999P1
120 | (time: 08:01) service = ZDF HD (ORS)
121 | service = Das Erste HD (-)
122 | service = RTL2 (RTL)
123 | service = sixx Austria (-)
124 | service = kabel eins austria (-)
125 | service = Eurosport (-)
126 | service = Playboy TV (-)
127 | service = BR (-)
128 | service = KiKa (-)
129 | service = arte (-)
130 | service = zdf neo (-)
131 | service = Sport1 (-)
132 | tune to: QAM_AUTO f = 682000 kHz I999B8C999D999T999G999Y999
133 | (time: 08:17) Info: no data from SDT(actual)
134 | updating transponder:
135 | (QAM_AUTO f = 682000 kHz I999B8C999D999T999G999Y999) 0x0000
136 | to (QAM_AUTO f = 682000 kHz I999B8C999D999T32G16Y999P1) 0x4004
137 | tune to: QAM_AUTO f = 706000 kHz I999B8C999D999T32G16Y999P1
138 | (time: 08:34) service = SAT.1 HD Austria (-)
139 | service = RTL HD (RTL)
140 | service = ProSieben HD Austria (-)
141 | service = VOX HD (-)
142 | service = PULS 4 HD (-)
143 | service = CNN (-)
144 | service = Deluxe Music (-)
145 | service = Disney Channel (ORS)
146 | service = Radio Maria (-)
147 | service = Neotion Simpli OTA (ORS)
148 | dumping lists (42 services)
149 |
150 |
151 | DVB Playlist
152 |
153 |
161 |
169 |
177 |
185 |
193 |
201 |
209 |
217 |
225 |
233 |
241 |
249 |
257 |
265 |
273 |
281 |
289 |
297 |
305 |
313 |
321 |
329 |
337 |
345 |
353 |
361 |
369 |
377 |
385 |
393 |
401 |
409 |
417 |
425 |
433 |
441 |
449 |
457 |
465 |
473 |
481 |
489 |
490 |
491 | Done.
492 |
--------------------------------------------------------------------------------