annotate docs/html/http/ngx_http_mp4_module.html @ 4111:088ee72d2e57

Regenerated after previous commit.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 15 Sep 2011 08:59:38 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4111
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
1 <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>HTTP MP4 Module</title></head><body><center><h3>HTTP MP4 Module</h3></center><center><h4>Summary</h4></center><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
2 The module <code>ngx_http_mp4_module</code> provides pseudo-streaming
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
3 server-side support for H.264/AAC files typically having filename extensions
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
4 <code>.mp4</code>, <code>.m4v</code>,
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
5 and <code>.m4a</code>.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
6 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
7 Pseudo-streaming works in alliance with conformant Flash players.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
8 A player sends an HTTP request to the server with a start time
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
9 argument in the request URI’s query string (named simply
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
10 <code>start</code>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
11 and specified in seconds), and the server responds with a stream
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
12 so that its start position corresponds to the requested time,
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
13 for example:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
14 <blockquote><pre>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
15 http://example.com/elephants_dream.mp4?start=238.88
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
16 </pre></blockquote>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
17 This allows for a random seeking at any time, or starting playback
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
18 in the middle of a timeline.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
19 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
20 To support seeking, H.264-based formats store the metadata
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
21 in the so-called “moov atom.”
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
22 It is a part of the file that holds the index information for the
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
23 whole file.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
24 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
25 To start playback, a player first needs to read metadata.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
26 This is done by sending a special request with the
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
27 <code>start=0</code>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
28 argument. Many encoding software will insert the metadata at
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
29 the end of the file. This is bad for pseudo-streaming:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
30 the metadata needs to be located at the beginning of the file,
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
31 or else the entire file will have to be downloaded before it
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
32 starts playing. If a file is well-formed (with metadata at the
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
33 beginning of a file), nginx just sends back the contents of a file.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
34 Otherwise, it has to read the file and prepare a new stream so that
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
35 metadata comes before media data.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
36 This involves some CPU, memory, and disk I/O overhead,
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
37 so it is a good idea to
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
38 <a href="http://flowplayer.org/plugins/streaming/pseudostreaming.html#prepare">
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
39 prepare an original file for pseudo-streaming</a>,
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
40 rather than having nginx do this on every such request.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
41 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
42 For a matching request with a non-zero
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
43 <code>start</code>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
44 argument, nginx will read metadata from the file, prepare the
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
45 stream starting from the requested offset, and send it to a client.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
46 This has the same overhead as described above.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
47 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
48 If a matching request does not include the
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
49 <code>start</code>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
50 argument, there is no overhead, and the file is just sent as a static resource.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
51 Some players also support byte-range requests, and thus do not require
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
52 this module at all.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
53 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
54 This module is not built by default, it should be enabled with the
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
55 <code>--with-http_mp4_module</code>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
56 configuration parameter.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
57
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
58 If you were using the third-party mp4 module, be sure to disable it.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
59 </p><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
60 A similar pseudo-streaming support for FLV files is provided by the module
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
61 <a href="ngx_http_flv_module.html">ngx_http_flv_module</a>.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
62 </p><a name="example"></a><center><h4>Example Configuration</h4></center><p><blockquote><pre>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
63 location /video/ {
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
64 mp4;
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
65 mp4_buffer_size 1m;
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
66 mp4_max_buffer_size 5m;
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
67 }
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
68 </pre></blockquote></p><a name="directives"></a><center><h4>Directives</h4></center><hr><a name="mp4"></a><strong>syntax</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
69 <code>mp4</code><br><strong>default</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
70 <strong>none</strong><br><strong>context</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
71 <code>location</code><br><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
72 Turns on module processing in a surrounding location.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
73 </p><hr><a name="mp4_buffer_size"></a><strong>syntax</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
74 <code>mp4_buffer_size <code><i>size</i></code></code><br><strong>default</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
75 <code>mp4_buffer_size 512K</code><br><strong>context</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
76 <code>http</code>, <code>server</code>, <code>location</code><br><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
77 Sets the initial size of a memory buffer used to process MP4 files.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
78 </p><hr><a name="mp4_max_buffer_size"></a><strong>syntax</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
79 <code>mp4_max_buffer_size <code><i>size</i></code></code><br><strong>default</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
80 <code>mp4_max_buffer_size 10M</code><br><strong>context</strong>:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
81 <code>http</code>, <code>server</code>, <code>location</code><br><p>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
82 During metadata processing, a larger buffer may become necessary.
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
83 Its size cannot exceed the specified <code><i>size</i></code>,
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
84 or else nginx will return the server error
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
85 500 (Internal Server Error),
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
86 and log the following:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
87 <blockquote><pre>
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
88 "/some/movie/file.mp4" mp4 moov atom is too large:
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
89 12583268, you may want to increase mp4_max_buffer_size
088ee72d2e57 Regenerated after previous commit.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
90 </pre></blockquote></p></body></html>