MediaPlayer介绍
MediaPlayer类可用于控制音频/视频文件或流的播放。

MediaPlayer函数:
实例化方式
使用直接new的方式:

MediaPlayer mp = new MediaPlayer();

使用create的方式:

MediaPlayer mp = MediaPlayer.create(this, R.raw.test);

设置播放源

setDataSource(String path)//指定装载path路径所代表的文件。
setDataSource(Context context, Uri uri, Map<String, String headers)//指定装载uri所代表的文件。
setDataSource(Context context, Uri uri)//指定装载uri所代表的文件。
setDataSource(FileDescriptor fd, long offset, long length)//指定装载fd所代表的文件中从offset开始长度为length的文件内容。
setDataSource(FileDescriptor fd)//指定装载fd所代表的文件。

配置播放参数

setAudioStreamType(int streamtype)//设置音频流的类型。
setDisplay(SurfaceHolder sh)//设置显示方式。
setLooping(boolean looping)//设置是否循环播放。
setNextMediaPlayer(MediaPlayer next)//设置当前流媒体播放完毕,下一个播放的MediaPlayer。
setScreenOnWhilePlaying(boolean screenOn)//设置是否使用SurfaceHolder来显示。
setSurface(Surface surface)//设置Surface。
setVideoScalingMode(int mode)//设置视频缩放的模式。
setVolume(float leftVolume, float rightVolume)//设置播放器的音量。
setWakeMode(Context context, int mode)//为MediaPlayer设置低级电源管理行为。

播放控制函数

start()//开始或恢复播放。
stop()//停止播放。
pause()//暂停播放。
prepare()//准备播放(装载音频),调用此方法会使MediaPlayer进入Prepared状态。
prepareAsync()//准备播放异步音频。
release()//释放媒体资源
reset()//重置MediaPlayer进入未初始化状态。
seekTo(int msec)//指定的时间位置。

监听事件函数

setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)//注册一个回调函数,在网络视频流缓冲变化时调用。
setOnCompletionListener(MediaPlayer.OnCompletionListener listener)//为Media Player的播放完成事件绑定事件监听器。
setOnErrorListener(MediaPlayer.OnErrorListener listener)//为MediaPlayer的播放错误事件绑定事件监听器。
setOnPreparedListener(MediaPlayer.OnPreparedListener listener)//当MediaPlayer调用prepare()方法时触发该监听器。
setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)//当MediaPlayer调用seek()方法时触发该监听器。
setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)//注册一个用于监听视频大小改变的监听器。

获取参数函数

getCurrentPosition()//获取当前播放的位置。
getDuration()//获取音频的时长。
getVideoHeight()//获取视频的高度。
getVideoWidth()//获取视频的宽度。
isLooping()//判断MediaPlayer是否正在循环播放。
isPlaying()//判断MediaPlayer是否正在播放。

MediaPlayer音视频播放示例

public class MediaPlayerActivity extends Activity implements SurfaceHolder.Callback, View.OnClickListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener {private MediaPlayer player;private SurfaceView surface;private SurfaceHolder surfaceHolder;private Button play, pause, stop;private SeekBar seekBar;private String videoPath;private int seekProgress;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_media_player);initParams();initViews();}private void initParams() {videoPath = getIntent().getStringExtra("videoPath");}private void initViews() {play = (Button) findViewById(R.id.btn_play);pause = (Button) findViewById(R.id.btn_pause);stop = (Button) findViewById(R.id.btn_stop);seekBar = (SeekBar) findViewById(R.id.skb_video);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {seekProgress = progress * player.getDuration()/ seekBar.getMax();}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {seekTo(seekProgress);}});surface = (SurfaceView) findViewById(R.id.video_surface);surfaceHolder = surface.getHolder();surfaceHolder.setFormat(PixelFormat.TRANSPARENT);surfaceHolder.setKeepScreenOn(true);surfaceHolder.addCallback(this);play.setOnClickListener(this);pause.setOnClickListener(this);stop.setOnClickListener(this);}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {autoPlay();}@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {stop();release();}@Overrideprotected void onDestroy() {super.onDestroy();stop();release();}/*** 自动播放*/private void autoPlay() {//必须在surface创建后才能初始化MediaPlayer,否则不会显示图像player = new MediaPlayer();player.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置显示视频显示在SurfaceView上player.setDisplay(surfaceHolder);try {player.setDataSource(videoPath);player.setOnPreparedListener(this);player.setOnCompletionListener(this);player.setOnBufferingUpdateListener(this);player.prepare();} catch (Exception e) {e.printStackTrace();}}/*** 开始播放*/private void start() {if (player == null || player.isPlaying()) {return;}player.start();}/*** 暂停播放*/private void pause() {if (player == null || player.isPlaying()) {return;}player.pause();}/*** 停止播放*/private void stop() {if (player == null || player.isPlaying()) {return;}player.stop();}/*** 释放资源*/private void release() {if (player == null) {return;}player.release();}/*** 重置播放器*/private void reset() {if (player == null) {return;}player.reset();}/*** 指定位置播放** @param pos*/private void seekTo(int pos) {if (player == null) {return;}player.seekTo(pos);start();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_play:start();break;case R.id.btn_pause:pause();break;case R.id.btn_stop:stop();break;}}@Overridepublic void onPrepared(MediaPlayer mp) {start();}@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) {seekBar.setSecondaryProgress(percent);int currentProgress = seekBar.getMax() * player.getCurrentPosition() / player.getDuration();Log.e("currentProgress", "currentProgress----->" + currentProgress);}@Overridepublic void onCompletion(MediaPlayer mp) {seekBar.setProgress(0);}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><SurfaceViewandroid:id="@+id/video_surface"android:layout_width="match_parent"android:layout_height="0dp"android:layout_gravity="center"android:layout_weight="1" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_horizontal|bottom"android:orientation="vertical"><SeekBarandroid:id="@+id/skb_video"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_margin="10dp"android:max="100"android:focusable="true"android:maxHeight="4.0dip"android:minHeight="4.0dip"android:paddingLeft="16.0dip"android:paddingRight="16.0dip"android:thumb="@drawable/seekbar_thumb"android:progressDrawable="@drawable/po_seekbar" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_horizontal|bottom"android:layout_margin="10dp"android:gravity="center"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="播放" /><Buttonandroid:id="@+id/btn_pause"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="暂停" /><Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止" /></LinearLayout></LinearLayout>
</LinearLayout>

播放音频简单示例

if (player == null) {player = new MediaPlayer();player.setDataSource(url);player.setVolume(0.7f, 0.7f);player.setAudioStreamType(AudioManager.STREAM_MUSIC);player.prepare();player.start();player.setOnCompletionListener(completionListener);player.setOnErrorListener(errorListener);return true;}

权限

<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

用上面的示例只能播放部分片源,有些片源会播放不了,若不采用原生的MediaPlayer进行视频播放。这里推荐大家使用B站开源视频播放解决方案ijkplayer。地址:https://github.com/Bilibili/

MediaPlayer音视频播放相关推荐

