[RK3288][Android6.0] StageFright解码流程小结

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 ->
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值