Annotation of libsoftmpeg/README, revision 1.2
1.1 hunold 1: libsoftmpeg
2: ===========
3:
4: 1) The idea
5: -----------
6:
1.2 ! hunold 7: Many people have recently decided to work on software only mpeg
! 8: decoderes. The goal is to have a cheap DVB x86 box with vdr or MythTV
! 9: on it, but only using a so-called budget DVB card without onboard mpeg
! 10: decoder.
1.1 hunold 11:
12: 2) The problems
13: ---------------
14:
1.2 ! hunold 15: The "linuxtv-softmpeg" project tries to provide the "libsoftmpeg"
! 16: library, a thin library on top of existing technologies that adresses
! 17: the following problems:
1.1 hunold 18:
19: - low-delay buffering (for fast channel switches)
20: - mpeg audio decoding
21: - audio and video syncronization
22: - audio rendering
23: - video rendering
24: - long term playback stability
25:
26: 3) Existing "solutions"
27: -----------------------
28:
1.2 ! hunold 29: In the past, there have been different approaches to solve these
! 30: problems, but they are not quite satisfying yet.
1.1 hunold 31:
1.2 ! hunold 32: For example, while "mplayer" and "xine" are excellent movie players,
! 33: they use huge buffers for buffering and therefore make channel
! 34: switching nearly unbearable. Additionally, they lack long-term
! 35: stability, because they don't synchronize to the incoming stream and
! 36: buffer over- and underrums quite frequently occur. (see below for
! 37: details)
! 38:
! 39: The "softdevice" plugin from VDR is on the right way, but unfortunately
! 40: it is bound to VDR. Other projects like "mythtv" and the like need to
! 41: duplicate the code or invent the wheel again,
1.1 hunold 42:
43: 4) libsoftmpeg
44: --------------
45:
1.2 ! hunold 46: In order to use this project, you need:
! 47:
! 48: - DirectFB and a supported gfx
! 49: adapter (cle266 or Matrox G200/4x0/5x0 is fine, vesafb is only enough
! 50: if you have a horibbly fast machine ;-)
! 51:
! 52: - FusionSound, which needs OSS or ALSA (with oss emulation) sound
! 53: drivers
! 54:
1.1 hunold 55: - libavcodec, version 0.4.8 from http://ffmpeg.sf.net is fine
56:
57: "libsoftmpeg" already does the following:
58:
1.2 ! hunold 59: - low-delay buffering for audio and video, adjustable audio
! 60: prebuffering (currently 500ms, channel switching is usually done in
! 61: less than a second)
1.1 hunold 62:
63: - mpeg audio decoding via libavcodec from "ffmpeg" project
64:
65: - mpeg video decoding via libavcodec from "ffmpeg" project
66:
1.2 ! hunold 67: - audio and video synchronization using a "sync-to-audio-pts" approach
! 68: and "free flowing video display" (see below for a detailed description
! 69: of my ideas)
! 70:
! 71: - video rendering using DirectFB (http://www.directfb.org), a thin
! 72: library ontop of the Linux framebuffer device. DirectFB hosts a
! 73: "cle266" driver which drives the tv out of the EPIA/cle266 boards very
! 74: well
! 75:
! 76: - audio rendering using FusionSound
! 77: (http://www.directfb.org/fusionsound.xml), a thin library on top of
! 78: DirectFB and Fusion (fast interprocess communication), which supports
! 79: sound mixing, pitch adjustment and other neat features. Sound mixing is
! 80: very important, other applications can overlay system sounds onto the
! 81: live tv audio.
1.1 hunold 82:
83: 4) How to get it to work
84: ------------------------
85:
1.2 ! hunold 86: All this is working fairly well, a demonstration application is
! 87: included with the library that reads from the DVR device (so you need
! 88: "szap" for example to tune to a service and have the data put to the
! 89: DVR device) and displays audio and video. It should be easily possible
! 90: to use "libsoftmpeg" in "vdr", too.
! 91:
! 92: Please apply the "fusionsound_realtimepriority_reset_on_flush.diff"
! 93: patch to FusionSound first via "patch -p0 < [...]) in the FusionSound
! 94: directory and compile again. This adds realtime priority to the audio
! 95: feeding thread. If you omit this, the audio thread might starve and
! 96: sound will be jerky.
! 97:
! 98: If you do a "./autogen.sh ; make install" you'll get a demo application
! 99: called "dfb_ts", which reads a transport stream from the DVB dvr
! 100: device. You need to tune your frontend with "szap" for example and
! 101: redirect the data to the dvr device with the "-r" switch. For example:
1.1 hunold 102:
103: > szap -r "Das Erste"
1.2 ! hunold 104:
! 105: Then you can start the demo application and provide the video and audio
! 106: pids for the service you like to watch (have a look at "szap", it tells
! 107: you the correct pids):
! 108:
1.1 hunold 109: > ./dfb_ts /dev/dvb/adapter0/dvr0 0x7ff 0x800
110:
111: 4) The future
112: ------------------------
113:
1.2 ! hunold 114: What's currently completely missing is long-term playback stability. As
! 115: you probably know, the problem arises due to the different clocks used
! 116: for dvb encoding and decoding. See below for a detailed description of
! 117: the problem and my ideas on how it can be solved on x86.
! 118:
! 119: The next major step would be to add the ideas of long-term playback
! 120: stability and the cle266 mpeg decoder stuff to the library, so that
! 121: EPIA users can use the hardware acceleration.
! 122:
! 123: "IDEAS" contains a description of the concepts currently implemented
! 124: for audio/video synchronization and the ideas for long-term playback
! 125: stability.
1.1 hunold 126:
127: 5) If you want to participate
128: -----------------------------
129:
1.2 ! hunold 130: There is a mailing list for this project. Write a mail to
! 131: <ecartis@linuxtv.org> with "subscribe linuxtv-softmpeg" in the subject
! 132: to subscribe.
LinuxTV legacy CVS <linuxtv.org/cvs>