interface_cast做什么的?&&Android中真正的Player
2014-03-17 10:19
881 查看
http://blog.csdn.net/myarrow/article/details/7054589
1. 前面对interface_cast已经进行了详解,为加深理解,现单独把结果抛出来。
它本身是一个模板,如:interface_cast<IMediaPlayer>(reply.readStrongBinder());
2. reply.readStrongBinder());返回的结果是一个新创建的BpBinder对象。
3. interface_cast<IMediaPlayer>(BpBinder);新创建一个BpMediaPlayer对象并返回,且在创建BpMediaPlayer时把BpBinder做为其参数,结果是把BpBinder对象赋值给其基类BpRefBase中的mRemote来保存。
4. BpMediaPlayer对象由MediaPlayer的mPlayer来保存。
大家经常讲,把性能搞好,并稳定就行了。不懂原理又怎么能把它搞好搞稳呢?其结果是把问题搞大。“深入其内部,才能将其征服”
Android中真正的Player
http://blog.csdn.net/myarrow/article/details/7054631
1. 在前面的介绍中,从Java到MediaPlayer---Binder---MediaPlayerService::Client已经讲清楚了。可是,在MediaPlayerService::Client <MediaPlayerService::create-> new Client / MediaPlayerService::Client::setDataSource->getPlayerType/createPlayer->android::createPlayer>中调用android::createPlayer之后,并把新创建的真正的Player保存到MediaPlayerService::Client中的mPlayer之后就没有下文了。
2. 真正的Player到底是什么样的?
根据本人的了解,有PVPlayer, StagefrightPlayer,MidiFile,VorbisPlayer,每个Player处理不同的媒体类型,他们通过getPlayerType(const char* url)的返回值进行分工完成。每个Player都有自己的特长,并做自己善于做的事情。详细分工情况见代码:sp<MediaPlayerBase> createPlayer(player_type
playerType, void* cookie,
notify_callback_f notifyFunc)函数。
3. 如果要在自己的芯片上实现硬件Demux和硬件Decoder(如对于机顶盒中的TS流),怎么办呢?
据本人了解,有两种办法:
1)基于MediaPlayerInterface接口,实现其中所有的接口函数,自已创建一个XXPlayer,并增加到android::createPlayer中。每个接口函数的具体实现就与以前在Linux环境下实现的方式一样,简单吧,以前的成果都可以用上了。
2)在现在的Player(如StagefrightPlayer)中写Extractor和Decoder插件。
为了实现第二种方案,需要先了解StagefrightPlayer的架构。为什么两种方案都需要了解呢,因为怎么做,取决于你的首席架构师或CTO等。
1. 前面对interface_cast已经进行了详解,为加深理解,现单独把结果抛出来。
它本身是一个模板,如:interface_cast<IMediaPlayer>(reply.readStrongBinder());
2. reply.readStrongBinder());返回的结果是一个新创建的BpBinder对象。
3. interface_cast<IMediaPlayer>(BpBinder);新创建一个BpMediaPlayer对象并返回,且在创建BpMediaPlayer时把BpBinder做为其参数,结果是把BpBinder对象赋值给其基类BpRefBase中的mRemote来保存。
4. BpMediaPlayer对象由MediaPlayer的mPlayer来保存。
大家经常讲,把性能搞好,并稳定就行了。不懂原理又怎么能把它搞好搞稳呢?其结果是把问题搞大。“深入其内部,才能将其征服”
Android中真正的Player
http://blog.csdn.net/myarrow/article/details/70546311. 在前面的介绍中,从Java到MediaPlayer---Binder---MediaPlayerService::Client已经讲清楚了。可是,在MediaPlayerService::Client <MediaPlayerService::create-> new Client / MediaPlayerService::Client::setDataSource->getPlayerType/createPlayer->android::createPlayer>中调用android::createPlayer之后,并把新创建的真正的Player保存到MediaPlayerService::Client中的mPlayer之后就没有下文了。
2. 真正的Player到底是什么样的?
根据本人的了解,有PVPlayer, StagefrightPlayer,MidiFile,VorbisPlayer,每个Player处理不同的媒体类型,他们通过getPlayerType(const char* url)的返回值进行分工完成。每个Player都有自己的特长,并做自己善于做的事情。详细分工情况见代码:sp<MediaPlayerBase> createPlayer(player_type
playerType, void* cookie,
notify_callback_f notifyFunc)函数。
3. 如果要在自己的芯片上实现硬件Demux和硬件Decoder(如对于机顶盒中的TS流),怎么办呢?
据本人了解,有两种办法:
1)基于MediaPlayerInterface接口,实现其中所有的接口函数,自已创建一个XXPlayer,并增加到android::createPlayer中。每个接口函数的具体实现就与以前在Linux环境下实现的方式一样,简单吧,以前的成果都可以用上了。
2)在现在的Player(如StagefrightPlayer)中写Extractor和Decoder插件。
为了实现第二种方案,需要先了解StagefrightPlayer的架构。为什么两种方案都需要了解呢,因为怎么做,取决于你的首席架构师或CTO等。
相关文章推荐
- Android cookieManager & OKHttp以及EasyPlayerPro的媒体流的认证的实现
- android:singleLine="true" 是什么意思?
- interface_cast做了什么
- 关于“什么才是真正的Push Mail”之我见——不赞同分"真、伪Push Mail“
- android_Mediaplayer&audiotrack MediaRecord&audiorecord
- android 编程中"<<"是什么意思?有什么作用?
- Attempt to invoke interface method 'boolean android.database.Cursor.requery()' on a null object refe
- android MediaPlayer 出…
- Android 中 &quot;@+id&quot;的作用是什么?以及其与android:id的区别是什么?
- Android Binder机制 - interface_cast和asBinder源码分析
- Android TextureView & MediaPlayer implements video media player
- interface_cast做什么的?
- android:ems="10"是什么意思
- Android-->回调(interface/abstract)的用法(通俗易懂)
- make: 没有什么可以做的为 `all_modules'(编译android单个源码)
- Android JB MediaPlayerService Interface Analysis
- Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android
- 什么是函数响应式编程(Java&Android版本)
- 思考ANDROID架构(三):WHAT & HOW-TO,ANDROID框架API的角色是什么?
- xmlns:tools="http://schemas.android.com/tools"以及tools:context=".ConfActivity"是什么意思