Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92
以Gallery播放视频为例(只关注MediaPlayer相关部分):
rk用的是ffplayer,但是没有开源,所以这里就以stagefright为例了解解码流程.
创建:
onCreate -> MovieActivity.java
mPlayer = new MoviePlayer -> MoviePlayer.java
mVideoView = (VideoView) rootView.findViewById ->
VideoView -> VideoView.java
initVideoView
mVideoView.setVideoURI(mUri)
setVideoURI -> //VideoView.java
openVideo ->
mMediaPlayer = new MediaPlayer ->
MediaPlayer -> MediaPlayer.java
native_setup ->
android_media_MediaPlayer_native_setup -> android_media_MediaPlayer.cpp
new MediaPlayer ->
MediaPlayer::MediaPlayer mediaplayer.cpp
AudioSystem::acquireAudioSessionId //获取AudioFlinger.
mMediaPlayer.setDataSource ->
_setDataSource ->
android_media_MediaPlayer_setDataSourceFD -> android_media_MediaPlayer.cpp
getMediaPlayer
mp->setDataSource ->
MediaPlayer::setDataSource ->
service->create
MediaPlayerService::create ->
new Client
player->setDataSource ->
MediaPlayerService::Client::setDataSource ->
MediaPlayerFactory::getPlayerType //根据当前的文件格式类型来确定应该使用哪个player
setDataSource_pre -> //返回对应的player.
createPlayer ->
MediaPlayerFactory::createPlayer ->
factory = sFactoryMap.valueFor //根据之前在MediaPlayerService中注册的player来选择一个对应type.
factory->createPlayer //对应player的调用,假设这里是stagefrightplayer.
new StagefrightPlayer ->
OS: Android 6.0
Kernel: 3.10.92
以Gallery播放视频为例(只关注MediaPlayer相关部分):
rk用的是ffplayer,但是没有开源,所以这里就以stagefright为例了解解码流程.
创建:
onCreate -> MovieActivity.java
mPlayer = new MoviePlayer -> MoviePlayer.java
mVideoView = (VideoView) rootView.findViewById ->
VideoView -> VideoView.java
initVideoView
mVideoView.setVideoURI(mUri)
setVideoURI -> //VideoView.java
openVideo ->
mMediaPlayer = new MediaPlayer ->
MediaPlayer -> MediaPlayer.java
native_setup ->
android_media_MediaPlayer_native_setup -> android_media_MediaPlayer.cpp
new MediaPlayer ->
MediaPlayer::MediaPlayer mediaplayer.cpp
AudioSystem::acquireAudioSessionId //获取AudioFlinger.
mMediaPlayer.setDataSource ->
_setDataSource ->
android_media_MediaPlayer_setDataSourceFD -> android_media_MediaPlayer.cpp
getMediaPlayer
mp->setDataSource ->
MediaPlayer::setDataSource ->
service->create
MediaPlayerService::create ->
new Client
player->setDataSource ->
MediaPlayerService::Client::setDataSource ->
MediaPlayerFactory::getPlayerType //根据当前的文件格式类型来确定应该使用哪个player
setDataSource_pre -> //返回对应的player.
createPlayer ->
MediaPlayerFactory::createPlayer ->
factory = sFactoryMap.valueFor //根据之前在MediaPlayerService中注册的player来选择一个对应type.
factory->createPlayer //对应player的调用,假设这里是stagefrightplayer.
new StagefrightPlayer ->