在实际开发中我们并不会过多的研究Open Core 的实现,Android 提供了上层的Media API
给开发人员使用,MediaPlayer 和MediaRecorder
整体的结构如下图所示:
MediaPlayer JNI
代码位置/frameworks/base/media/jni
MediaPlayer (Native)
代码位置/frameworks/base/media/libmedia
MediaPlayerService (Server)
代码位置/frameworks/base/media/libmediaplayerservice
MediaPlayerService Host Process
代码位置/frameworks/base/media/mediaserver/main_mediaserver.cpp
PVPlayer
代码位置/external/opencore/android/
实际调用过程如下图所示:
MediaPlayer 的生命周期如下图
MediaPlayer 常用方法介绍
1、方法:create(Context context, Uriuri)
解释:静态方法,通过Uri 创建一个多媒体播放器。
2、方法:create(Context context, intresid)
解释:静态方法,通过资源ID 创建一个多媒体播放器。
3、方法:create(Context context, Uriuri, SurfaceHolder holder)
解释:静态方法,通过Uri 和指定SurfaceHolder 【抽象类】创建一个多媒体播放器。
4、方法:getCurrentPosition()
解释:返回Int,得到当前播放位置。
5、方法:getDuration()
解释:返回Int,得到文件的时间。
6、方法:getVideoHeight()
解释:返回Int ,得到视频的高度。
7、方法:getVideoWidth()
解释:返回Int,得到视频的宽度。
8、方法:isLooping()
解释:返回boolean ,是否循环播放。
9、方法:isPlaying()
解释:返回boolean,是否正在播放。
10、方法:pause()
解释:无返回值,暂停。
11、方法:prepare()
解释:无返回值,准备同步。
12、方法:prepareAsync()
解释:无返回值,准备异步。
13、方法:release()
解释:无返回值,释放MediaPlayer对象。
14、方法:reset()
解释:无返回值,重置MediaPlayer 对象。
15、方法:seekTo(int msec)
解释:无返回值,指定播放的位置(以毫秒为单位的时间)。
16、方法:setAudioStreamType(intstreamtype)
解释:无返回值,指定流媒体的类型
17、方法:setDataSource(String path)
解释:无返回值,设置多媒体数据来源【根据路径】
18、方法:setDataSource(FileDescriptorfd, long offset, long length)
解释:无返回值,设置多媒体数据来源【根据FileDescriptor】。
19、方法:setDataSource(FileDescriptorfd)
解释:无返回值,设置多媒体数据来源【根据FileDescriptor】。
20、方法:setDataSource(Contextcontext, Uri uri)
解释:无返回值,设置多媒体数据来源【根据Uri】。
21、方法:setDisplay(SurfaceHoldersh)
解释:无返回值,设置用SurfaceHolder 来显示多媒体。
22、方法:setLooping(boolean looping)
解释:无返回值,设置是否循环播放。
23、事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener
listener)
解释:监听事件,网络流媒体的缓冲监听。
24、事件:setOnCompletionListener(MediaPlayer.OnCompletionListenerlistener)
解释:监听事件,网络流媒体播放结束。
25、事件:setOnErrorListener(MediaPlayer.OnErrorListenerlistener)
解释:监听事件,设置错误信息监听。
26、事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener
listener)
解释:监听事件,视频尺寸监听。
26、方法:setScreenOnWhilePlaying(booleanscreenOn)
解释:无返回值,设置是否使用SurfaceHolder 显示。
27、方法:setVolume(float leftVolume,float rightVolume)
解释:无返回值,设置音量。
28、方法:start()
解释:无返回值,开始播放
29、方法:stop()
解释:无返回值,停止播放