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...
  • zangchaodotcnatgmail
  • zangchaodotcnatgmail
  • 2014年10月23日 17:19
  • 2881

android framework 框架层功能梳理

转自:http://www.tuicool.com/articles/777r6rB ,感谢博主分享. 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,为了全面...
  • kehyuanyu
  • kehyuanyu
  • 2015年07月01日 16:34
  • 5477

Android多媒体系统分析-Audio Framework 分析

1.1 音频框架 转载请注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音...
  • coloriy
  • coloriy
  • 2015年08月10日 11:15
  • 916

"Android系统框架"-Androi的面试必问部分

四层: 1.应用 2.应用框架 3.系统类库 4.linux核心驱动
  • nzfxx
  • nzfxx
  • 2016年06月29日 14:03
  • 1826

Android Framework系统服务详解

一、大致原理分析 Android本身有很多系统服务,如:AlarmManagerService、PowerManagerService、AudioService等,这些服务在手机系统启动时就进行开启或...
  • u012169524
  • u012169524
  • 2016年04月27日 22:20
  • 1678

Android输入法框架分析

Android输入法框架(Input Method Framework,IMF)是Android中非常重要的模块,它分布于三个部分(确切的说,是三个进程), 包含编辑框的客户(Client)ap...
  • lyglostangel
  • lyglostangel
  • 2015年08月31日 17:39
  • 758

关于MediaRouter的理解

The media router APIs enable a broad range of media output to playback equipment connected to A ndro...
  • CodeMyDream
  • CodeMyDream
  • 2016年12月05日 17:34
  • 1593

Framework框架概述

Framework框架 框架中包含三个主要部分,分别为 服务端、客户端和Linux驱动。 APK程序的运行过程 客户端的线程...
  • wangyanchao000
  • wangyanchao000
  • 2016年04月07日 14:45
  • 1795

Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期

前言:从本章开始,将进入Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord, 接下来几篇都是MediaPlayer相关。同样看下Agend...
  • hejjunlin
  • hejjunlin
  • 2016年08月29日 00:25
  • 12775

Android FrameWork框架原理之进程是个什么东西(从进程创建到myActivity.onCreate()的执行)

首先在Android中一个进程里只能放一个App。(特殊情况:同一个签名的两个App可以放到一个进程里,这里暂不考虑)。当一个App启动,系统zygote孵化器孵化出一个进程来执行这个App。zygo...
  • lishuangling21
  • lishuangling21
  • 2016年10月08日 19:24
  • 905
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ANDROID framework media 框架
举报原因:
原因补充:

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