Android NuPlayer

一、NuPlayer介绍

MediaPlayer的核心是NuPlayer实现视频的解码、渲染、同步、输出。NuPlayer基于StagefrightPlayer的基础类构建,利用了底层ALooper/AHandler机制来进行异步解码播放,ALooper轮询队列中的消息,把消息推送道AHandler中处理,最后通过handleMessage函数回调,做相应的逻辑处理。下图是NuPlayer的工作流程:

可以看到Android当中采用NuPlayer作为主流播放器,NuPlayer采用StageFright引擎,StageFright内部集成了OpenMAX编解码器,会话管理、时间同步、渲染、传输控制和DRM(Digital Rights Management)

AHandler机制

在NuPlayer源码当中到处能看到AHandler的影子,NuPlayer就是通过AHandler建立各个成员之间的通信和交互,类似Android Java层中的Handler一样,AHandler是Android native层实现的一个异步消息机制,在这个机制中所有的处理都是异步的,将变量封装到一个消息AMessage结构体中,然后放到队列中去,后台专门有一个线程会从这个队列中取出消息然后执行,执行函数就是onMessageReceived。 原理如下图:

下图是NuPlayer的架构设计:



二、NuPlayer接口

void NuPlayer::init(const wp<NuPlayerDriver> &driver)
void NuPlayer::setDataSourceAsync(const sp<IStreamSource> &source)
void NuPlayer::setDataSourceAsync(const sp<IMediaHTTPService> &httpService, const char *url, const KeyedVector<String8, String8> *headers) 
void NuPlayer::setDataSourceAsync(int fd, int64_t offset, int64_t length) 
void NuPlayer::setDataSourceAsync(const sp<DataSource> &dataSource) 
void NuPlayer::setDataSourceAsync(const String8& rtpParams) 
void NuPlayer::prepareAsync() 
void NuPlayer::setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink)
void NuPlayer::start() 
status_t NuPlayer::getBufferingSettings(BufferingSettings *buffering /* nonnull */)
status_t NuPlayer::setBufferingSettings(const BufferingSettings& buffering)
status_t NuPlayer::setPlaybackSettings(const AudioPlaybackRate &rate)
status_t NuPlayer::getPlaybackSettings(AudioPlaybackRate *rate /* nonnull */) 
status_t NuPlayer::se
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值