123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- <title>Introduction</title>
- <section id="requisites">
- <title>What you need to know</title>
- <para>The reader of this document is required to have some knowledge in
- the area of digital video broadcasting (DVB) 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.</para>
- <para>Various DVB standards documents are available from
- <ulink url="http://www.dvb.org" /> and/or
- <ulink url="http://www.etsi.org" />.</para>
- <para>It is also necessary to know how to access unix/linux devices and
- how to use ioctl calls. This also includes the knowledge of C or C++.
- </para>
- </section>
- <section id="history">
- <title>History</title>
- <para>The first API for DVB 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 DVB cards and their new features like recording MPEG streams
- and filtering several section and PES data streams at the same time.
- </para>
- <para>In early 2000, we were approached by Nokia with a proposal for a
- new standard Linux DVB 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
- <ulink url="http://www.linuxtv.org/" /> in September 2000.
- Convergence is the maintainer of the Linux DVB API. Together with the
- LinuxTV community (i.e. you, the reader of this document), the Linux DVB
- API will be constantly reviewed and improved. With the Linux driver for
- the Siemens/Hauppauge DVB PCI card Convergence provides a first
- implementation of the Linux DVB API.</para>
- </section>
- <section id="overview">
- <title>Overview</title>
- <figure id="stb_components">
- <title>Components of a DVB card/STB</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="dvbstb.pdf" format="PS" />
- </imageobject>
- <imageobject>
- <imagedata fileref="dvbstb.png" format="PNG" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>A DVB PCI card or DVB set-top-box (STB) usually consists of the
- following main hardware components: </para>
- <itemizedlist>
- <listitem>
- <para>Frontend consisting of tuner and DVB demodulator</para>
- <para>Here the raw signal reaches the DVB 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.</para>
- </listitem>
- <listitem>
- <para>Conditional Access (CA) hardware like CI adapters and smartcard slots
- </para>
- <para>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.</para>
- </listitem>
- <listitem>
- <para>Demultiplexer which filters the incoming DVB stream</para>
- <para>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.</para>
- </listitem>
- <listitem>
- <para>MPEG2 audio and video decoder</para>
- <para>The main targets of the demultiplexer are the MPEG2 audio and
- video decoders. After decoding they pass on the uncompressed audio and
- video to the computer screen or (through a PAL/NTSC encoder) to a TV
- set.</para>
- </listitem>
- </itemizedlist>
- <para><xref linkend="stb_components" /> shows a crude schematic of the control and data flow
- between those components.</para>
- <para>On a DVB PCI card not all of these have to be present since some
- functionality can be provided by the main CPU of the PC (e.g. MPEG
- picture and sound decoding) or is not needed (e.g. for data-only uses
- like “internet over satellite”). Also not every card or STB
- provides conditional access hardware.</para>
- </section>
- <section id="dvb_devices">
- <title>Linux DVB Devices</title>
- <para>The Linux DVB 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 DVB 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.</para>
- <para>All devices can be found in the <emphasis role="tt">/dev</emphasis>
- tree under <emphasis role="tt">/dev/dvb</emphasis>. The individual devices
- are called:</para>
- <itemizedlist>
- <listitem>
- <para><emphasis role="tt">/dev/dvb/adapterN/audioM</emphasis>,</para>
- </listitem>
- <listitem>
- <para><emphasis role="tt">/dev/dvb/adapterN/videoM</emphasis>,</para>
- </listitem>
- <listitem>
- <para><emphasis role="tt">/dev/dvb/adapterN/frontendM</emphasis>,</para>
- </listitem>
- <listitem>
- <para><emphasis role="tt">/dev/dvb/adapterN/netM</emphasis>,</para>
- </listitem>
- <listitem>
- <para><emphasis role="tt">/dev/dvb/adapterN/demuxM</emphasis>,</para>
- </listitem>
- <listitem>
- <para><emphasis role="tt">/dev/dvb/adapterN/caM</emphasis>,</para></listitem></itemizedlist>
- <para>where N enumerates the DVB PCI 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 “<emphasis
- role="tt">/dev/dvb/adapterN/</emphasis>” in the further dicussion
- of these devices. The naming scheme for the devices is the same wheter
- devfs is used or not.</para>
- <para>More details about the data structures and function calls of all
- the devices are described in the following chapters.</para>
- </section>
- <section id="include_files">
- <title>API include files</title>
- <para>For each of the DVB devices a corresponding include file exists.
- The DVB API include files should be included in application sources with
- a partial path like:</para>
- <programlisting>
- #include <linux/dvb/frontend.h>
- </programlisting>
- <para>To enable applications to support different API version, an
- additional include file <emphasis
- role="tt">linux/dvb/version.h</emphasis> exists, which defines the
- constant <emphasis role="tt">DVB_API_VERSION</emphasis>. This document
- describes <emphasis role="tt">DVB_API_VERSION 3</emphasis>.
- </para>
- </section>
|