在上一篇Android如何播放一首音乐中介绍了如何使用MediaPlayer来播放音乐文件。可以看到,步骤非常简单。
player.setDataSource(path);
player.prepare();
player.start();
但如果你想更深入的了解Audio, 仅仅会调用这个几个API是远远不够的,没有考虑容器格式,文件的来源,协议,编解码等等。
这篇文章就来介绍一下第一步的setDataSource到底都做了些什么。还是以MusicDemo为例,先将play方法中的prepare和start方法注释掉, 这样可以比较清楚的看到setDataSource的都干了些什么事。
private void play(){
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Music/Test.mp3";
player.setDataSource(path);
Log.d("Jaychou","MusicDemo setDataSource");
//player.prepare();
//Log.d("Jaychou","MusicDemo Prepare");
//player.start();
} catch (IOException e) {
e.printStackTrace();
Log.d("Jaychou","err when play");
}
}
先来一张流程图:
当点击PLAY_MUSIC的时候,打出如下日志:
02-10 15:45:13.538 V/MediaPlayer( 4748): setDataSource(59, 0, 576460752303423487)
02-10 15:45:13.540 V/MediaPlayerService( 647): Client(4) constructor
02-10 15:45:13.541 V/MediaPlayerService( 647): Create new client(4) from pid 4748, uid 10140,
02-10 15: