184 lines · plain
1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later2 3.. _dvb_introdution:4 5************6Introduction7************8 9 10.. _requisites:11 12What you need to know13=====================14 15The reader of this document is required to have some knowledge in the16area of digital video broadcasting (Digital TV) and should be familiar with17part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e18you should know what a program/transport stream (PS/TS) is and what is19meant by a packetized elementary stream (PES) or an I-frame.20 21Various Digital TV standards documents are available for download at:22 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 27It is also necessary to know how to access Linux devices and how to28use ioctl calls. This also includes the knowledge of C or C++.29 30 31.. _history:32 33History34=======35 36The first API for Digital TV cards we used at Convergence in late 1999 was an37extension of the Video4Linux API which was primarily developed for frame38grabber cards. As such it was not really well suited to be used for Digital39TV cards and their new features like recording MPEG streams and filtering40several section and PES data streams at the same time.41 42In early 2000, Convergence was approached by Nokia with a proposal for a new43standard Linux Digital TV API. As a commitment to the development of terminals44based on open standards, Nokia and Convergence made it available to all45Linux developers and published it on https://linuxtv.org in September462000. With the Linux driver for the Siemens/Hauppauge DVB PCI card,47Convergence provided a first implementation of the Linux Digital TV API.48Convergence was the maintainer of the Linux Digital TV API in the early49days.50 51Now, the API is maintained by the LinuxTV community (i.e. you, the reader52of this document). The Linux Digital TV API is constantly reviewed and53improved together with the improvements at the subsystem's core at the54Kernel.55 56 57.. _overview:58 59Overview60========61 62 63.. _stb_components:64 65.. kernel-figure:: dvbstb.svg66 :alt: dvbstb.svg67 :align: center68 69 Components of a Digital TV card/STB70 71A Digital TV card or set-top-box (STB) usually consists of the72following main hardware components:73 74Frontend consisting of tuner and digital TV demodulator75 Here the raw signal reaches the digital TV hardware from a satellite dish or76 antenna or directly from cable. The frontend down-converts and77 demodulates this signal into an MPEG transport stream (TS). In case78 of a satellite frontend, this includes a facility for satellite79 equipment control (SEC), which allows control of LNB polarization,80 multi feed switches or dish rotors.81 82Conditional Access (CA) hardware like CI adapters and smartcard slots83 The complete TS is passed through the CA hardware. Programs to which84 the user has access (controlled by the smart card) are decoded in85 real time and re-inserted into the TS.86 87 .. note::88 89 Not every digital TV hardware provides conditional access hardware.90 91Demultiplexer which filters the incoming Digital TV MPEG-TS stream92 The demultiplexer splits the TS into its components like audio and93 video streams. Besides usually several of such audio and video94 streams it also contains data streams with information about the95 programs offered in this or other streams of the same provider.96 97Audio and video decoder98 The main targets of the demultiplexer are audio and video99 decoders. After decoding, they pass on the uncompressed audio and100 video to the computer screen or to a TV set.101 102 .. note::103 104 Modern hardware usually doesn't have a separate decoder hardware, as105 such functionality can be provided by the main CPU, by the graphics106 adapter of the system or by a signal processing hardware embedded on107 a Systems on a Chip (SoC) integrated circuit.108 109 It may also not be needed for certain usages (e.g. for data-only110 uses like "internet over satellite").111 112:ref:`stb_components` shows a crude schematic of the control and data113flow between those components.114 115 116 117.. _dvb_devices:118 119Linux Digital TV Devices120========================121 122The Linux Digital TV API lets you control these hardware components through123currently six Unix-style character devices for video, audio, frontend,124demux, CA and IP-over-DVB networking. The video and audio devices125control the MPEG2 decoder hardware, the frontend device the tuner and126the Digital TV demodulator. The demux device gives you control over the PES127and section filters of the hardware. If the hardware does not support128filtering these filters can be implemented in software. Finally, the CA129device controls all the conditional access capabilities of the hardware.130It can depend on the individual security requirements of the platform,131if and how many of the CA functions are made available to the132application through this device.133 134All devices can be found in the ``/dev`` tree under ``/dev/dvb``. The135individual devices are called:136 137- ``/dev/dvb/adapterN/audioM``,138 139- ``/dev/dvb/adapterN/videoM``,140 141- ``/dev/dvb/adapterN/frontendM``,142 143- ``/dev/dvb/adapterN/netM``,144 145- ``/dev/dvb/adapterN/demuxM``,146 147- ``/dev/dvb/adapterN/dvrM``,148 149- ``/dev/dvb/adapterN/caM``,150 151where ``N`` enumerates the Digital TV cards in a system starting from 0, and152``M`` enumerates the devices of each type within each adapter, starting153from 0, too. We will omit the "``/dev/dvb/adapterN/``\ " in the further154discussion of these devices.155 156More details about the data structures and function calls of all the157devices are described in the following chapters.158 159 160.. _include_files:161 162API include files163=================164 165For each of the Digital TV devices a corresponding include file exists. The166Digital TV API include files should be included in application sources with a167partial path like:168 169 170.. code-block:: c171 172 #include <linux/dvb/ca.h>173 174 #include <linux/dvb/dmx.h>175 176 #include <linux/dvb/frontend.h>177 178 #include <linux/dvb/net.h>179 180 181To enable applications to support different API version, an additional182include file ``linux/dvb/version.h`` exists, which defines the constant183``DVB_API_VERSION``. This document describes ``DVB_API_VERSION 5.10``.184