| .. -*- coding: utf-8; mode: rst -*- | |
| .. _dvb_introdution: | |
| ************ | |
| Introduction | |
| ************ | |
| .. _requisites: | |
| What you need to know | |
| ===================== | |
| The reader of this document is required to have some knowledge in the | |
| area of digital video broadcasting (Digital TV) and should be familiar with | |
| part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e | |
| you should know what a program/transport stream (PS/TS) is and what is | |
| meant by a packetized elementary stream (PES) or an I-frame. | |
| Various Digital TV standards documents are available for download at: | |
| - European standards (DVB): http://www.dvb.org and/or http://www.etsi.org. | |
| - American standards (ATSC): https://www.atsc.org/standards/ | |
| - Japanese standards (ISDB): http://www.dibeg.org/ | |
| It is also necessary to know how to access Linux devices and how to | |
| use ioctl calls. This also includes the knowledge of C or C++. | |
| .. _history: | |
| History | |
| ======= | |
| The first API for Digital TV cards we used at Convergence in late 1999 was an | |
| extension of the Video4Linux API which was primarily developed for frame | |
| grabber cards. As such it was not really well suited to be used for Digital | |
| TV cards and their new features like recording MPEG streams and filtering | |
| several section and PES data streams at the same time. | |
| In early 2000, Convergence was approached by Nokia with a proposal for a new | |
| standard Linux Digital TV API. As a commitment to the development of terminals | |
| based on open standards, Nokia and Convergence made it available to all | |
| Linux developers and published it on https://linuxtv.org in September | |
| 2000. With the Linux driver for the Siemens/Hauppauge DVB PCI card, | |
| Convergence provided a first implementation of the Linux Digital TV API. | |
| Convergence was the maintainer of the Linux Digital TV API in the early | |
| days. | |
| Now, the API is maintained by the LinuxTV community (i.e. you, the reader | |
| of this document). The Linux Digital TV API is constantly reviewed and | |
| improved together with the improvements at the subsystem's core at the | |
| Kernel. | |
| .. _overview: | |
| Overview | |
| ======== | |
| .. _stb_components: | |
| .. kernel-figure:: dvbstb.svg | |
| :alt: dvbstb.svg | |
| :align: center | |
| Components of a Digital TV card/STB | |
| A Digital TV card or set-top-box (STB) usually consists of the | |
| following main hardware components: | |
| Frontend consisting of tuner and digital TV demodulator | |
| Here the raw signal reaches the digital TV hardware from a satellite dish or | |
| antenna or directly from cable. The frontend down-converts and | |
| demodulates this signal into an MPEG transport stream (TS). In case | |
| of a satellite frontend, this includes a facility for satellite | |
| equipment control (SEC), which allows control of LNB polarization, | |
| multi feed switches or dish rotors. | |
| Conditional Access (CA) hardware like CI adapters and smartcard slots | |
| The complete TS is passed through the CA hardware. Programs to which | |
| the user has access (controlled by the smart card) are decoded in | |
| real time and re-inserted into the TS. | |
| .. note:: | |
| Not every digital TV hardware provides conditional access hardware. | |
| Demultiplexer which filters the incoming Digital TV MPEG-TS stream | |
| The demultiplexer splits the TS into its components like audio and | |
| video streams. Besides usually several of such audio and video | |
| streams it also contains data streams with information about the | |
| programs offered in this or other streams of the same provider. | |
| Audio and video decoder | |
| The main targets of the demultiplexer are audio and video | |
| decoders. After decoding, they pass on the uncompressed audio and | |
| video to the computer screen or to a TV set. | |
| .. note:: | |
| Modern hardware usually doesn't have a separate decoder hardware, as | |
| such functionality can be provided by the main CPU, by the graphics | |
| adapter of the system or by a signal processing hardware embedded on | |
| a Systems on a Chip (SoC) integrated circuit. | |
| It may also not be needed for certain usages (e.g. for data-only | |
| uses like “internet over satellite”). | |
| :ref:`stb_components` shows a crude schematic of the control and data | |
| flow between those components. | |
| .. _dvb_devices: | |
| Linux Digital TV Devices | |
| ======================== | |
| The Linux Digital TV API lets you control these hardware components through | |
| currently six Unix-style character devices for video, audio, frontend, | |
| demux, CA and IP-over-DVB networking. The video and audio devices | |
| control the MPEG2 decoder hardware, the frontend device the tuner and | |
| the Digital TV demodulator. The demux device gives you control over the PES | |
| and section filters of the hardware. If the hardware does not support | |
| filtering these filters can be implemented in software. Finally, the CA | |
| device controls all the conditional access capabilities of the hardware. | |
| It can depend on the individual security requirements of the platform, | |
| if and how many of the CA functions are made available to the | |
| application through this device. | |
| All devices can be found in the ``/dev`` tree under ``/dev/dvb``. The | |
| individual devices are called: | |
| - ``/dev/dvb/adapterN/audioM``, | |
| - ``/dev/dvb/adapterN/videoM``, | |
| - ``/dev/dvb/adapterN/frontendM``, | |
| - ``/dev/dvb/adapterN/netM``, | |
| - ``/dev/dvb/adapterN/demuxM``, | |
| - ``/dev/dvb/adapterN/dvrM``, | |
| - ``/dev/dvb/adapterN/caM``, | |
| where ``N`` enumerates the Digital TV cards in a system starting from 0, and | |
| ``M`` enumerates the devices of each type within each adapter, starting | |
| from 0, too. We will omit the “``/dev/dvb/adapterN/``\ ” in the further | |
| discussion of these devices. | |
| More details about the data structures and function calls of all the | |
| devices are described in the following chapters. | |
| .. _include_files: | |
| API include files | |
| ================= | |
| For each of the Digital TV devices a corresponding include file exists. The | |
| Digital TV API include files should be included in application sources with a | |
| partial path like: | |
| .. code-block:: c | |
| #include <linux/dvb/ca.h> | |
| #include <linux/dvb/dmx.h> | |
| #include <linux/dvb/frontend.h> | |
| #include <linux/dvb/net.h> | |
| To enable applications to support different API version, an additional | |
| include file ``linux/dvb/version.h`` exists, which defines the constant | |
| ``DVB_API_VERSION``. This document describes ``DVB_API_VERSION 5.10``. |