1. 是放在碎片fragment中的
2. 是引用項目文件(文件路徑:res/raw/video.mp4),找了很多都是引用遠(yuǎn)程文件的,
VideoFragment 類:
public class VideoFragment extends Fragment {
private static final StringTAG = "VideoFragment";//打印日志
private SurfaceView surfaceView;
private MediaPlayer mp = new MediaPlayer();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflaterinflater,@Nullable ViewGroupcontainer,@Nullable BundlesavedInstanceState) {
View view= inflater.inflate(R.layout.fragment_video,container,false);
surfaceView = view.findViewById(R.id.surfaceView);
//保持屏幕常亮
surfaceView.getHolder().setKeepScreenOn(true);
//添加回調(diào)接口
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolderholder) {
//當(dāng)畫面可見時執(zhí)行
player();
Log.d(TAG,"<<<<<<< 創(chuàng)建了視頻 >>>>>>>");
}
@Override
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height) {
//當(dāng)畫面發(fā)生變化時執(zhí)行
mp.setDisplay(holder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//當(dāng)畫面不可見時執(zhí)行
mp.release();
Log.d(TAG,"<<<<<<< 銷毀了視頻 >>>>>>>");
}
});
return view;
}
//播放視頻的方法
private void player(){
AssetFileDescriptor afd= getResources().openRawResourceFd(R.raw.video);
try {
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.setLooping(false); //設(shè)置循環(huán)播放
mp.setDisplay(surfaceView.getHolder()); //設(shè)置播放區(qū)域
mp.setScreenOnWhilePlaying(true); //播放時屏幕保持喚醒
mp.prepareAsync(); //異步準(zhǔn)備播放視頻
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mep) {
mep.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayermp,int what,int extra) {
return false;
}
});
mep.start();
}
});
}catch (Exceptione){
e.printStackTrace();
}
}
}
fragment_video.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.VideoFragment">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:orientation="vertical"
tools:ignore="UselessParent">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_centerVertical="true"/>
</RelativeLayout>
</FrameLayout>
參考:簡單的MediaPlayer+SurfaceView實現(xiàn)視頻橫豎屏播放
感謝!讓我找到這個: AssetFileDescriptor afd= getResources().openRawResourceFd(R.raw.video);
之前用這個:mp = MediaPlayer.create(getContext(),R.raw.video); 一直加載不到畫面,雖然我知道這是音頻的,找的好多文章加載的都是遠(yuǎn)程路徑,心累!
勤勤懇懇,麻木上身!