1.MediaPlayer介绍
MediaPlayer 类是媒体框架最重要的组成部分之一。此类的对象能够获取、解码以及播放音频和视频,而且只需极少量设置。它支持多种不同的媒体源,例如: • 本地资源 • 内部 URI,例如您可能从内容解析器那获取的 URI • 外部网址(流式传输)
媒体格式列表 支持的媒体格式 | Android 开发者 | Android Developers
2.使用MediaPlayer播放视频
实现代码
VideoActivity.java
package com.example.mediademo; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.hardware.Camera; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.text.TextUtils; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.widget.Button; import java.io.File; import java.io.IOException; public class VideoActivity extends AppCompatActivity implements View.OnClickListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener { private TextureView textureView; private Button btn_opt; private MediaPlayer mediaPlayer; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_record); btn_opt = findViewById(R.id.btn_opt); textureView = findViewById(R.id.texture1); btn_opt.setOnClickListener(this); } @Override public void onClick(View v) { CharSequence text = btn_opt.getText(); if (TextUtils.equals(text,"开始")) { btn_opt.setText("结束"); mediaPlayer = new MediaPlayer(); // 设置准备监听 mediaPlayer.setOnPreparedListener(this); // 设置播放完成监听 mediaPlayer.setOnCompletionListener(this); // 设置循环播放 // mediaPlayer.setLooping(true); try { // 指定视频源 mediaPlayer.setDataSource(String.valueOf(new File(getExternalFilesDir(""), "a.mp4").getAbsoluteFile())); } catch (IOException e) { e.printStackTrace(); } // 设置画布 mediaPlayer.setSurface(new Surface(textureView.getSurfaceTexture())); mediaPlayer.prepareAsync(); } else{ btn_opt.setText("开始"); mediaPlayer.stop(); mediaPlayer.release(); } } @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } @Override public void onCompletion(MediaPlayer mp) { btn_opt.setText("开始"); mediaPlayer.release(); } }
布局代码 Activty_video.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <TextureView android:id="@+id/texture1" android:layout_width="match_parent" android:layout_height="match_parent"/> <Button android:id="@+id/btn_opt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="70dp" android:text="开始" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
3.MediaPlayer的其他使用方法
-
getCurrentPosition( ):得到当前的播放位置
-
getDuration() :得到文件的时间
-
getVideoHeight() :得到视频高度
-
getVideoWidth() :得到视频宽度
-
isLooping():是否循环播放
-
isPlaying():是否正在播放
-
pause():暂停
-
prepare():准备(同步)
-
prepareAsync():准备(异步)
-
release():释放MediaPlayer对象
-
reset():重置MediaPlayer对象
-
seekTo(int msec):指定播放的位置(以毫秒为单位的时间)
-
setAudioStreamType(int streamtype):指定流媒体的类型
-
setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体
-
setLooping(boolean looping):设置是否循环播放
-
setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener): 网络流媒体的缓冲监听
-
setOnCompletionListener(MediaPlayer.OnCompletionListener listener): 网络流媒体播放结束监听
-
setOnErrorListener(MediaPlayer.OnErrorListener listener): 设置错误信息监听
-
setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener): 视频尺寸监听
-
setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示
-
setVolume(float leftVolume, float rightVolume):设置音量
-
start():开始播放
-
stop():停止播放