1page.title=Media
2@jd:body
3
4<!--
5    Copyright 2015 The Android Open Source Project
6
7    Licensed under the Apache License, Version 2.0 (the "License");
8    you may not use this file except in compliance with the License.
9    You may obtain a copy of the License at
10
11        http://www.apache.org/licenses/LICENSE-2.0
12
13    Unless required by applicable law or agreed to in writing, software
14    distributed under the License is distributed on an "AS IS" BASIS,
15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16    See the License for the specific language governing permissions and
17    limitations under the License.
18-->
19<div id="qv-wrapper">
20  <div id="qv">
21    <h2>In this document</h2>
22    <ol id="auto-toc">
23    </ol>
24  </div>
25</div>
26
27<img style="float: right; margin: 0px 15px 15px 15px;"
28src="images/ape_fwk_hal_media.png" alt="Android Media HAL icon"/>
29
30<p>Android includes Stagefright, a media playback engine at the native level
31that has built-in software-based codecs for popular media formats.</p>
32
33<p>Stagefright audio and video playback features include integration with
34OpenMAX codecs, session management, time-synchronized rendering, transport
35control, and DRM.</p>
36
37<p>Stagefright also supports integration with custom hardware codecs provided by
38you. To set a hardware path to encode and decode media, you must implement a
39hardware-based codec as an OpenMax IL (Integration Layer) component.</p>
40
41<p class="note"><strong>Note:</strong> Stagefright updates can occur through the
42Android <a href="{@docRoot}security/bulletin/index.html">monthly security
43update</a> process and as part of an Android OS release.</p>
44
45<h2 id="architecture">Architecture</h2>
46<p>Media applications interact with the Android native multimedia framework
47according to the following architecture.</p>
48<img src="images/ape_fwk_media.png" alt="Android media architecture"
49id="figure1" /><p class="img-caption"><strong>Figure 1.</strong> Media
50architecture</p>
51
52<dl>
53<dt>Application Framework</dt>
54<dd>At the application framework level is application code that utilizes
55<a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a>
56APIs to interact with the multimedia hardware.</dd>
57
58<dt>Binder IPC</dt>
59<dd>The Binder IPC proxies facilitate communication over process boundaries.
60They are located in the <code>frameworks/av/media/libmedia</code> directory and
61begin with the letter "I".</dd>
62
63<dt>Native Multimedia Framework</dt>
64<dd>At the native level, Android provides a multimedia framework that utilizes
65the Stagefright engine for audio and video recording and playback. Stagefright
66comes with a default list of supported software codecs and you can implement
67your own hardware codec by using the OpenMax integration layer standard. For
68more implementation details, see the MediaPlayer and Stagefright components
69located in <code>frameworks/av/media</code>.</dd>
70
71<dt>OpenMAX Integration Layer (IL)</dt>
72<dd>The OpenMAX IL provides a standardized way for Stagefright to recognize and
73use custom hardware-based multimedia codecs called components. You must provide
74an OpenMAX plugin in the form of a shared library named
75<code>libstagefrighthw.so</code>. This plugin links Stagefright with your custom
76codec components, which must be implemented according to the OpenMAX IL
77component standard.</dd>
78</dl>
79
80<h2 id="codecs">Implementing custom codecs</h2>
81<p>Stagefright comes with built-in software codecs for common media formats, but
82you can also add your own custom hardware codecs as OpenMAX components. To do
83this, you must create the OMX components and an OMX plugin that hooks together
84your custom codecs with the Stagefright framework. For example components, see
85the <code>hardware/ti/omap4xxx/domx/</code>; for an example plugin for the
86Galaxy Nexus, see <code>hardware/ti/omap4xx/libstagefrighthw</code>.</p>
87
88<p>To add your own codecs:</p>
89<ol>
90<li>Create your components according to the OpenMAX IL component standard. The
91component interface is located in the
92<code>frameworks/native/include/media/OpenMAX/OMX_Component.h</code> file. To
93learn more about the OpenMAX IL specification, refer to the
94<a href="http://www.khronos.org/openmax/">OpenMAX website</a>.</li>
95<li>Create a OpenMAX plugin that links your components with the Stagefright
96service. For the interfaces to create the plugin, see
97<code>frameworks/native/include/media/hardware/OMXPluginBase.h</code> and
98<code>HardwareAPI.h</code> header files.</li>
99<li>Build your plugin as a shared library with the name
100<code>libstagefrighthw.so</code> in your product Makefile. For example:
101<br>
102<p><pre>LOCAL_MODULE := libstagefrighthw</pre></p>
103<p>In your device's Makefile, ensure you declare the module as a product
104package:</p>
105<pre>
106PRODUCT_PACKAGES += \
107  libstagefrighthw \
108  ...
109</pre></li></ol>
110
111<h2 id="expose">Exposing codecs to the framework</h2>
112<p>The Stagefright service parses the <code>system/etc/media_codecs.xml</code>
113and <code>system/etc/media_profiles.xml</code> to expose the supported codecs
114and profiles on the device to app developers via the
115<code>android.media.MediaCodecList</code> and
116<code>android.media.CamcorderProfile</code> classes. You must create both files
117in the <code>device/&lt;company&gt;/&lt;device&gt;/</code> directory
118and copy this over to the system image's <code>system/etc</code> directory in
119your device's Makefile. For example:</p>
120<pre>
121PRODUCT_COPY_FILES += \
122  device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \
123  device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
124</pre>
125
126<p>For complete examples, seee <code>device/samsung/tuna/media_codecs.xml</code>
127and <code>device/samsung/tuna/media_profiles.xml</code> .</p>
128
129<p class="note"><strong>Note:</strong> As of Android 4.1, the
130<code>&lt;Quirk&gt;</code> element for media codecs is no longer supported.</p>
131