这个问题一直困扰了我有两天了,关于安卓播放视频,网上各种教程,然而却没有一个是完全没有问题的,都没有行的通,特别是文件存放问题,我使用的安卓studio,按照教程在res下创建raw后存放mp4文件后只要我一编译就会包ddpt2错误,具体原因不知道为什么,可能是文件过大,我的mp4有150多兆,后来我重新再项目中创建assets资源目录,关于如何创建该资源目录请自行百度很好创建的,然后将文件放入该目录下后新的问题又来了,关于如何播放assets目录下的视频文件,网上又没有可行的方案了,于是自己琢磨出了一套方案
无需界面布局使用SurfaceView来播放
主Activity源码
package com.croshe.lovebai.activity;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
import com.croshe.android.base.activity.CrosheBaseActivity;
import com.croshe.android.base.utils.ExitApplication;
import com.croshe.lovebai.R;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class VideoActivity extends CrosheBaseActivity {
private SurfaceView sv;
private SurfaceHolder sHolder;
private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
private MediaPlayer mp;
@Override
public void surfaceCreated(SurfaceHolder holder) {
mp = new MediaPlayer();
AssetFileDescriptor adf = null;
try {
adf = getAssets().openFd("love.mp4");
mp.setDataSource(adf.getFileDescriptor(),adf.getStartOffset(),adf.getLength());
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mp.setDisplay(holder);
mp.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mp.release();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fullScreen(true);
sv = new SurfaceView(this);
sHolder = sv.getHolder();
sHolder.addCallback(callback);
setContentView(sv);
}
}
资源文件位置