ANDROID framework media 框架

原创 2016年08月31日 12:11:39
在framework中涉及media播放的流程头文件如下:IMediaPlayer.h mediaplayer.h IMediaPlayerClient.h

其中IMediaPlayer.h 定义了binder通信相关的接口。
定义了:
class BnMediaPlayer: public BnInterface
{
public:
    virtual status_t    onTransact( uint32_t code,
                                    const Parcel& data,
                                    Parcel* reply,
                                    uint32_t flags = 0);
};

IMediaPlayer.cpp 是binder通信接口的实现。
class BpMediaPlayer: public BpInterface;
status_t BnMediaPlayer::onTransact();

mediaplayer.h 是定义binder通信的客户端。在mediaplayer.cpp中如下代码获取BpMediaPlayer:
status_t MediaPlayer::setDataSource(
        const char *url, const KeyedVector *headers)
{
    LOGV("setDataSource(%s)", url);
    status_t err = BAD_VALUE;
    if (url != NULL) {
        const sp& service(getMediaPlayerService());
        if (service != 0) {
            sp player(
                    service->create(getpid(), this, url, headers));
            err = setDataSource(player);
        }
    }
    return err;
}

服务端在MediaPlayerService中。在MediaPlayerService.h中如下定义:
class Client : public BnMediaPlayer 
在MediaPlayerService.cpp中,create函数创建了BnMediaPlayer:
sp MediaPlayerService::create(
        pid_t pid, const sp& client, const char* url,
        const KeyedVector *headers)
{
    int32_t connId = android_atomic_inc(&mNextConnId);
    sp c = new Client(this, pid, connId, client);
    LOGV("Create new client(%d) from pid %d, url=%s, connId=%d", connId, pid, url, connId);
    if (NO_ERROR != c->setDataSource(url, headers))
    {
        c.clear();
        return c;
    }
    wp w = c;
    Mutex::Autolock lock(mLock);
    mClients.add(w);
    return c;
}

再来看一下MediaPlayer这个类的定义:
class MediaPlayer : public BnMediaPlayerClient,
                    public virtual IMediaDeathNotifier{}
很奇怪:在binder通信的客户端又有了一个binder通信的服务端: BnMediaPlayerClient
在IMediaPlayerClient.h 中这个binder通信只有一个接口:
class IMediaPlayerClient: public IInterface
{
public:
    DECLARE_META_INTERFACE(MediaPlayerClient);

    virtual void notify(int msg, int ext1, int ext2) = 0;
};

这个binder通信服务为谁提供呢?在回来看一下MediaPlayerServer中的create函数:
sp MediaPlayerService::create(
        pid_t pid, const sp& client, const char* url,
        const KeyedVector *headers)
客户端就在这里。这个binder通信的实质是一个消息回调函数。framework的media框架式一个双向binder通信框架。

以seek接口为例分析一下:
在mediaplayer.cpp 中调用seek 接口:
MediaPlayer (seek)->IMediaPlayer.cpp(bpMediaPlayer.cpp )->IMediaPlayer.cpp(bnMediaPlayer.cpp ) 在这里其实已经达到了MediaPlayerServer中的client类。当底层的media 完成seek 以后会抛出来一消息,这个消息通过 const sp& client 通知给MediaPlayer。

在media相关的头文件中还有一个MediaPlayerInterface.h 。这个头文件定义了底层播放器的接口。
版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

Android Media (Audio) Framework 多媒体系统框架

http://blog.csdn.net/lskshz/article/details/17264113 原址:http://blog.csdn.net/myzhzygh/article/d...

Media Framework你知道多少

Media Frametowork是一个开源的媒体框架,在这里我们为什么要提到它,有几点,首先,它简化来媒体播放器的发展,其次,允许开发人员组装组建,再次就是能创造出更高质量与全新的播放器效果,这只是...

CTS7.1 GTS7.1 详细测试步骤

CTS 测试 1、首先恢复出厂 2、设置手机:连接外网; 插入sim卡,打开移动数据; 打开蓝牙; 显示中睡眠时间选择最大; 竖屏; 语言US; 键盘google键盘; 打开定位,高...

android 4.2安装GMS包 && 预置GMS碰到的问题

自己的安卓平台在客户处测试时,有反馈Network Signal Info 这个apk无法安装,提示缺少共享库。通过在网上搜索,确认是少了GMS包的缘故。也就是得自己把add on属性的文件包添加到自...

android framework框架分析

framework 目录为框架层 代码,framework 为android四个层次中的第二层。 frameworks/ ├── base │   ├── Android.mk │  ...
  • hgl868
  • hgl868
  • 2011年10月04日 07:25
  • 8993

Android Framework框架

Framework定义了客户端组件和服务端组件功能及接口。包含3个主要部分:服务端,客户端和Linux驱动。 Framework框架" height="485" alt="Android Frame...

Android Framework 框架(DecorView)

http://hi.baidu.com/sunhuaer123/item/89cda90fba437437f0eafc94   Framework定义了客户端组件和服务端组件功能及接口。 框架中...

Android FrameWork——PackageManager框架

1.接着前面讲的ActivityManager框架,继续说一下系统另一个重要的框架,PackagerManager 同样先看一下静态类结构图: 大部分情况我们是在Activity中使用getP...

Android FrameWork——ActivityManager框架

        1.ActivityManager是android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,本blog就是着手对Activit...
  • stonecao
  • stonecao
  • 2011年07月01日 15:58
  • 36458

Android Framework下StageFright框架流程解读

1、    StageFright介绍     Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,并没有完全...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ANDROID framework media 框架
举报原因:
原因补充:

(最多只允许输入30个字)