1.
是放在碎片fragment中的
2.
是引用项目文件(文件路径:res/raw/video.mp4
),找了很多都是引用远程文件的,
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);
//添加回调接口
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolderholder) {
//当画面可见时执行
player();
Log.d(TAG,"<<<<<<< 创建了视频 >>>>>>>");
}
@Override
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height) {
//当画面发生变化时执行
mp.setDisplay(holder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//当画面不可见时执行
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); //设置循环播放
mp.setDisplay(surfaceView.getHolder()); //设置播放区域
mp.setScreenOnWhilePlaying(true); //播放时屏幕保持唤醒
mp.prepareAsync(); //异步准备播放视频
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实现视频横竖屏播放
感谢!让我找到这个: AssetFileDescriptor afd= getResources().openRawResourceFd(R.raw.video);
之前用这个:mp = MediaPlayer.create(getContext(),R.raw.video);
一直加载不到画面,虽然我知道这是音频的,找的好多文章加载的都是远程路径,心累!
勤勤恳恳,麻木上身!