Initial import of MPlayer SVN rev 28382 and FFmpeg SVN rev 16846.
[vaapi:athaifas-mplayer.git] / DOCS / tech / .svn / text-base / formats.txt.svn-base
1 1. Input layer, supported devices, methods:
2   - plain file, with seeking
3   - STDIN, without seeking backward
4   - network streaming (currently plain wget-like HTTP and MMS (.asx))
5   - VCD (Video CD) track, by direct CDROM device access (not requires mounting disc)
6   - DVD titles using .IFO structure, by direct DVD device access (not requires mounting disc)
7   - DVD titles using menu navigation (experimental/alpha, not yet finished!!!)
8   - CDDA - raw audio from audio CD-ROM discs (using cdparanoia libs)
9   - RTP streaming (mpeg-ps over multicast only)
10   - LIVE555 streaming - support SDP/RTSP (using the LIVE555 libs)
11   - SMB - file access over samba (experimental)
12
13 2. Demuxer/parser layer, supported file/media formats:
14
15   - MPEG streams (ES,PES,PS. no TS support yet)
16     note: mpeg demuxer silently ignore non-mpeg content, and find mpeg packets
17     in arbitrary streams. it means you can play directly VCD images (for example
18     CDRwin's .BIN files) without extracting mpeg files first (with tools like vcdgear)
19     It accepts all PES variants, including files created by VDR.
20     Note: VOB (video object) is simple mpeg stream, but it usually has 01BD
21     packets which may contain subtitles and non-mpeg audio. Usually found on DVD discs.
22     
23     Headers: mpeg streams has no global header. each frame sequence (also called GOP,
24     group of pictures) contains an sequence header, it describes that block.
25     In normal mpeg 1/2 content there are groups of 12-15 frames (24/30 fps).
26     It means you can freely seek in mpeg streams, and even can cut it to
27     small parts with standard file tools (dd, cut) without destroying it.
28     
29     Codecs: video is always mpeg video (mpeg1, mpeg2 or mpeg4).
30     audio is usually mpeg audio (any layer allowed, but it's layer 2 in most files)
31     but 01BD packets may contain AC3, DTS or LPCM too.
32     
33     FPS: mpeg2 content allows variable framerate, in form of delayed frames.
34     It's mostly used for playback 24fps content at 29.97/30 fps (NTSC) rate.
35     (so called Telecine or 3:2 pulldown effect)
36     It means you see 30 frames per second, but there are only 24 different
37     pictures and some of them are shown longer to fill 30 frame time.
38     If you encode such files with mencoder, using -ofps 24 or -ofps 23.976
39     is recommended.
40
41   - AVI streams.
42     Two kind of RIFF AVI files exists:
43     1. interleaved: audio and video content is interleaved. it's faster and
44        requires only 1 reading thread, so it's recommended (and mostly used).
45     2. non-interleaved: audio and video aren't interleaved, i mean first come
46        whole video followed by whole audio. it requires 2 reading process or
47        1 reading with lots of seeking. very bad for network or cdrom.
48     3. badly interleaved streams: mplayer detects interleaving at startup and
49        enables -ni option if it finds non-interleaved content. but sometimes
50        the stream seems to be interleaved, but with bad sync so it should be
51        played as non-interleaved otherwise you get a-v desync or buffer overflow.
52
53     MPlayer supports 2 kind of timing for AVI files:
54     - bps-based: it is based on bitrate/samplerate of video/audio stream.
55       this method is used by most players, including avifile and wmp.
56       files with broken headers, and files created with VBR audio but not
57       vbr-compliant encoder will result a-v desync with this method.
58       (mostly at seeking).
59     - interleaving-based: note: it can't be used togethwer with -ni
60       it doesn't use bitrate stuff of header, it uses the relative position
61       of interleaved audio and video chunks. makes some badly encoded file
62       with vbr audio playable.
63
64     Headers: AVI files has a mandatory header at the begin of the file,
65     describing video parameters (resolution, fps) and codecs. Optionally
66     they have an INDEX block at the end of the file. It's optional, but
67     most files has such block, because it's REQUIRED for seeking.
68     Btw usually it can be rebuilt from file content, mplayer does it with
69     the -idx switch. MPlayer can recreate broken index blocks using -forceidx.
70     As AVI files needs index for random access, broken files with no index
71     are usually unplayable.
72     Of course, cutting/joining AVI files needs special programs.
73
74     Codecs: any audio and video codecs allowed, but I note that VBR audio is
75     not well supported by most players. The file format makes it possible to
76     use VBR audio, but most players expect CBR audio and fails with VBR,
77     as VBR is unusual, and Microsoft's AVI specs only describe CBR audio.
78     I also note, that most AVI encoders/multiplexers create bad files if
79     using VBR audio. only 2 exception (known by me): NaNDub and MEncoder.
80     
81     FPS: only constant framerate allowed, but it's possible to skip frames.
82
83   - ASF streams:
84     ASF (active streaming format) comes from Microsoft. they developed two
85     variant of ASF, v1.0 and v2.0. v1.0 is used by their media tools (wmp and
86     wme) and v2.0 is published and patented :). of course, they differ,
87     no compatibility at all. (it's just a legality game)
88     MPlayer supports only v1.0, as nobody ever seen v2.0 files :)
89     Note, that .ASF files are nowdays come with extension .WMA or .WMV.
90     UPDATE: MS recently released the ASF v1.0 specs too, but it has some
91     restrictions making it illegal to read by us :)
92
93     Headers: Stream headers (codecs parameters) can be everywhere (in theory),
94     but all files i've seen had it at the beginning of the file.
95     Asf uses fixed packet size, so it is seekable without any INDEX block,
96     and broken files are playable well.
97     
98     Codecs: video is mostly microsoft's mpeg4 variants: MP42, MP43 (aka DivX),
99             WMV1 and WMV2. but any codecs allowed.
100             audio is usually wma or voxware, sometimes mp3, but any codecs allowed.
101
102     FPS: no fixed fps, every video frame has an exact timestamp instead.
103     I've got stream with up to 3 sec frame display times.
104
105   - QuickTime / MOV files:
106     They come from Mac users, usually with .mov or .qt extension, but as
107     MPEG Group chose quicktime as recommended file format for MPEG4,
108     sometimes you meet quicktime files with .mpg or .mp4 extension.
109   
110     At first look, it's a mixture of ASF and AVI.
111     It requires INDEX block for random access and seeking, and even for
112     playback, like AVI, but uses timestamps instead of constant framerate
113     and has more flexible stream options (including network stuff) like ASF.
114     
115     Headers: header can be placed at the beginning or at the end of file.
116     About half of my files have it at the beginning, others have it at the end.
117     Broken files are only playable if they have header at the beginning!
118     
119     Codecs: any codecs allowed, both CBR and VBR.
120     Note: most new mov files use Sorenson video and QDesign Music audio,
121     they are patented, closed, secret, (TM)-ed etc formats, only Apple's
122     quicktime player is able to playback these files (on win/mac only).
123
124   - VIVO files:
125     They are funny streams. They have a human-readable ascii header at
126     the beginning, followed by interleaved audio and video chunks.
127     It has no index block, has no fixed packetsize or sync bytes, and most
128     files even has no keyframes, so forget seeking!
129     Video is standard h.263 (in vivo/2.0 files it's modified, non-standard
130     h.263), audio is either standard g.723 or Vivo Siren codec.
131     
132     Note, that microsoft licensed vivo stuff, and included in their netshow
133     v2.0 program, so there are VfW/ACM codecs for vivo video and audio.
134
135   - RealMedia files:
136     A mixture of AVI and ASF features. It has mandatory headers at the
137     beginning and an optional INDEX (missing in most files).
138     The file is constructed of variable size chunks, with small header
139     telling the stream ID, timestamp, flags (keyframe...) and size.
140     But it has some features found in ASF files:
141     The video is actually double-muxed, the video chunks are really
142     appended fragments of the video frame. RV30+ supports B frames, so
143     you have to parse some bits of the first fragment to get the real PTS.
144     The audio frames are fixed size (CBR) but using the same scrambling
145     (out-of-order interleaving) as in the ASF files. 
146     
147     Codecs: Audio is either COOK(er), SIPR(o), ATRAC3 or DNET.
148     The DNET is actually a byte-swapped low-bitrate Dolby AC3 variant :)
149     Video is RV10 (h263 variant), RV20 (rp G2), RV30 (rp v8) or RV40 (rp v9).
150     
151     FPS: variable, just like in ASF.
152     
153     Note, that similarity of real and asf has some background - they worked
154     together on the (never finished/used) ASF v2 spec for some time.
155
156   - GIF files:
157     The GIF format is a common format for web graphics that supports
158     animation.  These are read through libungif or compatible library.
159     Variable frame delays are supported, but seeking is not supported.
160     Seeking will be supported once an index of gif frames can be built.