Android MediaPlayerService解析
来源:互联网 发布:app软件价格 编辑:程序博客网 时间:2024/05/19 11:46
frameworks/av/media/libmediaplayerservice/MediaPlayerService.h
MediaPlayerService 类的继承关系如下:
Client 和 AudioOutput 是 MediaPlayerService的内部类
IMediaPlayerService是对为提供的接口类, 定义如下:
frameworks/av/include/media/IMediaPlayerService.h43class IMediaPlayerService: public IInterface44{45public:46 DECLARE_META_INTERFACE(MediaPlayerService);4748 virtual sp<IMediaRecorder> createMediaRecorder(const String16 &opPackageName) = 0;49 virtual sp<IMediaMetadataRetriever> createMetadataRetriever() = 0;50 virtual sp<IMediaPlayer> create(const sp<IMediaPlayerClient>& client,51 audio_session_t audioSessionId = AUDIO_SESSION_ALLOCATE) = 0;52 virtual sp<IOMX> getOMX() = 0;53 virtual sp<IHDCP> makeHDCP(bool createEncryptionModule) = 0;54 virtual sp<IMediaCodecList> getCodecList() const = 0;5556 // Connects to a remote display.57 // 'iface' specifies the address of the local interface on which to listen for58 // a connection from the remote display as an ip address and port number59 // of the form "x.x.x.x:y". The media server should call back into the provided remote60 // display client when display connection, disconnection or errors occur.61 // The assumption is that at most one remote display will be connected to the62 // provided interface at a time.63 virtual sp<IRemoteDisplay> listenForRemoteDisplay(const String16 &opPackageName,64 const sp<IRemoteDisplayClient>& client, const String8& iface) = 0;6566 // codecs and audio devices usage tracking for the battery app67 enum BatteryDataBits {68 // tracking audio codec69 kBatteryDataTrackAudio = 0x1,70 // tracking video codec71 kBatteryDataTrackVideo = 0x2,72 // codec is started, otherwise codec is paused73 kBatteryDataCodecStarted = 0x4,74 // tracking decoder (for media player),75 // otherwise tracking encoder (for media recorder)76 kBatteryDataTrackDecoder = 0x8,77 // start to play an audio on an audio device78 kBatteryDataAudioFlingerStart = 0x10,79 // stop/pause the audio playback80 kBatteryDataAudioFlingerStop = 0x20,81 // audio is rounted to speaker82 kBatteryDataSpeakerOn = 0x40,83 // audio is rounted to devices other than speaker84 kBatteryDataOtherAudioDeviceOn = 0x80,85 };8687 virtual void addBatteryData(uint32_t params) = 0;88 virtual status_t pullBatteryData(Parcel* reply) = 0;89};
MediaPlayerService 是native系统服务, 通过ServiceManager注册到系统中
frameworks/av/media/mediaserver/main_mediaserver.cpp.....38 sp<ProcessState> proc(ProcessState::self());39 sp<IServiceManager> sm(defaultServiceManager());40 ALOGI("ServiceManager: %p", sm.get());41 InitializeIcuOrDie();42 MediaPlayerService::instantiate();
instantiate() 创建MediaPlayerService并注册到系统服务中
frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp267void MediaPlayerService::instantiate() {268 defaultServiceManager()->addService(269 String16("media.player"), new MediaPlayerService());270}
MediaPlayerService构造函数如下:
272MediaPlayerService::MediaPlayerService()273{274 ALOGV("MediaPlayerService created");275 mNextConnId = 1;276277 mBatteryAudio.refCount = 0;278 for (int i = 0; i < NUM_AUDIO_DEVICES; i++) {279 mBatteryAudio.deviceOn[i] = 0;280 mBatteryAudio.lastTime[i] = 0;281 mBatteryAudio.totalTime[i] = 0;282 }283 // speaker is on by default284 mBatteryAudio.deviceOn[SPEAKER] = 1;285286 // reset battery stats287 // if the mediaserver has crashed, battery stats could be left288 // in bad state, reset the state upon service start.289 BatteryNotifier::getInstance().noteResetVideo();290 //register built-in player291 MediaPlayerFactory::registerBuiltinFactories();292}
registerBuiltinFactories() register the NU_PLAYER and TEST_PLAYER
243void MediaPlayerFactory::registerBuiltinFactories() {244 Mutex::Autolock lock_(&sLock);245246 if (sInitComplete)247 return;248249 registerFactory_l(new NuPlayerFactory(), NU_PLAYER);250 registerFactory_l(new TestPlayerFactory(), TEST_PLAYER);251252 sInitComplete = true;253}
createMediaRecorder() 创建Recorder用于录音
299sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(const String16 &opPackageName)300{301 pid_t pid = IPCThreadState::self()->getCallingPid();302 sp<MediaRecorderClient> recorder = new MediaRecorderClient(this, pid, opPackageName);303 wp<MediaRecorderClient> w = recorder;304 Mutex::Autolock lock(mLock);305 mMediaRecorderClients.add(w);306 ALOGV("Create new media recorder client from pid %d", pid);307 return recorder;308}
创建Client主要用于播放
325sp<IMediaPlayer> MediaPlayerService::create(const sp<IMediaPlayerClient>& client,326 audio_session_t audioSessionId)327{328 pid_t pid = IPCThreadState::self()->getCallingPid();329 int32_t connId = android_atomic_inc(&mNextConnId);330331 sp<Client> c = new Client(332 this, pid, connId, client, audioSessionId,333 IPCThreadState::self()->getCallingUid());334335 ALOGV("Create new client(%d) from pid %d, uid %d, ", connId, pid,336 IPCThreadState::self()->getCallingUid());337338 wp<Client> w = c;339 {340 Mutex::Autolock lock(mLock);341 mClients.add(w);342 }343 return c;344}
567MediaPlayerService::Client::Client(568 const sp<MediaPlayerService>& service, pid_t pid,569 int32_t connId, const sp<IMediaPlayerClient>& client,570 audio_session_t audioSessionId, uid_t uid)571{572 ALOGV("Client(%d) constructor", connId);573 mPid = pid;574 mConnId = connId;575 mService = service;576 mClient = client;577 mLoop = false;578 mStatus = NO_INIT;579 mAudioSessionId = audioSessionId;580 mUID = uid;581 mRetransmitEndpointValid = false;582 mAudioAttributes = NULL;583584#if CALLBACK_ANTAGONIZER585 ALOGD("create Antagonizer");586 mAntagonizer = new Antagonizer(notify, this);587#endif588}
阅读全文
0 0
- Android MediaPlayerService解析
- Android多媒体之MediaPlayerService
- MediaPlayerService
- Android MediaPlayer 分析- MediaPlayerService.cpp
- Android下MediaPlayerService构架介绍
- Android JB MediaPlayerService Interface Analysis
- Android之MediaPlayerService服务详解
- android mediaplayer and mediaplayerservice的小说明
- Android开发之MediaPlayerService服务详解(一)
- Android JB MediaPlayer MediaPlayerService Binder 构建 分析
- Android开发之MediaPlayerService服务详解(一)
- Android Binder机制浅析之注册MediaPlayerService(1)
- Android Binder机制浅析之注册MediaPlayerService(2)
- 六、Android Binder机制浅析之注册MediaPlayerService(1)
- 六、Android Binder机制浅析之注册MediaPlayerService(2)
- android 媒体框架学习--mediaplayerservice 关系类图
- 关于 MediaPlayerService
- MediaPlayer-MediaPlayerService-MediaPlayerService::Client的三角关系
- HDOJ 1031 Design T-Shirt
- 亚马逊高级应用科学家熊元骏:人类行为理解研究进展 | PhD Talk #19
- 直播预告 | 亚马逊高级应用科学家熊元骏:人类行为理解研究进展
- 利用条件GANs的pix2pix进化版:高分辨率图像合成和语义操作 | PaperDaily #23
- linux用nginx发布web项目
- Android MediaPlayerService解析
- 正则表达式
- 用循环结构实现4种形式的九九乘法表
- android源码中的so库源码路径
- BZOJ[2763][JLOI2011]飞行路线 spfa
- 开发部署到was服务器上
- 网络编程1
- [LUOGU] 1090 合并果子
- tf-idf + svm 文本分类