Mercurial > hg > nginx
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 |
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> |