Android StagefrightPlayer

 1. 对StagefrightPlayer的好奇

前面对StagefrightPlayer的创建流程已经分析清楚了,即在Android::createPlayer中根据url的type来创建不同的player. StagefrightPlayer是Android提供的,比较经典的一个Player。但个人觉得它不怎么样,还不如ffmpeg支持的codec和parser多。还有一个opencore,更是复杂无比的东东,它采用datapath的方式,类似于大家熟悉的GStreamer。不理解大家为什么会把简单的事情复杂化。

 

2. StagefrightPlayer是个什么东东?

仔细一看代码,它也是一个空壳公司,其中就一个员工给他干活,它就是AwesomePlayer *mPlayer,在创建StagefrightPlayer时,它就被创建了。StagefrighPlayer中的所有接口都是简单调用AwesomePlayer的对应接口来实现。所以它只是一个接口人,什么都不是。这个AwesomePlayer才是我们的研究重点。

 

3. AwesomePlayer有些什么东东?

它再神奇,不也就是实现AV播放吗?看看自己直接基于Driver的MyPlayer不也就1000多行代码就把TS播放玩得很爽了。但google为了其开放性,搞得一下子搞不明白。既然想跟着Android混饭吃,只好读它这一大堆没有什么文档和注释的代码了。

AVPlayer肯定具有以下模块:

1) 数据源(如TS流,MP4...)

2) Demux (音视频分离)

3) 音视频解码

4) 音频播放和视频播放

5) 音视频同步

6) 整个工作流程

AwesomePlayer就是把以上6位员工组织起来工作的老板,下面就对每一个问题进行一一分析。

下面先看看它的几位骨干员工:

 

// Events  
sp<TimedEventQueue::Event> mVideoEvent;  
sp<TimedEventQueue::Event> mStreamDoneEvent;  
sp<TimedEventQueue::Event> mBufferingEvent;  
sp<TimedEventQueue::Event> mCheckAudioStatusEvent;  
sp<TimedEventQueue::Event> mVideoLagEvent;  
  
// Audio Source and Decoder  
void setAudioSource(sp<MediaSource> source);  
status_t initAudioDecoder();  
  
// Video Source and Decoder  
void setVideoSource(sp<MediaSource> source);  
status_t initVideoDecoder(uint32_t flags = 0);  
  
// Data source  
sp<DataSource> mFileSource;  
  
// Video render  
sp<MediaSource> mVideoTrack;  
sp<MediaSource> mVideoSource;  
sp<AwesomeRenderer> mVideoRenderer;  
  
// Audio render  
sp<MediaSource> mAudioTrack;  
sp<MediaSource> mAudioSource;  
AudioPlayer *mAudioPlayer;


 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android,工作,video,audio,events,Codec)