  1. Qt 之 MediaPlayer 音视频播放

    文章目录 1.QMediaPlayer简介 2.相关类介绍 2.1 QMediaPlayer 2.1.1 简单用法: 2.1.2 关键枚举类 2.1.3 QMediaPlayer 常用属性 2.2 Q ...

  2. ios nslinkattributename 自定义url_iOS音视频播放指南(二)

    没看第一篇的小伙伴可以先看第一篇 wlzz:iOS音视频播放指南(一)​zhuanlan.zhihu.com 本章主要内容 画中画支持 后台音频播放,锁屏界面显示,远程音频控制 在耳机插拔.接听电话等 ...

  3. android音视频播放器开发百度云,Android 播放端 SDK

    1 概述 PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 Android ...

  4. AVFounction学习笔记之--音视频播放.md

    AVFounction学习笔记之–音视频播放 AVFounction是用于处理音视频的框架.它位于Core Audio.Core Video.Core Media.Core Animation框架之上 ...

  5. Qt - 音视频播放

    播放内存中的音乐 QFile read("./music/Nevada.mp3");if (!read.open(QIODevice::ReadOnly)){qDebug() &l ...

  6. iOS音视频播放指南(二)

    1. 让你的App支持画中画 画中画指可以让视频在小窗中播放,可以一边看视频一边刷知乎 你可以使用AVPlayerViewController或者AVPictureInPictureControlle ...

  7. 6、Qt Project之音视频播放

    音视频播放  这里简单的制作了一个音乐播放器,播放器的界面设计如下所示: Step1:这里是界面对应的HTML文件: <?xml version="1.0" encoding ...

  8. C++Qt开发——音视频播放

    播放内存中的音乐 QFile read("./music/Nevada.mp3");if (!read.open(QIODevice::ReadOnly)){qDebug() &l ...

  9. 《android多媒体api》之MediaPlayer自定义视频播放器

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

最新文章

  1. type=file的未选择任何文件修改_PDF文件怎样输入到CAD图纸中?懂得这个功能可以快速实现...
  2. memcached mysql 性能测试_memcached +mysql+php 测试例子
  3. leetcode 1. 两数之和(map)
  4. reStructuredText学习
  5. linux 踢出在线用户
  6. 什么是NoSQL及NoSQL四大分类
  7. 为什么要用用例图 用例图是什么 用例图怎么画 用例图有哪些元素
  8. 推荐一款java微信答题小程序源码知识竞赛问答pk头脑答题游戏
  9. JavaSE 计算机基础知识 Java语言概述 JDK的下载,安装 HelloWorld案例 环境变量的配置 注释 关键字 标识符
  10. C语言基础入门,编程的第一步
  11. 有线异步通信原理_通信考试专业到底应该怎么选择。
  12. 期货期权股票资管分仓系统
  13. 《假如给我三天光明》读后感及其摘录(2)
  14. 山东不符合申报高新技术企业的条件
  15. DOTA双功能螯合剂127985-74-4,p-SCN-Bn-DOTA,实验室科研试剂
  16. python-图片文字识别
  17. 不看OCJP考题你永远不知道自己的JAVA基础有多差(一)
  18. 帝国模板变量更新后页面不更新
  19. 网络安全--入侵阶段介绍
  20. 国家电网SG186工程--勾画国网公司信息化发展未来

热门文章

  1. android微信打出彩色字体,如何用微信打出颜色各异的字
  2. 网狐棋牌代码分析(二) CQueueServiceEvent初步分析
  3. FineReport 基础报表样式
  4. SPSS数据分析前,异常值处理
  5. 2015-2016-2 《Java程序设计》教学进程
  6. 道闸系统服务器功能,道闸系统_停车场自动道闸系统 - 九鼎智能
  7. 用计算机模拟股票大盘,股票模拟盘操作与实盘不同之处有哪些
  8. 电脑快捷键大全- -
  9. linux如何安装vmtools工具
  10. 模板引擎Thymeleaf?来这一篇就够用了