本文实例讲述了Android编程视频播放API之MediaPlayer用法。分享给大家供大家参考,具体如下:

现在项目要做音视频这块功能,这正是我相对比较薄弱的地方,项目中要用到,赶紧抓紧时间学习。前面有一编介绍不错的文章https://www./article/121881.htm,值得学习。
这里给出一个较为简单的示例:
/**
* Android API MediaPlayer示例
*
* @description:
* @author ldm
* @date 2016-4-20 上午10:42:06
*/
public class MediaPlayerActivity extends Activity implements OnClickListener {
private Button mlocalvideo;
private Button mstreamvideo;
private Button mlocalaudio;
private Button mresourcesaudio;
private static final String MEDIA = "media";
private static final int LOCAL_AUDIO = 1;
private static final int RESOURCES_AUDIO = 3;
private static final int STREAM_VIDEO = 5;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_mediaplayer);
initViewsAndEvents();
}
private void initViewsAndEvents() {
mlocalaudio = (Button) findViewById(R.id.localaudio);
mresourcesaudio = (Button) findViewById(R.id.resourcesaudio);
mlocalvideo = (Button) findViewById(R.id.localvideo);
mstreamvideo = (Button) findViewById(R.id.streamvideo);
mlocalaudio.setOnClickListener(this);
mresourcesaudio.setOnClickListener(this);
mlocalvideo.setOnClickListener(this);
mstreamvideo.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.localaudio:
case R.id.localvideo:
Intent intent = new Intent(MediaPlayerActivity.this.getApplication(),
MediaPlayerDemo_Audio.class);
intent.putExtra(MEDIA, LOCAL_AUDIO);
startActivity(intent);
break;
case R.id.resourcesaudio:
Intent resIn = new Intent(MediaPlayerActivity.this.getApplication(),
MediaPlayerDemo_Audio.class);
resIn.putExtra(MEDIA, RESOURCES_AUDIO);
startActivity(resIn);
break;
case R.id.streamvideo:
Intent streamIn = new Intent(MediaPlayerActivity.this,
MediaPlayerDemo_Video.class);
streamIn.putExtra(MEDIA, STREAM_VIDEO);
startActivity(streamIn);
break;
}
}
}
/**
* OnBufferingUpdateListener可以获取视频音频流的缓冲状态;
* OnCompletionListener播放完毕监听器
* OnPreparedListener准备播放相关接口
* OnVideoSizeChangedListener注册视频大小改变监听器
* SurfaceHolder.Callback:SurfaceView监听callback
* @description:
* @author ldm
* @date 2016-4-20 上午9:46:16
*/
public class MediaPlayer_Video extends Activity implements
OnBufferingUpdateListener, OnCompletionListener,
OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback {
private static final String TAG = "MediaPlayerDemo";
//Video宽度
private int mVideoWidth;
//Video高度
private int mVideoHeight;
//播放器MediaPlayer
private MediaPlayer mMediaPlayer;
//播放界面SurfaceView
private SurfaceView mPreview;
//媒体播放器的载体 SurfaceHolder
private SurfaceHolder holder;
//文件路径
private String path;
//Bundle数据对象
private Bundle extras;
private static final String MEDIA = "media";
private static final int LOCAL_VIDEO = 1;
private static final int RESOURCES_AUDIO = 3;
private static final int STREAM_VIDEO = 5;
private boolean mIsVideoSizeKnown = false;
private boolean mIsVideoReadyToBePlayed = false;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.mediaplayer_2);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);
//高版本上已经不推荐使用了 ,如果要兼容低版本(如Android 2.3或以下版本)要加上这段代码,不然播放时 只会有声音 没有图像。
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
extras = getIntent().getExtras();
}
private void playVideo(Integer Media) {
doCleanUp();
try {
switch (Media) {
case LOCAL_VIDEO://本地文件(如SD卡)
/*
* TODO:将路径变量设置为本地媒体文件路径。
*/
path = "";//这里要填写你所播放音视频的文件路径
if (path == "") {
Toast
.makeText(
MediaPlayer_Video.this,
"Please edit MediaPlayerDemo_Video Activity, "
+ "and set the path variable to your media file path."
+ " Your media file must be stored on sdcard.",
Toast.LENGTH_LONG).show();
}
break;
case STREAM_VIDEO://流文件
/**
* 路径变量设置为mp4或3gpp格式的URL。应该使用Http协议。
* 媒体播放器只能通过流的形式获取数据,所以需要:
* 1。必须是媒体流数据。
* 2。必须合理剪辑。
*/
path = "";
if (path == "") {
// Tell the user to provide a media file URL.
Toast
.makeText(
MediaPlayer_Video.this,
"Please edit MediaPlayerDemo_Video Activity,"
+ " and set the path variable to your media file URL.",
Toast.LENGTH_LONG).show();
}
break;
case RESOURCES_AUDIO:
//播放放在诸如res/raw文件夹下的资源文件
//直接通过mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);
//可以参考API Demos中AudioFxDemo类文件
break;
}
// 创建MediaPlayer对象,传入文件数据并设备监听
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
//使用 create() 方法创建的 MediaPlayer, 直接指定了 媒体资源, 不需要再进行 调用 prepare() 方法;
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
//指定音频流类型
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (Exception e) {
Log.e(TAG, "error: " + e.getMessage(), e);
}
}
public void onBufferingUpdate(MediaPlayer arg0, int percent) {
Log.d(TAG, "onBufferingUpdate percent:" + percent);
}
public void onCompletion(MediaPlayer arg0) {
Log.d(TAG, "onCompletion called");
}
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.v(TAG, "onVideoSizeChanged called");
if (width == 0 || height == 0) {
Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
public void onPrepared(MediaPlayer mediaplayer) {
Log.d(TAG, "onPrepared called");
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
Log.d(TAG, "surfaceChanged called");
}
public void surfaceDestroyed(SurfaceHolder surfaceholder) {
Log.d(TAG, "surfaceDestroyed called");
}
public void surfaceCreated(SurfaceHolder holder) {
Log.d(TAG, "surfaceCreated called");
playVideo(extras.getInt(MEDIA));
}
@Override
protected void onPause() {
super.onPause();
releaseMediaPlayer();
doCleanUp();
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
doCleanUp();
}
private void releaseMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
private void doCleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
}
private void startVideoPlayback() {
Log.v(TAG, "startVideoPlayback");
holder.setFixedSize(mVideoWidth, mVideoHeight);
mMediaPlayer.start();
}
}
布局文件activity_mediaplayer
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button android:id="@+id/localvideo"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="@string/local_video"
/>
<Button android:id="@+id/streamvideo"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="@string/stream_video"
/>
<Button android:id="@+id/localaudio"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="@string/local_audio"
/>
<Button android:id="@+id/resourcesaudio"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="@string/res_audio"
/>
</LinearLayout>
布局文件activity_mediaplayer_video
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</SurfaceView>
</LinearLayout>
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 视频播放
# API
# MediaPlayer
# Android音视频开发之MediaPlayer使用教程
# Android MediaPlayer 音频倍速播放 调整播放速度问题
# Android MediaPlayer 播放音频的方式
# Android多媒体应用使用MediaPlayer播放音频
# Android开发之MediaPlayer多媒体(音频
# 视频)播放工具类
# Android编程之播放器MediaPlayer实现均衡器效果示例
# Android实现简单音乐播放器(MediaPlayer)
# Android MediaPlayer音频播放器封装示例浅析
# 操作技巧
# 媒体播放器
# 设置为
# 音视频
# 进阶
# 上午
# 有一
# 放在
# 相关内容
# 感兴趣
# 这段
# 播放器
# 只会
# 要做
# 给大家
# 你所
# 这块
# 不需
# 更多关于
# 所述
相关文章:
个人网站制作流程图片大全,个人网站如何注销?
建站之星上传入口如何快速找到?
如何用西部建站助手快速创建专业网站?
如何批量查询域名的建站时间记录?
制作网站的软件免费下载,免费制作app哪个平台好?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作门户网站的参考文献在哪,小说网站怎么建立?
中山网站制作网页,中山新生登记系统登记流程?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
建站之星导航菜单设置与功能模块配置全攻略
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
javascript中对象的定义、使用以及对象和原型链操作小结
Android自定义listview布局实现上拉加载下拉刷新功能
nginx修改上传文件大小限制的方法
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何快速建站并高效导出源代码?
高防服务器:AI智能防御DDoS攻击与数据安全保障
定制建站哪家更专业可靠?推荐榜单揭晓
网站制作公司排行榜,四大门户网站排名?
建站主机解析:虚拟主机配置与服务器选择指南
如何解决VPS建站LNMP环境配置常见问题?
如何自定义建站之星网站的导航菜单样式?
如何快速打造个性化非模板自助建站?
如何通过老薛主机一键快速建站?
建站之星安装后如何自定义网站颜色与字体?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
香港服务器租用费用高吗?如何避免常见误区?
html制作网站的步骤有哪些,iapp如何添加网页?
如何选择香港主机高效搭建外贸独立站?
如何做网站制作流程,*游戏网站怎么搭建?
如何快速搭建高效WAP手机网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站之星后台管理系统如何操作?
网站制作企业,网站的banner和导航栏是指什么?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
公司网站制作需要多少钱,找人做公司网站需要多少钱?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何通过NAT技术实现内网高效建站?
建站之星安装步骤有哪些常见问题?
临沂网站制作企业,临沂第三中学官方网站?
怎么将XML数据可视化 D3.js加载XML
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何配置IIS站点权限与局域网访问?
如何访问已购建站主机并解决登录问题?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何做静态网页,sublimetext3.0制作静态网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。