MediaPlayer 播放流程

1.      音频播放

示例代码

MediaPlayer mp = new MediaPlayer();

mp.setDataSource(PATH_TO_FILE);

mp.prepare();

mp.start();

 

1.1 MediaPlayer mp = new MediaPlayer()

函数调用

文件

MediaPlayer:: MediaPlayer

MediaPlayer.Java

MediaPlayer::native_setup

MediaPlayer.Java

android_media_MediaPlayer_native_setup

android_media_MediaPlayer.cpp

MediaPlayer::MediaPlayer

MediaPlayer.cpp

 

1.2 mp.setDataSource(PATH_TO_FILE)

函数调用

文件

MediaPlayer:: setDataSource

MediaPlayer.Java

MediaPlayer::setDataSource

MediaPlayer.Java

android_media_MediaPlayer_setDataSource

android_media_MediaPlayer.cpp

MediaPlayer:: setDataSource

MediaPlayer.cpp

MediaPlayer::getMediaPlayerService

MediaPlayer.cpp

IMediaPlayerService

IMediaPlayerService.h

MediaPlayerService:: MediaPlayerService[f1] 

MediaPlayerService.cpp

MediaPlayerService::create

MediaPlayerService.cpp

MediaPlayerService::Client::Client

MediaPlayerService.cpp

MediaPlayerService::Client::setDataSource

MediaPlayerService.cpp

getPlayerType[f2] 

MediaPlayerService.cpp

MediaPlayerService::Client::createPlayer

MediaPlayerService.cpp

createPlayer

MediaPlayerService.cpp

          PVPlayer

PVPlayer.h

MidiFile

MidiFile.cpp

VorbisPlayer

VorbisPlayer.cpp

      AudioOutput::AudioOutput

MediaPlayerService.cpp

 

1.3 mp.prepare()

函数调用

文件

MediaPlayer:: prepare

MediaPlayer.Java

MediaPlayer:: prepare

MediaPlayer.Java

android_media_MediaPlayer_ prepare

android_media_MediaPlayer.cpp

MediaPlayer:: prepare

MediaPlayer.cpp

PVPlayer:: prepare

PVPlayer.h

MidiFile:: prepare

MidiFile.cpp

VorbisPlayer:: prepare

VorbisPlayer.cpp

  VorbisPlayer::createOutputTrack

VorbisPlayer.cpp

    AudioOutput::open

MediaPlayerService.cpp

      AudioTrack::AudioTrack

AudioTrack.cpp

        AudioSystem::get_audio_flinger

AudioSystem.cpp

        AudioFlinger::createTrack

AudioFlinger.cpp

 

1.4 mp.start()

函数调用

文件

MediaPlayer:: start

MediaPlayer.Java

MediaPlayer:: start

MediaPlayer.Java

android_media_MediaPlayer_ start

android_media_MediaPlayer.cpp

MediaPlayer:: start

MediaPlayer.cpp

PVPlayer:: start

PVPlayer.h

MidiFile:: p start

MidiFile.cpp

VorbisPlayer:: start

VorbisPlayer.cpp

  AudioTrack::start

AudioTrack.cpp


 [f1]systemserver进程创建,在文件system_init.cpp里的函数system_init()调用MediaPlayerService::instantiate创建

 [f2]返回3player

PV_PLAYER:播放mp3

SONIVOX_PLAYER:播放midi

VORBIS_PLAYER:播放ogg,


简单说来,轨迹如下:

Java端发起调用,MediaPlayer会转至MediaPlayerService,然后会调用相应的解码工具解码后创建AudioTrack,所有待输出的AudioTrack在AudioFlinger::AudioMixer里合成,然后通过AudioHAL(AudioHardwareInterface的实际实现者)传至实际的硬件来实现播放

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值