MediaPlayer音视频播放
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音视频播放相关推荐
- Qt 之 MediaPlayer 音视频播放
文章目录 1.QMediaPlayer简介 2.相关类介绍 2.1 QMediaPlayer 2.1.1 简单用法: 2.1.2 关键枚举类 2.1.3 QMediaPlayer 常用属性 2.2 Q ...
- ios nslinkattributename 自定义url_iOS音视频播放指南(二)
没看第一篇的小伙伴可以先看第一篇 wlzz:iOS音视频播放指南(一)zhuanlan.zhihu.com 本章主要内容 画中画支持 后台音频播放,锁屏界面显示,远程音频控制 在耳机插拔.接听电话等 ...
- android音视频播放器开发百度云,Android 播放端 SDK
1 概述 PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 Android ...
- AVFounction学习笔记之--音视频播放.md
AVFounction学习笔记之–音视频播放 AVFounction是用于处理音视频的框架.它位于Core Audio.Core Video.Core Media.Core Animation框架之上 ...
- Qt - 音视频播放
播放内存中的音乐 QFile read("./music/Nevada.mp3");if (!read.open(QIODevice::ReadOnly)){qDebug() &l ...
- iOS音视频播放指南(二)
1. 让你的App支持画中画 画中画指可以让视频在小窗中播放,可以一边看视频一边刷知乎 你可以使用AVPlayerViewController或者AVPictureInPictureControlle ...
- 6、Qt Project之音视频播放
音视频播放 这里简单的制作了一个音乐播放器,播放器的界面设计如下所示: Step1:这里是界面对应的HTML文件: <?xml version="1.0" encoding ...
- C++Qt开发——音视频播放
播放内存中的音乐 QFile read("./music/Nevada.mp3");if (!read.open(QIODevice::ReadOnly)){qDebug() &l ...
- 《android多媒体api》之MediaPlayer自定义视频播放器
<android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...
最新文章
- type=file的未选择任何文件修改_PDF文件怎样输入到CAD图纸中?懂得这个功能可以快速实现...
- memcached mysql 性能测试_memcached +mysql+php 测试例子
- leetcode 1. 两数之和(map)
- reStructuredText学习
- linux 踢出在线用户
- 什么是NoSQL及NoSQL四大分类
- 为什么要用用例图 用例图是什么 用例图怎么画 用例图有哪些元素
- 推荐一款java微信答题小程序源码知识竞赛问答pk头脑答题游戏
- JavaSE 计算机基础知识 Java语言概述 JDK的下载,安装 HelloWorld案例 环境变量的配置 注释 关键字 标识符
- C语言基础入门,编程的第一步
- 有线异步通信原理_通信考试专业到底应该怎么选择。
- 期货期权股票资管分仓系统
- 《假如给我三天光明》读后感及其摘录(2)
- 山东不符合申报高新技术企业的条件
- DOTA双功能螯合剂127985-74-4,p-SCN-Bn-DOTA,实验室科研试剂
- python-图片文字识别
- 不看OCJP考题你永远不知道自己的JAVA基础有多差(一)
- 帝国模板变量更新后页面不更新
- 网络安全--入侵阶段介绍
- 国家电网SG186工程--勾画国网公司信息化发展未来