1、什么是Open Core?
Open Core 是 Android 多媒体框架的核心,所有 Android 平台的音频、视频的采用以及播放等操作,都是通过它来实现。
2、Open Core 的具体功能
- 1、多媒体文件的播放、下载,包括:3GPP,MPEG-4,AAC 和 MP3 containers。
- 2、流媒体文件的下载、实时播放,包括:3GPP,HTTP 和 RTSP/RTP。
- 3、动态视频和静态图像的编码、解码,例如:MPEG-4,H.263 和 AVC (H.264),JPEG。
- 4、语音编码格式:MP3,AAC,AAC+。
- 5、视频和图像格式:3GPP,MPEG-4 和 JPEG。
- 6、视频会议:基于 H324-M 标准。
Open Core 是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容:
- 1、PVPPlayer:提供媒体播放器的功能,完成各种音频(Audio)、视频(Video)流的回放(Playback)功能。
- 2、PVAuthor:提供媒体流记录的功能,完成各种音频、视频流以及静态图像的捕获功能。
3、Mediaplayer 介绍
MediaPlayer 类可以用来播放音频、视频和流媒体,MediaPlayer 包含了 Audio 和 Video 的播放功能,在 Android 的界面上, Music 和 Video 两个应用程序都是调用 MediaPlayer 实现的。下面两张图是 MediaPlayer 在 Android 和 Open Core 的示例图:
下面是图例显示 MediaPlayer 的生命周期
3.1、MediaPlayer 常用方法介绍
- 方法:( context, uri) 解释:静态方法,通过Uri创建一个多媒体播放器。
- 方法:( context, int resid) 解释:静态方法,通过资源ID创建一个多媒体播放器
- 方法:( context, uri, holder) 解释:静态方法,通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器
- 方法: () 解释:返回 Int, 得到当前播放位置
- 方法: () 解释:返回 Int,得到文件的时间
- 方法:() 解释:返回 Int ,得到视频的高度
- 方法:() 解释:返回 Int,得到视频的宽度
- 方法:() 解释:返回 boolean ,是否循环播放
- 方法:() 解释:返回 boolean,是否正在播放
- 方法:() 解释:无返回值 ,暂停
- 方法:() 解释:无返回值,准备同步
- 方法:() 解释:无返回值,准备异步
- 方法:() 解释:无返回值,释放 MediaPlayer 对象
- 方法:() 解释:无返回值,重置 MediaPlayer 对象
- 方法:(int msec) 解释:无返回值,指定播放的位置(以毫秒为单位的时间)
- 方法:(int streamtype) 解释:无返回值,指定流媒体的类型
- 方法:( path) 解释:无返回值,设置多媒体数据来源【根据 路径】
- 方法:( fd, long offset, long length) 解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】
- 方法:( fd) 解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】
- 方法:( context, uri) 解释:无返回值,设置多媒体数据来源【根据 Uri】
- 方法:( sh) 解释:无返回值,设置用 SurfaceHolder 来显示多媒体
- 方法:(boolean looping) 解释:无返回值,设置是否循环播放
- 事件:( listener) 解释:监听事件,网络流媒体的缓冲监听
- 事件:( listener) 解释:监听事件,网络流媒体播放结束监听
- 事件:( listener) 解释:监听事件,设置错误信息监听
- 事件:( listener) 解释:监听事件,视频尺寸监听
- 方法:(boolean screenOn) 解释:无返回值,设置是否使用 SurfaceHolder 显示
- 方法:(float leftVolume, float rightVolume) 解释:无返回值,设置音量
- 方法:() 解释:无返回值,开始播放
- 方法:() 解释:无返回值,停止播放
4、完整音乐播放例子演示
实现的功能:
1.暂停/播放、下一首/上一首,点击某一首时播放
2.支持拖动进度条快进
3.列表排序
4.来电话时,停止播放,挂断后继续播放
5.可在后台播放
界面:
main.xml:
item.xml:
MainActivity: import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import Android.app.Activity; import Android.content.BroadcastReceiver; import Android.content.Context; import Android.content.Intent; import Android.content.IntentFilter; import Android.media.MediaPlayer; import Android.media.MediaPlayer.OnCompletionListener; import Android.os.Bundle; import Android.os.Environment; import Android.os.Handler; import Android.telephony.PhoneStateListener; import Android.telephony.TelephonyManager; import Android.view.View; import Android.widget.AdapterView; import Android.widget.Button; import Android.widget.ListView; import Android.widget.SeekBar; import Android.widget.SimpleAdapter; import Android.widget.TextView; import Android.widget.AdapterView.OnItemClickListener; import Android.widget.SeekBar.OnSeekBarChangeListener; public class MainActivity extends Activity { private TextView nameTextView; private SeekBar seekBar; private ListView listView; private List
注册权限: