Android Multimedia Framework

来源:互联网 发布:linux 面试题 编辑:程序博客网 时间:2024/05/22 19:48

AndroidMultimedia Framework 架构--base on jelly...

 

video 部分:

1:video playback

2:video streaming

3:video recorder

audio部分:

1:audio playback

2:audio streaming

3:sound recorder

4:audio flinger

 

 

android多媒体框架演变历史

android的多媒体框架从android诞生以来,发生了天方腹地的变化,
引擎的更改,
理流媒体的播放器nuplayer的加入,
到最新jellybean(android4.1)nuplayer逐步加入stagefrightplayer的功能,
可能以后stagefight引擎会被nuplayer取代,那都是后话了。
但是openmax(即引擎连接codec的纽带)一直都得到了保持。

 

在Froyo2.2 以前,multimedia framework 的引擎是一直都是opencore,
但为啥用stagefright替代呢,
由于我没有开发过opencore,不便下结论,
但从网上一些言论来看,估计是opencore太过庞大,不太好维护.

 

Gingerbreadandroid2.3,
加入了真正的支持流媒体的播发器nuplayer,
如果你下有源码,可以用gitk\nuplayer,
从gitk可以看到如下提交:
Initial support for a true streaming player for mpeg2 transportstreams.2010.12。

 

android3.0 到android 4.0 ,总体框架没有多大变化。

android4.1(jellybean) 最大的变化是给c/c++部分的多媒体框架
单独设立了一个framework/av的目录,
给它开辟了一个git库,
即从framework/base下的git库分离了出来,总算给多媒体找了个港湾。

 

jellybean多媒体架构

multimediaframework 架构 由两大部分构成:

----framework/base/media:
供上层程序调用的java API,
连接java和C/C++的jni部分,

----framework/av: c/c++代码
多媒体引擎(stagefright)
codec接口(openmaxinterface)。

编译命令

如果你修改的是java API接口或加LOG后编译可以用如下命令:makeframework ,
JNI 部分:make media_jni,
framework/av有三个libs组成:
libmedia
:make media
libmediaplayerservice: make mediaplayerservice
libstagefright: makestagefright

生成各自的.so文件,用adb push 到system/下就可以调试了。

记得重启!

 

讲了好多废话,还是没有看到总体架构,罪过,好吧,上图,更直观。

从上两图,我们可以发现上层APK要播放视频,

1::分配player类型
mediaplayerservice:获得一个player,类型根据你媒体文件的类型来决定的,
2:选择编码器
这个过程由awesomeplayer和omxcodec来完成,

至于声音和图像输出就交由audioflinger和surfaceflinger来完成了。

------------------------------------------------------------------------------------------------

m3u8流媒体code:

testCode:
./cts/tests/tests/media/src/android/media/cts/StreamingMediaPlayerTest.java
./frameworks/wilhelm/tests/native-media/res/values/strings.xml
<item>http://iphoned5.akamai.com.edgesuite.net/mhbarron/nasatv/nasatv_1500.m3u8</item>
<item>http://iphone.video.hsn.com/iPhone_high.m3u8</item>
<item>http://mlbsegqa.mlb.com/mlbam/dev/build84/2010/10/29/test1/master_wired.m3u8</item>

对于音频的处理:
1:libwebcore.so
./external/webkit/Source/WebCore/platform/MIMETypeRegistry.cpp
 { "application/vnd.apple.mpegurl", "m3u8" },
 { "application/mpegurl", "m3u8" },
 { "application/x-mpegurl", "m3u8" },
 
2:libmediaplayerservice.so
./frameworks/av/media/libmediaplayerservice/nuplayer
./frameworks/av/media/libmediaplayerservice/MediaPlayerFactory

 

具体的流程:

多媒体本地播放流程video playback--base on jellybean (三)

 

原创粉丝点击