安卓如何播放项目中视频问题

这个问题一直困扰了我有两天了,关于安卓播放视频,网上各种教程,然而却没有一个是完全没有问题的,都没有行的通,特别是文件存放问题,我使用的安卓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);
}

}

资源文件位置

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hhw332704304/article/details/85682451