Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 1 | .. -*- coding: utf-8; mode: rst -*- |
| 2 | |
| 3 | .. _dvb_introdution: |
| 4 | |
| 5 | ************ |
| 6 | Introduction |
| 7 | ************ |
| 8 | |
| 9 | |
| 10 | .. _requisites: |
| 11 | |
| 12 | What you need to know |
| 13 | ===================== |
| 14 | |
| 15 | The reader of this document is required to have some knowledge in the |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 16 | area of digital video broadcasting (Digital TV) and should be familiar with |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 17 | part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e |
| 18 | you should know what a program/transport stream (PS/TS) is and what is |
| 19 | meant by a packetized elementary stream (PES) or an I-frame. |
| 20 | |
Mauro Carvalho Chehab | 3e202f2 | 2017-08-30 05:19:25 -0400 | [diff] [blame] | 21 | Various Digital TV standards documents are available for download at: |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 22 | |
Mauro Carvalho Chehab | 3e202f2 | 2017-08-30 05:19:25 -0400 | [diff] [blame] | 23 | - European standards (DVB): http://www.dvb.org and/or http://www.etsi.org. |
| 24 | - American standards (ATSC): https://www.atsc.org/standards/ |
| 25 | - Japanese standards (ISDB): http://www.dibeg.org/ |
| 26 | |
| 27 | It is also necessary to know how to access Linux devices and how to |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 28 | use ioctl calls. This also includes the knowledge of C or C++. |
| 29 | |
| 30 | |
| 31 | .. _history: |
| 32 | |
| 33 | History |
| 34 | ======= |
| 35 | |
Mauro Carvalho Chehab | 699f19e | 2017-09-01 12:28:16 -0400 | [diff] [blame] | 36 | The first API for Digital TV cards we used at Convergence in late 1999 was an |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 37 | extension of the Video4Linux API which was primarily developed for frame |
Mauro Carvalho Chehab | 699f19e | 2017-09-01 12:28:16 -0400 | [diff] [blame] | 38 | grabber cards. As such it was not really well suited to be used for Digital |
| 39 | TV cards and their new features like recording MPEG streams and filtering |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 40 | several section and PES data streams at the same time. |
| 41 | |
Mauro Carvalho Chehab | 9a9bf23 | 2017-08-30 05:20:45 -0400 | [diff] [blame] | 42 | In early 2000, Convergence was approached by Nokia with a proposal for a new |
Mauro Carvalho Chehab | 699f19e | 2017-09-01 12:28:16 -0400 | [diff] [blame] | 43 | standard Linux Digital TV API. As a commitment to the development of terminals |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 44 | based on open standards, Nokia and Convergence made it available to all |
| 45 | Linux developers and published it on https://linuxtv.org in September |
Mauro Carvalho Chehab | 9a9bf23 | 2017-08-30 05:20:45 -0400 | [diff] [blame] | 46 | 2000. With the Linux driver for the Siemens/Hauppauge DVB PCI card, |
Mauro Carvalho Chehab | 699f19e | 2017-09-01 12:28:16 -0400 | [diff] [blame] | 47 | Convergence provided a first implementation of the Linux Digital TV API. |
| 48 | Convergence was the maintainer of the Linux Digital TV API in the early |
Mauro Carvalho Chehab | 9a9bf23 | 2017-08-30 05:20:45 -0400 | [diff] [blame] | 49 | days. |
| 50 | |
| 51 | Now, the API is maintained by the LinuxTV community (i.e. you, the reader |
| 52 | of this document). The Linux Digital TV API is constantly reviewed and |
| 53 | improved together with the improvements at the subsystem's core at the |
| 54 | Kernel. |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 55 | |
| 56 | |
| 57 | .. _overview: |
| 58 | |
| 59 | Overview |
| 60 | ======== |
| 61 | |
| 62 | |
| 63 | .. _stb_components: |
| 64 | |
Mauro Carvalho Chehab | 8fa1bb5 | 2017-03-09 15:14:52 -0300 | [diff] [blame] | 65 | .. kernel-figure:: dvbstb.svg |
| 66 | :alt: dvbstb.svg |
| 67 | :align: center |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 68 | |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 69 | Components of a Digital TV card/STB |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 70 | |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 71 | A Digital TV card or set-top-box (STB) usually consists of the |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 72 | following main hardware components: |
| 73 | |
Mauro Carvalho Chehab | 192f8bc | 2017-08-30 05:25:20 -0400 | [diff] [blame] | 74 | Frontend consisting of tuner and digital TV demodulator |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 75 | Here the raw signal reaches the digital TV hardware from a satellite dish or |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 76 | antenna or directly from cable. The frontend down-converts and |
| 77 | demodulates this signal into an MPEG transport stream (TS). In case |
| 78 | of a satellite frontend, this includes a facility for satellite |
| 79 | equipment control (SEC), which allows control of LNB polarization, |
| 80 | multi feed switches or dish rotors. |
| 81 | |
Mauro Carvalho Chehab | 192f8bc | 2017-08-30 05:25:20 -0400 | [diff] [blame] | 82 | Conditional Access (CA) hardware like CI adapters and smartcard slots |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 83 | The complete TS is passed through the CA hardware. Programs to which |
| 84 | the user has access (controlled by the smart card) are decoded in |
| 85 | real time and re-inserted into the TS. |
| 86 | |
Mauro Carvalho Chehab | 192f8bc | 2017-08-30 05:25:20 -0400 | [diff] [blame] | 87 | .. note:: |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 88 | |
Mauro Carvalho Chehab | 192f8bc | 2017-08-30 05:25:20 -0400 | [diff] [blame] | 89 | Not every digital TV hardware provides conditional access hardware. |
| 90 | |
Mauro Carvalho Chehab | 699f19e | 2017-09-01 12:28:16 -0400 | [diff] [blame] | 91 | Demultiplexer which filters the incoming Digital TV MPEG-TS stream |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 92 | The demultiplexer splits the TS into its components like audio and |
| 93 | video streams. Besides usually several of such audio and video |
| 94 | streams it also contains data streams with information about the |
| 95 | programs offered in this or other streams of the same provider. |
| 96 | |
Mauro Carvalho Chehab | 192f8bc | 2017-08-30 05:25:20 -0400 | [diff] [blame] | 97 | MPEG2 audio and video decoder |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 98 | The main targets of the demultiplexer are the MPEG2 audio and video |
| 99 | decoders. After decoding they pass on the uncompressed audio and |
| 100 | video to the computer screen or (through a PAL/NTSC encoder) to a TV |
| 101 | set. |
| 102 | |
Mauro Carvalho Chehab | 192f8bc | 2017-08-30 05:25:20 -0400 | [diff] [blame] | 103 | .. note:: |
| 104 | |
| 105 | Modern hardware usually doesn't have a separate decoder hardware, as |
| 106 | such functionality can be provided by the main CPU, by the graphics |
| 107 | adapter of the system or by a signal processing hardware embedded on |
| 108 | a Systems on a Chip (SoC) integrated circuit. |
| 109 | |
| 110 | It may also not be needed for certain usages (e.g. for data-only |
| 111 | uses like “internet over satellite”). |
| 112 | |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 113 | :ref:`stb_components` shows a crude schematic of the control and data |
| 114 | flow between those components. |
| 115 | |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 116 | |
| 117 | |
| 118 | .. _dvb_devices: |
| 119 | |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 120 | Linux Digital TV Devices |
| 121 | ======================== |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 122 | |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 123 | The Linux Digital TV API lets you control these hardware components through |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 124 | currently six Unix-style character devices for video, audio, frontend, |
| 125 | demux, CA and IP-over-DVB networking. The video and audio devices |
| 126 | control the MPEG2 decoder hardware, the frontend device the tuner and |
Mauro Carvalho Chehab | 699f19e | 2017-09-01 12:28:16 -0400 | [diff] [blame] | 127 | the Digital TV demodulator. The demux device gives you control over the PES |
| 128 | and section filters of the hardware. If the hardware does not support |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 129 | filtering these filters can be implemented in software. Finally, the CA |
| 130 | device controls all the conditional access capabilities of the hardware. |
| 131 | It can depend on the individual security requirements of the platform, |
| 132 | if and how many of the CA functions are made available to the |
| 133 | application through this device. |
| 134 | |
| 135 | All devices can be found in the ``/dev`` tree under ``/dev/dvb``. The |
| 136 | individual devices are called: |
| 137 | |
| 138 | - ``/dev/dvb/adapterN/audioM``, |
| 139 | |
| 140 | - ``/dev/dvb/adapterN/videoM``, |
| 141 | |
| 142 | - ``/dev/dvb/adapterN/frontendM``, |
| 143 | |
| 144 | - ``/dev/dvb/adapterN/netM``, |
| 145 | |
| 146 | - ``/dev/dvb/adapterN/demuxM``, |
| 147 | |
| 148 | - ``/dev/dvb/adapterN/dvrM``, |
| 149 | |
| 150 | - ``/dev/dvb/adapterN/caM``, |
| 151 | |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 152 | where ``N`` enumerates the Digital TV cards in a system starting from 0, and |
| 153 | ``M`` enumerates the devices of each type within each adapter, starting |
Mauro Carvalho Chehab | e5707c9 | 2017-08-26 06:07:09 -0400 | [diff] [blame] | 154 | from 0, too. We will omit the “``/dev/dvb/adapterN/``\ ” in the further |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 155 | discussion of these devices. |
| 156 | |
| 157 | More details about the data structures and function calls of all the |
| 158 | devices are described in the following chapters. |
| 159 | |
| 160 | |
| 161 | .. _include_files: |
| 162 | |
| 163 | API include files |
| 164 | ================= |
| 165 | |
Mauro Carvalho Chehab | 89aba6a | 2017-08-30 05:15:40 -0400 | [diff] [blame] | 166 | For each of the Digital TV devices a corresponding include file exists. The |
| 167 | Digital TV API include files should be included in application sources with a |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 168 | partial path like: |
| 169 | |
| 170 | |
| 171 | .. code-block:: c |
| 172 | |
Mauro Carvalho Chehab | 0579e6e | 2016-07-04 16:25:48 -0300 | [diff] [blame] | 173 | #include <linux/dvb/ca.h> |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 174 | |
Mauro Carvalho Chehab | 0579e6e | 2016-07-04 16:25:48 -0300 | [diff] [blame] | 175 | #include <linux/dvb/dmx.h> |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 176 | |
Mauro Carvalho Chehab | 0579e6e | 2016-07-04 16:25:48 -0300 | [diff] [blame] | 177 | #include <linux/dvb/frontend.h> |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 178 | |
Mauro Carvalho Chehab | 0579e6e | 2016-07-04 16:25:48 -0300 | [diff] [blame] | 179 | #include <linux/dvb/net.h> |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 180 | |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 181 | |
| 182 | To enable applications to support different API version, an additional |
| 183 | include file ``linux/dvb/version.h`` exists, which defines the constant |
| 184 | ``DVB_API_VERSION``. This document describes ``DVB_API_VERSION 5.10``. |