interface_cast做什么的?&&Android中真正的Player

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等。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值