media server分析

原创 2016年05月30日 23:57:52

media server是android的一个重要服务,主要是与多媒体相关的一些系统服务。在 ServiceManager相关中我们已经分析了,media server是在系统init.rc脚本中启动的,并且在service manager之后。由于media server中包含了media player、audio flinger、camera等多个service相关的东西,本文则只取其中的media player service分析media server和service manager之间的交互。

1、main_mediaserver.cpp
main_mediaserver.cpp文件位于/av/media/mediaserver/目录。该目录下的Android.mk文件中可以清楚看出,media server中包含了多个部分,并且最终编译成了一个名为mediaserver的可执行文件。可执行文件存放在系统的/system/bin/目录下,和init.rc中配置的media进程的可执行文件路径一致。

LOCAL_C_INCLUDES := \
    frameworks/av/media/libmediaplayerservice \
    frameworks/av/services/audioflinger \
    frameworks/av/services/camera/libcameraservice \
    frameworks/native/services/audioflinger

LOCAL_MODULE:= mediaserver    // 编译模块名

include $(BUILD_EXECUTABLE)   // 编译成可执行文件

main_mediaserver.cpp的代码很简单。主要是创建binder通讯的环境,初始化多个service,然后进入循环talk with binder driver状态。

int main(int argc, char** argv)
{
    signal(SIGPIPE, SIG_IGN);
    sp<ProcessState> proc(ProcessState::self());  // 初始化一个ProcessState对象
    sp<IServiceManager> sm = defaultServiceManager(); // 初始化BpServiceManager对象
    ALOGI("ServiceManager: %p", sm.get());
    AudioFlinger::instantiate();
    MediaPlayerService::instantiate(); // media player service初始化
    CameraService::instantiate();
    AudioPolicyService::instantiate();
    ProcessState::self()->startThreadPool();  // 启动PooledThread
    IPCThreadState::self()->joinThreadPool(); // talk with binder driver循环
}

2、MediaPlayerService.cpp
文件位于/av/media/libmediaplayerservice/目录。

void MediaPlayerService::instantiate() {
    defaultServiceManager()->addService(
            String16("media.player"), new MediaPlayerService());
}

// 创建一个MediaPlayer对象
sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client,
        int audioSessionId)
{
    int32_t connId = android_atomic_inc(&mNextConnId);

    sp<Client> c = new Client(
            this, pid, connId, client, audioSessionId,
            IPCThreadState::self()->getCallingUid());

    ALOGV("Create new client(%d) from pid %d, uid %d, ", connId, pid, 
         IPCThreadState::self()->getCallingUid());

    wp<Client> w = c; 
    {    
        Mutex::Autolock lock(mLock);
        mClients.add(w);
    }    
    return c;
}

在init时,直接获取到一个BpServiceManager对象,并通过其addService()接口,添加了一个MediaPlayerService对象到ServiceManager。defaultServiceManager()和addService()接口我们在native binder相关类中已经分析过了,前者将返回一个由一个handle == 0的BpBinder构造出来的BpServiceManager,而addService()方法将会调用到service_manager.c中的do_add_service()方法。需要注意的是service manager的Bn端实现,和普通的binder接口的Bn端实现不一样。普通的binder接口的Bn端,都有一个onTransact()方法,在该方法里对binder命令解析,并分发到接口方法的实现里。service manager的Bn端没有onTransact()接口,而是在一个binder_loop()循环中,不断的解析binder命令,并返回数据。具体分析可以参考ServiceManager启动流程

版权声明:本文为博主原创文章,未经博主允许不得转载。

RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)

Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和 Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。R...

利用live555 Media Server和VLC Active ocx实现简单的流媒体点播系统(B/S)

1. 大体的架构及流程         实现视频点播系统,B/S架构,服务端至少应该是两个服务器:流媒体服务器,web服务器。客户端则就是web页面。当开启页面后则是客户端和服务器的第一次交互,通过h...

Flash Media Server直播时声音断续的问题

首先FMS的资料在网上太少了,也许因为FMS卖得太贵,很少有人正式使用。但是Flash安装量不可忽视呀,FMS也有两个代替品Red5、Wowza Media Server,前者是免费开源基于java的...

如果你的第一个Flash Media Server 的 HelloWorld程序失败了……

我的第一篇日志讲的就是我在helloworld上遇到的问题,当时倒腾了好久也没好,后来看到这篇文章,就把所有画蛇添足的东西都删掉了,结果真的就成功搞定了第一次实验。 但我觉得事情不会这么简单,所以还...

Flash Media Server 教程(1)

什么是Flash Media Server ? Flash大家庭里的一员,以前大概叫Flash Communication Server,传说中的FCS就是这个?现在该叫FMS了吧... 不见...

在Ubuntu上安装Flash Media Server 3.5(FMS 3.5)

总结:在Ubuntu上安装FMS,跟linux不一样,Ubuntu需要先安装补丁,也许你的环境还需要lib神马的。。。 1。切换到root权限        sudo -i 2。进入...
  • whyzh
  • whyzh
  • 2015年03月19日 15:48
  • 570

ANS1312E Server media mount not possible

今天碰到:ANS1312E Server media mount not possible 解决思路: 1: update node node_name maxnummp=2 2: q driv...

Adobe Media Server 5(AMS)的安装及使用

一.什么是Adobe Media Server? Adobe Media Server也叫Adobe Flash Media Server(FMS),是Adobe出品的一款流媒体服务器,它使用Adob...

流媒体服务器NTV Media Server G3性能测试

大家好,我是资深测试工程师李工,今天我来和大家一起对云视睿博的高性能流媒体服务器NTV Media Server G3做一次性能测试。 今天测试有一个小目标,那就是验证在一台普通的PC机上,...
  • SE_JW
  • SE_JW
  • 2017年11月01日 18:24
  • 42

Flash Media Server 4.5 配置

摘自:http://blog.csdn.net/dongdong_java/article/details/8959340  这个博客 Flash Media Server 4.5(fms4.5)教...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:media server分析
举报原因:
原因补充:

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