├── .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 | 154 | 0001. ATV HD 155 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 156 | 157 | 2 158 | program=12401 159 | 160 | 161 | 162 | 0002. ORF III HD 163 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 164 | 165 | 3 166 | program=12402 167 | 168 | 169 | 170 | 0003. ORF SPORT+ HD 171 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 172 | 173 | 4 174 | program=12403 175 | 176 | 177 | 178 | 0004. 3sat HD 179 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 180 | 181 | 5 182 | program=12404 183 | 184 | 185 | 186 | 0005. ATV II 187 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 188 | 189 | 6 190 | program=12405 191 | 192 | 193 | 194 | 0006. SRF 1 195 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 196 | 197 | 7 198 | program=12406 199 | 200 | 201 | 202 | 0007. Puls4 203 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 204 | 205 | 8 206 | program=12407 207 | 208 | 209 | 210 | 0008. SAT.1 Gold 211 | dvb-t://frequency=490000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 212 | 213 | 9 214 | program=12408 215 | 216 | 217 | 218 | 0009. ORF1 219 | dvb-t://frequency=514000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=0:guard=0:hierarchy=0 220 | 221 | 10 222 | program=10101 223 | 224 | 225 | 226 | 0010. ORF2 St 227 | dvb-t://frequency=514000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=0:guard=0:hierarchy=0 228 | 229 | 11 230 | program=10112 231 | 232 | 233 | 234 | 0011. ATV 235 | dvb-t://frequency=514000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=0:guard=0:hierarchy=0 236 | 237 | 12 238 | program=10120 239 | 240 | 241 | 242 | 0012. ORF2 B 243 | dvb-t://frequency=514000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=0:guard=0:hierarchy=0 244 | 245 | 13 246 | program=10132 247 | 248 | 249 | 250 | 0013. Das Erste HD 251 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 252 | 253 | 14 254 | program=12202 255 | 256 | 257 | 258 | 0014. RTL2 259 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 260 | 261 | 15 262 | program=12203 263 | 264 | 265 | 266 | 0015. sixx Austria 267 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 268 | 269 | 16 270 | program=12204 271 | 272 | 273 | 274 | 0016. kabel eins austria 275 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 276 | 277 | 17 278 | program=12205 279 | 280 | 281 | 282 | 0017. Eurosport 283 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 284 | 285 | 18 286 | program=12206 287 | 288 | 289 | 290 | 0018. Playboy TV 291 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 292 | 293 | 19 294 | program=12207 295 | 296 | 297 | 298 | 0019. BR 299 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 300 | 301 | 20 302 | program=12208 303 | 304 | 305 | 306 | 0020. KiKa 307 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 308 | 309 | 21 310 | program=12209 311 | 312 | 313 | 314 | 0021. arte 315 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 316 | 317 | 22 318 | program=12210 319 | 320 | 321 | 322 | 0022. zdf neo 323 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 324 | 325 | 23 326 | program=12211 327 | 328 | 329 | 330 | 0023. Sport1 331 | dvb-t://frequency=618000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 332 | 333 | 24 334 | program=12212 335 | 336 | 337 | 338 | 0024. service_id 12101 339 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 340 | 341 | 25 342 | program=12101 343 | 344 | 345 | 346 | 0025. service_id 12102 347 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 348 | 349 | 26 350 | program=12102 351 | 352 | 353 | 354 | 0026. service_id 12103 355 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 356 | 357 | 27 358 | program=12103 359 | 360 | 361 | 362 | 0027. service_id 12104 363 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 364 | 365 | 28 366 | program=12104 367 | 368 | 369 | 370 | 0028. service_id 12105 371 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 372 | 373 | 29 374 | program=12105 375 | 376 | 377 | 378 | 0029. service_id 12106 379 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 380 | 381 | 30 382 | program=12106 383 | 384 | 385 | 386 | 0030. service_id 12107 387 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 388 | 389 | 31 390 | program=12107 391 | 392 | 393 | 394 | 0031. service_id 12108 395 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 396 | 397 | 32 398 | program=12108 399 | 400 | 401 | 402 | 0032. service_id 12109 403 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 404 | 405 | 33 406 | program=12109 407 | 408 | 409 | 410 | 0033. service_id 12110 411 | dvb-t://frequency=682000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 412 | 413 | 34 414 | program=12110 415 | 416 | 417 | 418 | 0034. SAT.1 HD Austria 419 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 420 | 421 | 35 422 | program=12301 423 | 424 | 425 | 426 | 0035. RTL HD 427 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 428 | 429 | 36 430 | program=12302 431 | 432 | 433 | 434 | 0036. ProSieben HD Austria 435 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 436 | 437 | 37 438 | program=12303 439 | 440 | 441 | 442 | 0037. VOX HD 443 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 444 | 445 | 38 446 | program=12304 447 | 448 | 449 | 450 | 0038. PULS 4 HD 451 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 452 | 453 | 39 454 | program=12305 455 | 456 | 457 | 458 | 0039. CNN 459 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 460 | 461 | 40 462 | program=12306 463 | 464 | 465 | 466 | 0040. Deluxe Music 467 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 468 | 469 | 41 470 | program=12307 471 | 472 | 473 | 474 | 0041. Disney Channel 475 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 476 | 477 | 42 478 | program=12308 479 | 480 | 481 | 482 | 0042. Radio Maria 483 | dvb-t://frequency=706000000:inversion=2:bandwidth=8:code-rate-hp=9:code-rate-lp=9:modulation=0:transmission=32:guard=16:hierarchy=0 484 | 485 | 43 486 | program=12310 487 | 488 | 489 | 490 | 491 | Done. 492 | --------------------------------------------------------------------------------