NuPlayer

NuPlayer 安卓原生的Player , 用于替代Awesomeplayer ;

1 结构关系图

 MediaPlayerFactory 通过工厂模式创建AwesomePlayer , NuPlayer,其他Player.

问:具体创建哪个Player 如何选择?

答:通过打分机制,选择得分最高的。

MediaPlayerService::Client::setDataSource()
>MediaPlayerFactory::getPlayerType()
>>GET_PLAYER_TYPE_IMPL() //这是个宏函数
>>> v->scoreFactory() //这里会遍历所有注册player 的分数 ,然后选最高的那个

每个player 都有实现自己的sorceFactory() 函数。 已Nuplayer 来说,位置再:
class NuplayerFactory : public MediaPlayerFactory :: IFactory 中

2 NuPlayer 层次关系

 3 Nuplayer 解码模块

Nuplayer 解码引入了NuplayerDecodeBase, 这是个基类。 真正解码逻辑再NuPlayerDecoder.cpp 文件中。 

解码器创建流程:

NuPlayer::instantiateDecoder()
> *decoder->configure(format)
>> NuPlayer::Decoder::onConfigure()
>>>MediaCodec::CreateByType()
>>>mcodec->configure() //构建解码器
>>>mcodec->start()

4 NuPlayer Render

  代码逻辑位于NuPlayerRenderer.c 中

1 解码后的音视频数据在哪里缓存?
答:再NuPlayerRenderer.c 文件中有个QueueEntry 的队列, 声明如下两个变量:
List<QueueEntry> mAudioQueue; //音频缓存队列
List<QueueEntry> mVideoQueue; //视频缓存队列
通过NuPlayer::Renderer::onQueueBuffer() // 将数据推进队列中;

2 解码后的音视频数据如何进行render?
再Nuplayer::Renderer::onDrainAudioQueue() 中消耗Audio数据;
postDrainVideoQueue()中会做AVSYNC, 之后会Call到NuPlayer::Renderer::OnDrainVideoQueue() 中消耗Video 数据,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值