192 lines
6.7 KiB
XML
192 lines
6.7 KiB
XML
|
<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>
|
||
|
|