Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | |
| 2 | HOWTO: Get An Avermedia DVB-T working under Linux |
| 3 | ______________________________________________ |
| 4 | |
| 5 | Table of Contents |
| 6 | Assumptions and Introduction |
| 7 | The Avermedia DVB-T |
| 8 | Getting the card going |
| 9 | Receiving DVB-T in Australia |
| 10 | Known Limitations |
| 11 | Further Update |
| 12 | |
| 13 | Assumptions and Introduction |
| 14 | |
| 15 | It is assumed that the reader understands the basic structure |
| 16 | of the Linux Kernel DVB drivers and the general principles of |
| 17 | Digital TV. |
| 18 | |
| 19 | One significant difference between Digital TV and Analogue TV |
| 20 | that the unwary (like myself) should consider is that, |
| 21 | although the component structure of budget DVB-T cards are |
| 22 | substantially similar to Analogue TV cards, they function in |
| 23 | substantially different ways. |
| 24 | |
| 25 | The purpose of an Analogue TV is to receive and display an |
| 26 | Analogue Television signal. An Analogue TV signal (otherwise |
| 27 | known as composite video) is an analogue encoding of a |
| 28 | sequence of image frames (25 per second) rasterised using an |
| 29 | interlacing technique. Interlacing takes two fields to |
| 30 | represent one frame. Computers today are at their best when |
| 31 | dealing with digital signals, not analogue signals and a |
| 32 | composite video signal is about as far removed from a digital |
| 33 | data stream as you can get. Therefore, an Analogue TV card for |
| 34 | a PC has the following purpose: |
| 35 | |
| 36 | * Tune the receiver to receive a broadcast signal |
| 37 | * demodulate the broadcast signal |
| 38 | * demultiplex the analogue video signal and analogue audio |
| 39 | signal (note some countries employ a digital audio signal |
| 40 | embedded within the modulated composite analogue signal - |
| 41 | NICAM.) |
| 42 | * digitize the analogue video signal and make the resulting |
| 43 | datastream available to the data bus. |
| 44 | |
| 45 | The digital datastream from an Analogue TV card is generated |
| 46 | by circuitry on the card and is often presented uncompressed. |
| 47 | For a PAL TV signal encoded at a resolution of 768x576 24-bit |
| 48 | color pixels over 25 frames per second - a fair amount of data |
| 49 | is generated and must be proceesed by the PC before it can be |
| 50 | displayed on the video monitor screen. Some Analogue TV cards |
| 51 | for PC's have onboard MPEG2 encoders which permit the raw |
| 52 | digital data stream to be presented to the PC in an encoded |
| 53 | and compressed form - similar to the form that is used in |
| 54 | Digital TV. |
| 55 | |
| 56 | The purpose of a simple budget digital TV card (DVB-T,C or S) |
| 57 | is to simply: |
| 58 | |
| 59 | * Tune the received to receive a broadcast signal. |
| 60 | * Extract the encoded digital datastream from the broadcast |
| 61 | signal. |
| 62 | * Make the encoded digital datastream (MPEG2) available to |
| 63 | the data bus. |
| 64 | |
| 65 | The significant difference between the two is that the tuner |
| 66 | on the analogue TV card spits out an Analogue signal, whereas |
| 67 | the tuner on the digital TV card spits out a compressed |
| 68 | encoded digital datastream. As the signal is already |
| 69 | digitised, it is trivial to pass this datastream to the PC |
| 70 | databus with minimal additional processing and then extract |
| 71 | the digital video and audio datastreams passing them to the |
| 72 | appropriate software or hardware for decoding and viewing. |
| 73 | _________________________________________________________ |
| 74 | |
| 75 | The Avermedia DVB-T |
| 76 | |
| 77 | The Avermedia DVB-T is a budget PCI DVB card. It has 3 inputs: |
| 78 | |
| 79 | * RF Tuner Input |
| 80 | * Composite Video Input (RCA Jack) |
| 81 | * SVIDEO Input (Mini-DIN) |
| 82 | |
| 83 | The RF Tuner Input is the input to the tuner module of the |
| 84 | card. The Tuner is otherwise known as the "Frontend" . The |
| 85 | Frontend of the Avermedia DVB-T is a Microtune 7202D. A timely |
| 86 | post to the linux-dvb mailing list ascertained that the |
| 87 | Microtune 7202D is supported by the sp887x driver which is |
| 88 | found in the dvb-hw CVS module. |
| 89 | |
| 90 | The DVB-T card is based around the BT878 chip which is a very |
| 91 | common multimedia bridge and often found on Analogue TV cards. |
| 92 | There is no on-board MPEG2 decoder, which means that all MPEG2 |
| 93 | decoding must be done in software, or if you have one, on an |
| 94 | MPEG2 hardware decoding card or chipset. |
| 95 | _________________________________________________________ |
| 96 | |
| 97 | Getting the card going |
| 98 | |
| 99 | In order to fire up the card, it is necessary to load a number |
| 100 | of modules from the DVB driver set. Prior to this it will have |
| 101 | been necessary to download these drivers from the linuxtv CVS |
| 102 | server and compile them successfully. |
| 103 | |
| 104 | Depending on the card's feature set, the Device Driver API for |
| 105 | DVB under Linux will expose some of the following device files |
| 106 | in the /dev tree: |
| 107 | |
| 108 | * /dev/dvb/adapter0/audio0 |
| 109 | * /dev/dvb/adapter0/ca0 |
| 110 | * /dev/dvb/adapter0/demux0 |
| 111 | * /dev/dvb/adapter0/dvr0 |
| 112 | * /dev/dvb/adapter0/frontend0 |
| 113 | * /dev/dvb/adapter0/net0 |
| 114 | * /dev/dvb/adapter0/osd0 |
| 115 | * /dev/dvb/adapter0/video0 |
| 116 | |
| 117 | The primary device nodes that we are interested in (at this |
| 118 | stage) for the Avermedia DVB-T are: |
| 119 | |
| 120 | * /dev/dvb/adapter0/dvr0 |
| 121 | * /dev/dvb/adapter0/frontend0 |
| 122 | |
| 123 | The dvr0 device node is used to read the MPEG2 Data Stream and |
| 124 | the frontend0 node is used to tune the frontend tuner module. |
| 125 | |
| 126 | At this stage, it has not been able to ascertain the |
| 127 | functionality of the remaining device nodes in respect of the |
| 128 | Avermedia DVBT. However, full functionality in respect of |
| 129 | tuning, receiving and supplying the MPEG2 data stream is |
| 130 | possible with the currently available versions of the driver. |
| 131 | It may be possible that additional functionality is available |
| 132 | from the card (i.e. viewing the additional analogue inputs |
| 133 | that the card presents), but this has not been tested yet. If |
| 134 | I get around to this, I'll update the document with whatever I |
| 135 | find. |
| 136 | |
| 137 | To power up the card, load the following modules in the |
| 138 | following order: |
| 139 | |
| 140 | * insmod dvb-core.o |
| 141 | * modprobe bttv.o |
| 142 | * insmod bt878.o |
| 143 | * insmod dvb-bt8xx.o |
| 144 | * insmod sp887x.o |
| 145 | |
| 146 | Insertion of these modules into the running kernel will |
| 147 | activate the appropriate DVB device nodes. It is then possible |
| 148 | to start accessing the card with utilities such as scan, tzap, |
| 149 | dvbstream etc. |
| 150 | |
| 151 | The frontend module sp887x.o, requires an external firmware. |
| 152 | Please use the command "get_dvb_firmware sp887x" to download |
| 153 | it. Then copy it to /usr/lib/hotplug/firmware. |
| 154 | |
| 155 | Receiving DVB-T in Australia |
| 156 | |
| 157 | I have no experience of DVB-T in other countries other than |
| 158 | Australia, so I will attempt to explain how it works here in |
| 159 | Melbourne and how this affects the configuration of the DVB-T |
| 160 | card. |
| 161 | |
| 162 | The Digital Broadcasting Australia website has a Reception |
| 163 | locatortool which provides information on transponder channels |
| 164 | and frequencies. My local transmitter happens to be Mount |
| 165 | Dandenong. |
| 166 | |
| 167 | The frequencies broadcast by Mount Dandenong are: |
| 168 | |
| 169 | Table 1. Transponder Frequencies Mount Dandenong, Vic, Aus. |
| 170 | Broadcaster Channel Frequency |
| 171 | ABC VHF 12 226.5 MHz |
| 172 | TEN VHF 11 219.5 MHz |
| 173 | NINE VHF 8 191.625 MHz |
| 174 | SEVEN VHF 6 177.5 MHz |
| 175 | SBS UHF 29 536.5 MHz |
| 176 | |
| 177 | The Scan utility has a set of compiled-in defaults for various |
| 178 | countries and regions, but if they do not suit, or if you have |
| 179 | a pre-compiled scan binary, you can specify a data file on the |
| 180 | command line which contains the transponder frequencies. Here |
| 181 | is a sample file for the above channel transponders: |
| 182 | # Data file for DVB scan program |
| 183 | # |
| 184 | # C Frequency SymbolRate FEC QAM |
| 185 | # S Frequency Polarisation SymbolRate FEC |
| 186 | # T Frequency Bandwidth FEC FEC2 QAM Mode Guard Hier |
| 187 | T 226500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE |
| 188 | T 191625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE |
| 189 | T 219500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE |
| 190 | T 177500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE |
| 191 | T 536500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE |
| 192 | |
| 193 | The defaults for the transponder frequency and other |
| 194 | modulation parameters were obtained from www.dba.org.au. |
| 195 | |
| 196 | When Scan runs, it will output channels.conf information for |
| 197 | any channel's transponders which the card's frontend can lock |
| 198 | onto. (i.e. any whose signal is strong enough at your |
| 199 | antenna). |
| 200 | |
| 201 | Here's my channels.conf file for anyone who's interested: |
| 202 | ABC HDTV:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 |
| 203 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2307:0:560 |
| 204 | ABC TV Melbourne:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_ |
| 205 | 4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:65 |
| 206 | 0:561 |
| 207 | ABC TV 2:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 |
| 208 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:562 |
| 209 | ABC TV 3:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 |
| 210 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:563 |
| 211 | ABC TV 4:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64 |
| 212 | :TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:564 |
| 213 | ABC DiG Radio:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:Q |
| 214 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2311:56 |
| 215 | 6 |
| 216 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM |
| 217 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:158 |
| 218 | 5 |
| 219 | TEN Digital 1:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q |
| 220 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 |
| 221 | 586 |
| 222 | TEN Digital 2:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q |
| 223 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 |
| 224 | 587 |
| 225 | TEN Digital 3:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q |
| 226 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 |
| 227 | 588 |
| 228 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM |
| 229 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:158 |
| 230 | 9 |
| 231 | TEN Digital 4:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q |
| 232 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1 |
| 233 | 590 |
| 234 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM |
| 235 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:159 |
| 236 | 1 |
| 237 | TEN HD:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:T |
| 238 | RANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:0:1592 |
| 239 | TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM |
| 240 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:159 |
| 241 | 3 |
| 242 | Nine Digital:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QA |
| 243 | M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:513:660:10 |
| 244 | 72 |
| 245 | Nine Digital HD:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2 |
| 246 | :QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:0:1 |
| 247 | 073 |
| 248 | Nine Guide:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_ |
| 249 | 64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:670:1074 |
| 250 | 7 Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_6 |
| 251 | 4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1328 |
| 252 | 7 Digital 1:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM |
| 253 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1329 |
| 254 | 7 Digital 2:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM |
| 255 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1330 |
| 256 | 7 Digital 3:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM |
| 257 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1331 |
| 258 | 7 HD Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QA |
| 259 | M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:833:834:133 |
| 260 | 2 |
| 261 | 7 Program Guide:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3 |
| 262 | :QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:865:866: |
| 263 | 1334 |
| 264 | SBS HD:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:T |
| 265 | RANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:102:103:784 |
| 266 | SBS DIGITAL 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:Q |
| 267 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:161:81:785 |
| 268 | SBS DIGITAL 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:Q |
| 269 | AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:162:83:786 |
| 270 | SBS EPG:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64: |
| 271 | TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:163:85:787 |
| 272 | SBS RADIO 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM |
| 273 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:201:798 |
| 274 | SBS RADIO 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM |
| 275 | _64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:202:799 |
| 276 | _________________________________________________________ |
| 277 | |
| 278 | Known Limitations |
| 279 | |
| 280 | At present I can say with confidence that the frontend tunes |
| 281 | via /dev/dvb/adapter{x}/frontend0 and supplies an MPEG2 stream |
| 282 | via /dev/dvb/adapter{x}/dvr0. I have not tested the |
| 283 | functionality of any other part of the card yet. I will do so |
| 284 | over time and update this document. |
| 285 | |
| 286 | There are some limitations in the i2c layer due to a returned |
| 287 | error message inconsistency. Although this generates errors in |
| 288 | dmesg and the system logs, it does not appear to affect the |
| 289 | ability of the frontend to function correctly. |
| 290 | _________________________________________________________ |
| 291 | |
| 292 | Further Update |
| 293 | |
| 294 | dvbstream and VideoLAN Client on windows works a treat with |
| 295 | DVB, in fact this is currently serving as my main way of |
| 296 | viewing DVB-T at the moment. Additionally, VLC is happily |
| 297 | decoding HDTV signals, although the PC is dropping the odd |
| 298 | frame here and there - I assume due to processing capability - |
| 299 | as all the decoding is being done under windows in software. |
| 300 | |
| 301 | Many thanks to Nigel Pearson for the updates to this document |
| 302 | since the recent revision of the driver. |
| 303 | |
| 304 | January 29th 2004 |