作者:ly荚n嚯嚯 | 来源:互联网 | 2023-10-10 16:03
1. 在前面的介绍中&#xff0c;从Java到MediaPlayer---Binder---MediaPlayerService::Client已经讲清楚了。可是&#xff0c;在MediaPlayerService::Client <MediaPlayerService::create-> new Client / MediaPlayerService::Client::setDataSource->getPlayerType/createPlayer->android::createPlayer>中调用android::createPlayer之后&#xff0c;并把新创建的真正的Player保存到MediaPlayerService::Client中的mPlayer之后就没有下文了。
2. 真正的Player到底是什么样的&#xff1f;
根据本人的了解&#xff0c;有PVPlayer, StagefrightPlayer,MidiFile,VorbisPlayer,每个Player处理不同的媒体类型&#xff0c;他们通过getPlayerType(const char* url)的返回值进行分工完成。每个Player都有自己的特长&#xff0c;并做自己善于做的事情。详细分工情况见代码:sp createPlayer(player_type playerType, void* COOKIE,
notify_callback_f notifyFunc)函数。
3. 如果要在自己的芯片上实现硬件Demux和硬件Decoder&#xff08;如对于机顶盒中的TS流&#xff09;&#xff0c;怎么办呢&#xff1f;
据本人了解&#xff0c;有两种办法&#xff1a;
1&#xff09;基于MediaPlayerInterface接口&#xff0c;实现其中所有的接口函数&#xff0c;自已创建一个XXPlayer,并增加到android::createPlayer中。每个接口函数的具体实现就与以前在Linux环境下实现的方式一样&#xff0c;简单吧&#xff0c;以前的成果都可以用上了。
2&#xff09;在现在的Player&#xff08;如StagefrightPlayer&#xff09;中写Extractor和Decoder插件。
为了实现第二种方案&#xff0c;需要先了解StagefrightPlayer的架构。为什么两种方案都需要了解呢&#xff0c;因为怎么做&#xff0c;取决于你的首席架构师或CTO等。