FFmpeg视频录制压缩处理走过的坑

来源:互联网 发布:微网站模板源码下载 编辑:程序博客网 时间:2024/05/16 09:31

在公司里面开发项目做视频处理时遇到了问题,这个问题困扰我很久了,解决了只想给大家说出来,虽然很简单的问题,免得你们遇到我类似的问题再次难以自拔!

视频压缩处理我用了两种方式来解决的,一种是第三方,一种用了自己写了封装的。
今天先给大家讲解popwindow引用第三方视频压缩处理所注意的问题。

package com.zontonec.ztkid.activity;import android.Manifest;import android.annotation.SuppressLint;import android.app.Activity;import android.app.ProgressDialog;import android.content.ClipData;import android.content.ContentResolver;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ColorDrawable;import android.net.Uri;import android.os.AsyncTask;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.provider.MediaStore;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.FileProvider;import android.util.Log;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.view.animation.AnimationUtils;import android.view.inputmethod.InputMethodManager;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CompoundButton;import android.widget.EditText;import android.widget.GridView;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.TextView;import com.zontonec.ztkid.Constants;import com.zontonec.ztkid.R;import com.zontonec.ztkid.bean.DataRequestManager;import com.zontonec.ztkid.net.Apn;import com.zontonec.ztkid.net.request.ShareGrowthRequest;import com.zontonec.ztkid.net.request.ShareRequest;import com.zontonec.ztkid.util.Bimp;import com.zontonec.ztkid.util.FileUtils;import com.zontonec.ztkid.util.ImageUtil;import com.zontonec.ztkid.util.JSONUtils;import com.zontonec.ztkid.util.MapUtil;import com.zontonec.ztkid.util.Tip;import com.zontonec.ztkid.util.UploadUtil;import com.zontonec.ztkid.videorecording.SendSmallVideoActivity;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import mabeijianxi.camera.MediaRecorderActivity;import mabeijianxi.camera.VCamera;import mabeijianxi.camera.model.MediaRecorderConfig;import mabeijianxi.camera.util.DeviceUtils;public class ShareActivity extends CommonActivity{    private EditText edit_txt;    LayoutInflater layoutInflater;    private byte[] mContent;    private Bitmap myBitmap;    private InputMethodManager manager;    private GridView noScrollgridview;    private GridAdapter adapter;    private String path = "";    private ProgressDialog progressDialog;    //拍照    private Uri contentUri;    private final int NEED_CAMERA = 200;    private static final int TAKE_PICTURE = 2;    //相册    private static final int REQUEST_CAMERA = 1;    private final int NEED_ALBUM = 100;    //视频    private static final int VIDEO_RECORDING = 3;    private ImageButton iv_back;    private TextView sendText;    private String module;//发布动态目录    private String userid;//家长id    private String kidid;//学生id    private String schoolid;//学校id    private String appType;//家长端    private String appKey;//时间戳    private String timeSpan;//时间    private String toWhereType;//toWhereType = 5代表同步到成长日记;toWhereType = 4代表同步到班级圈    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.fragment_diary);        int value_tag = sp.readInt(Constants.VALUE_TAG, 0);        int tag = sp.readInt(Constants.VAULE_KID, value_tag);        userid = sp.readString(Constants.VAULE_FAMILYID + tag, "");        kidid = sp.readString(Constants.VAULE_KIDID + tag, "");        schoolid = sp.readString(Constants.VALUE_SCHOOLID + tag, "");        DataRequestManager dataRequest = new DataRequestManager();        appType = dataRequest.getAppType();        appKey = dataRequest.getAppKey();        timeSpan = dataRequest.getTimeSpan();        Intent intent = this.getIntent();        module = getIntent().getStringExtra("module");        initActivity();        //初始化视频存储路径        initSmallVideo(this);    }    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        FileUtils.deleteDir();        Bimp.bmp.clear();        Bimp.drr.clear();        Bimp.max=0;    }    @Override    public void initActivity() {        super.initActivity();        if (module.equals("showclass")) {            setBackTitleBar("发布班级圈");        } else {            setBackTitleBar("发布成长日记");        }        iv_back = (ImageButton) this.findViewById(R.id.title_bar_back);        iv_back.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                finish();            }        });        sendText = (TextView) findViewById(R.id.title_bar_right_send);        sendText.setOnClickListener(this);        manager = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);        edit_txt = (EditText) findViewById(R.id.edit);//编辑的文本内容        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);        //是否同步到成长日记        toWhereType = "0";        //选择同步时执行如下方法//      ((CompoundButton) findViewById(R.id.switch_main)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {//          @Override//          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {//              if (module.equals("showclass")) {//                  toWhereType = "5";//              } else if (module.equals("showmy")) {//                  toWhereType = "4";//              }//          }//      });        if (module.equals("showclass")) {            ((CompoundButton) findViewById(R.id.switch_main)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {                @Override                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                    if (isChecked == false) {                        toWhereType = "5";                    } else {                        toWhereType = "0";                    }                }            });        } else if (module.equals("showmy")) {            ((CompoundButton) findViewById(R.id.switch_main)).setText("同步到班级圈");            ((CompoundButton) findViewById(R.id.switch_main)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {                @Override                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                    if (isChecked == false) {                        toWhereType = "4";                    } else {                        toWhereType = "0";                    }                }            });        }        Init();    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        switch (v.getId()) {            case R.id.title_bar_right_send:                String content =edit_txt.getEditableText().toString().trim();                if((content.equals("") || content.equals(null)) && (Bimp.drr.size() == 0)){                    Tip.tipshort(mContext, "分享不能为空哦");                    return;                }                new UpHead().execute();                break;            default:                break;        }    }    @SuppressLint("NewApi")    @Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        ContentResolver resolver = mContext.getContentResolver();        /**         * 因为两种方式都用到了startActivityForResult方法, 这个方法执行完后都会执行onActivityResult方法,         * 所以为了区别到底选择了那个方式获取图片要进行判断,         * 这里的requestCode跟startActivityForResult里面第二个参数对应         */        if (requestCode == 0) {            try {                // 获得图片的uri                Uri originalUri = data.getData();                // 将图片内容解析成字节数组                mContent = ImageUtil.readStream(resolver.openInputStream(Uri                        .parse(originalUri.toString())));                // 将字节数组转换为ImageView可调用的Bitmap对象                myBitmap = ImageUtil.getPicFromBytes(mContent, null);                myBitmap = ImageUtil.comp(myBitmap);                myBitmap = ImageUtil.toRoundCorner(myBitmap, 20);                // //把得到的图片绑定在控件上显示//              add_image.setImageBitmap(myBitmap);            } catch (Exception e) {                // System.out.println(e.getMessage());            }        } else if (requestCode == REQUEST_CAMERA) {            try {                super.onActivityResult(requestCode, resultCode, data);                Bundle extras = data.getExtras();                myBitmap = (Bitmap) extras.get("data");                ByteArrayOutputStream baos = new ByteArrayOutputStream();                myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);                mContent = baos.toByteArray();                myBitmap = ImageUtil.toRoundCorner(myBitmap, 20);            } catch (Exception e) {                e.printStackTrace();            }            // 把拍摄的照片转成圆角显示在预览控件上            // //把得到的图片绑定在控件上显示//          add_image.setImageBitmap(myBitmap);        }else if (requestCode == TAKE_PICTURE){            super.onActivityResult(requestCode, resultCode, data);            if (Bimp.drr.size() < 9 && resultCode == -1) {                Bimp.drr.add(path);                BitmapFactory.Options op = new BitmapFactory.Options();                //开始读入图片,此时把options.inJustDecodeBounds 设回true了                op.inJustDecodeBounds = true;                Bitmap pic = null;                op.inJustDecodeBounds = false;                int w = op.outWidth;//图片的实际宽度                float ww = 1080f;//这里设置高度为1080f                //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可                int be = 1;//be=1表示不缩放                if (w > ww) {//根据宽度固定大小缩放                    be = (int) (op.outWidth / ww)+1;                }                if (be <= 0)                    be = 1;                op.inSampleSize = be;//设置缩放比例                //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了                pic = BitmapFactory.decodeFile(path, op);                FileOutputStream b = null;                try {                    b = new FileOutputStream(path);                } catch (FileNotFoundException e) {                    e.printStackTrace();                }                if (pic != null) {                    pic.compress(Bitmap.CompressFormat.JPEG, 30, b);//30是压缩率表示,压缩70%;如果不压缩是100,表示压缩率为0                }            }        }    }    public void Init() {        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));        if(adapter==null){            adapter = new GridAdapter(mContext);        }        adapter.update();        adapter.notifyDataSetChanged();        noScrollgridview.setAdapter(adapter);        noScrollgridview.setOnItemClickListener(new OnItemClickListener() {            @SuppressLint("NewApi")            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                                    long arg3) {//                  Intent intent = new Intent(mContext,//                          PhotoActivity.class);//                  intent.putExtra("ID", arg2);////                    startActivity(intent);//                  startActivityForResult(intent, REQUEST_CAMERA);                if (arg2 == Bimp.bmp.size()) {                    hideKeyboard();                    new PopupWindows(mContext,                            noScrollgridview);                } else {                    Intent intent = new Intent(mContext,                            PhotoActivity.class);                    intent.putExtra("ID", arg2);                    startActivity(intent);                }            }        });    }    @SuppressLint("HandlerLeak")    public class GridAdapter extends BaseAdapter {        private LayoutInflater inflater; // 视图容器        private int selectedPosition = -1;// 选中的位置        private boolean shape;        public boolean isShape() {            return shape;        }        public void setShape(boolean shape) {            this.shape = shape;        }        public GridAdapter(Context context) {            inflater = LayoutInflater.from(context);        }        public void update() {            loading();        }        public int getCount() {            return (Bimp.bmp.size() + 1);        }        public Object getItem(int arg0) {            return null;        }        public long getItemId(int arg0) {            return 0;        }        public void setSelectedPosition(int position) {            selectedPosition = position;        }        public int getSelectedPosition() {            return selectedPosition;        }        /**         * ListView Item设置         */        @SuppressLint("NewApi")        public View getView(int position, View convertView, ViewGroup parent) {            final int coord = position;            ViewHolder holder = null;            if (convertView == null) {                convertView = inflater.inflate(R.layout.item_published_grida,                        parent, false);                holder = new ViewHolder();                holder.image = (ImageView) convertView                        .findViewById(R.id.item_grida_image);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }//          if(Bimp.bmp.size() > 4){//              add_image.setVisibility(View.INVISIBLE);//          }else{//              add_image.setVisibility(View.VISIBLE);//          }//          holder.image.setImageBitmap(Bimp.bmp.get(position));            if (position == Bimp.bmp.size()) {                holder.image.setImageBitmap(BitmapFactory.decodeResource(                        getResources(), R.mipmap.icon_addpic_unfocused));                if (position == 9) {                    holder.image.setVisibility(View.GONE);                }            } else {                holder.image.setImageBitmap(Bimp.bmp.get(position));            }            return convertView;        }        public class ViewHolder {            public ImageView image;        }        Handler handler = new Handler() {            public void handleMessage(Message msg) {                switch (msg.what) {                    case 1:                        adapter.notifyDataSetChanged();                        break;                }                super.handleMessage(msg);            }        };        public void loading() {            new Thread(new Runnable() {                public void run() {                    while (true) {                        if (Bimp.max == Bimp.drr.size()) {                            Message message = new Message();                            message.what = 1;                            handler.sendMessage(message);                            break;                        } else {                            try {                                String path = Bimp.drr.get(Bimp.max);                                System.out.println(path);                                Bitmap bm = Bimp.revitionImageSize(path);                                Bimp.bmp.add(bm);                                String newStr = path.substring(                                        path.lastIndexOf("/") + 1,                                        path.lastIndexOf("."));                                FileUtils.saveBitmap(bm, "" + newStr);                                Bimp.max += 1;                                Message message = new Message();                                message.what = 1;                                handler.sendMessage(message);                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    }                }            }).start();        }    }    public String getString(String s) {        String path = null;        if (s == null)            return "";        for (int i = s.length() - 1; i > 0; i++) {            s.charAt(i);        }        return path;    }//  protected void onRestart() {//      adapter.update();//      super.onStart();//  }    @Override    protected void onResume() {        // TODO Auto-generated method stub        super.onResume();        adapter.update();        adapter.notifyDataSetChanged();    }    //相册 拍照 视频    public class PopupWindows extends PopupWindow {        public PopupWindows(final Context mContext, View parent) {            View view = View                    .inflate(mContext, R.layout.item_popupwindows, null);            view.startAnimation(AnimationUtils.loadAnimation(mContext,                    R.anim.fade_ins));            LinearLayout ll_popup = (LinearLayout) view                    .findViewById(R.id.ll_popup);            ll_popup.startAnimation(AnimationUtils.loadAnimation(mContext,                    R.anim.push_bottom_in_2));            setWidth(LayoutParams.FILL_PARENT);            setHeight(LayoutParams.FILL_PARENT);            setBackgroundDrawable(new BitmapDrawable());            setFocusable(true);            setOutsideTouchable(true);            setContentView(view);            showAtLocation(parent, Gravity.BOTTOM, 0, 0);            update();            final Button bt1 = (Button) view                    .findViewById(R.id.item_popupwindows_camera);            Button bt2 = (Button) view                    .findViewById(R.id.item_popupwindows_Photo);            Button bt3 = (Button) view                    .findViewById(R.id.item_popupwindows_cancel);            //视频部分            Button bt4 = (Button) view                    .findViewById(R.id.item_popupwindows_video);            bt1.setOnClickListener(new OnClickListener() {                public void onClick(View v) {                    //检测是否有相机和读写文件权限//                    if (ActivityCompat.checkSelfPermission(ShareActivity.this, Manifest.permission.CAMERA)//                            != PackageManager.PERMISSION_GRANTED//                            || ActivityCompat.checkSelfPermission(ShareActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)//                            != PackageManager.PERMISSION_GRANTED) {//                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//                            requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, NEED_CAMERA);//                        } else {                            photo();//                        }//                    }                    dismiss();                }            });            bt2.setOnClickListener(new OnClickListener() {                @SuppressLint("NewApi")                public void onClick(View v) {                    //检测是否有相机和读写文件权限//                    if (ActivityCompat.checkSelfPermission(ShareActivity.this, Manifest.permission.CAMERA)//                            != PackageManager.PERMISSION_GRANTED//                            || ActivityCompat.checkSelfPermission(ShareActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)//                            != PackageManager.PERMISSION_GRANTED) {//                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//                            requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, NEED_ALBUM);//                        }else {                            Intent intent = new Intent(mContext,                                    PhotoListActivity.class);                            startActivityForResult(intent, REQUEST_CAMERA);//                        }//                    }                   dismiss();                }            });            bt3.setOnClickListener(new OnClickListener() {                public void onClick(View v) {                    dismiss();                }            });/** * Created by kris-liutao on 2017. * 小视频录制 */            bt4.setOnClickListener(new OnClickListener() {                public void onClick(View v) {                    MediaRecorderConfig config = new MediaRecorderConfig.Buidler()                            //进行H264编码二次压缩                            .doH264Compress(true)                            .smallVideoWidth(480)                            .smallVideoHeight(480)                            .recordTimeMax(10 * 1000)                            .maxFrameRate(20)                            .minFrameRate(8)                            .captureThumbnailsTime(1)                            .recordTimeMin((int) (3.0 * 1000))                            .build();                    MediaRecorderActivity.goSmallVideoRecorder((Activity) mContext, SendSmallVideoActivity.class.getName(), config);                    dismiss();                }            });        }    }    @Override    public void onRequestPermissionsResult(int requestCode,  @NonNull String[] permissions,                                           @NonNull int[] grantResults) {        switch (requestCode) {            case NEED_CAMERA:                // 如果权限被拒绝,grantResults 为空                if (grantResults.length > 0                        && grantResults[1] == PackageManager.PERMISSION_GRANTED) {                    photo();                } else {                    Tip.tipshort(mContext, "该功能需要相机和读写文件权限");                }                break;            case NEED_ALBUM:                // 如果权限被拒绝,grantResults 为空                if (grantResults.length > 0                        && grantResults[1] == PackageManager.PERMISSION_GRANTED) {                    Intent intent = new Intent(mContext,                            PhotoListActivity.class);                    startActivityForResult(intent, REQUEST_CAMERA);                } else {                    Tip.tipshort(mContext, "该功能需要相册和读写文件权限");                }                break;        }    }    @SuppressLint("NewApi")    public void photo() {//      Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//      File file = new File(Environment.getExternalStorageDirectory()//              + "/myimage/", String.valueOf(System.currentTimeMillis())//              + ".jpg");//      if (!file.exists())//          file.getParentFile().mkdirs();//      path = file.getPath();//      Uri imageUri = Uri.fromFile(file);//      openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//      startActivityForResult(openCameraIntent, TAKE_PICTURE);        File imagePath = new File(Environment.getExternalStorageDirectory(), "images");        if (!imagePath.exists()) imagePath.mkdirs();        File newFile = new File(imagePath, "default_image.jpg");        path = newFile.getPath();        //第二参数是在manifest.xml定义 provider的authorities属性        contentUri = FileProvider.getUriForFile(this, "com.zontonec.ztkid.fileprovider", newFile);        Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        //兼容版本处理,因为 intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION) 只在5.0以上的版本有效        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            openCameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {            ClipData clip =                    ClipData.newUri(getContentResolver(), "A photo", contentUri);            openCameraIntent.setClipData(clip);            openCameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);        } else {            List<ResolveInfo> resInfoList =                    getPackageManager()                            .queryIntentActivities(openCameraIntent, PackageManager.MATCH_DEFAULT_ONLY);            for (ResolveInfo resolveInfo : resInfoList) {                String packageName = resolveInfo.activityInfo.packageName;                grantUriPermission(packageName, contentUri,                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION);            }        }        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);        startActivityForResult(openCameraIntent, TAKE_PICTURE);    }    class UpHead extends AsyncTask<Void, Void, String>{        private String result;        @Override        protected String doInBackground(Void... params) {            Map resultMap = null;            try {                String url = Apn.DMS_UPLOADFILE;                url = url + "&module=" + module + "&userid=" + userid + "&apptype=" + appType + "&schoolid=" + schoolid + "&kidid=" + kidid;                System.out.println("url:"+url);                String resultjson = UploadUtil.uploadFiles(Bimp.drr, url);//              System.out.println("resultjson:"+resultjson);                if(resultjson==null){                    return null;                }else if(resultjson.equals("timeout")){                    return "timeout";                }else{                    resultMap = JSONUtils.fromJson(resultjson, Map.class);//              System.out.println("resultMap:"+resultMap);                    List<Map> list = MapUtil                            .getSafeMapWhenInteger((List) resultMap                                    .get("data"));//              System.out.println("list:"+list);                    List<Map> maps=new ArrayList<Map>();                    for (int i = 0; i <list.size(); i++) {                        Map data =list.get(i);                        if (data.get("uploadStatus").equals("0")) {                            Map<String, String> temp = new HashMap<String, String>();                            temp.put("sType", "1");                            temp.put("attachmentID", MapUtil.getValueStr(data, "fileId"));                            temp.put("attachmentUrl", MapUtil.getValueStr(data, "fileUrl"));                            maps.add(temp);                        }else{                            return result;                        }                    }                    try {                        String content =edit_txt.getText().toString();                        System.out.println("发布动态请求:" + userid + "--" + kidid + "--" + appType + "--" + toWhereType + "--" + content + "--" + appKey + "--" + timeSpan + "--" + maps);                        if (module.equals("showclass")) {                            result = Apn.httpConnection(new ShareRequest(userid, kidid, appType, toWhereType, content, appKey, timeSpan, maps));                        } else if (module.equals("showmy")) {                            result = Apn.httpConnection(new ShareGrowthRequest(userid, kidid, appType, toWhereType, content, appKey, timeSpan, maps));                        }                    } catch (Exception e) {                        e.printStackTrace();                    }}            } catch (Exception e) {                e.printStackTrace();                return null;            }            return result;        }        @Override        protected void onPreExecute() {            super.onPreExecute();            progressDialog=new ProgressDialog(mContext);            progressDialog.setMessage("正在分享......");            progressDialog.setCancelable(false);            progressDialog.show();        }        @Override        protected void onPostExecute(String result) {            super.onPostExecute(result);            progressDialog.dismiss();//          System.out.println("发布动态的result:"+result);            if(result==null){                Tip.tipshort(mContext,"分享失败!");            }else if(result.equals("timeout")){                Tip.tipshort(mContext,"上传超时!");            }else{                Map resultMap = JSONUtils.fromJson(result, Map.class);                try {                    if (Apn.isSuccess(resultMap)) {//                      String sumpersonpoints = MapUtil.getValueStr(resultMap, "sumpersonpoints");////                      String[] sumpoint = sumpersonpoints.toString().split("\\.");//                      int sumpoints = Integer.parseInt(sumpoint[0]);////                      if (sumpoints < 20) {//                          Tip.tipshort(mContext, "积分值 +1");//                      } else {//                          Tip.tipshort(mContext, "分享成功");//                      }                        Tip.tipshort(mContext,"分享成功");                        //刷新视图                        FileUtils.deleteDir();                        Bimp.bmp.clear();                        Bimp.drr.clear();                        Bimp.max=0;                        adapter.update();                        adapter.notifyDataSetChanged();                        edit_txt.setText("");//                      add_image.setVisibility(View.VISIBLE);                        if (module.equals("showclass")) {                            Intent intent = new Intent();                            intent.setAction("refresh.class.fragment");                            intent.putExtra("share", "refresh");                            mContext.sendBroadcast(intent);                        } else if (module.equals("showmy")) {                            Intent intent = new Intent();                            intent.setAction("refresh.growth.fragment");                            intent.putExtra("share", "refresh");                            mContext.sendBroadcast(intent);                        }                        finish();                    } else {                        Tip.tipshort(mContext,resultMap.get("data").toString());                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        }    }    /**     * 隐藏软键盘     */    private void hideKeyboard() {        if (((Activity) mContext).getWindow().getAttributes().softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) {            if (((Activity) mContext).getCurrentFocus() != null)                manager.hideSoftInputFromWindow(((Activity) mContext).getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);        }    }    @Override    public void initView() {        super.initView();    }    private void initSmallVideo(Context context) {        // 设置拍摄视频缓存路径        File dcim = Environment                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);        if (DeviceUtils.isZte()) {            if (dcim.exists()) {                VCamera.setVideoCachePath(dcim + "/beiguanhuai/");            } else {                VCamera.setVideoCachePath(dcim.getPath().replace("/sdcard/",                        "/sdcard-ext/")                        + "/beiguanhuai/");            }        } else {            VCamera.setVideoCachePath(dcim + "/beiguanhuai/");        }        // 开启log输出,ffmpeg输出到logcat        VCamera.setDebugMode(true);        // 初始化拍摄SDK,必须        VCamera.initialize(context);    }}

这种方式使用压缩异常简单

第一步:
添加下面这段依赖同步
compile ‘com.mabeijianxi:small-video-record:1.0.7’

第二步:
在activity或者fragment中初始化initSmallVideo()

 private void initSmallVideo(Context context) {        // 设置拍摄视频缓存路径        File dcim = Environment                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);        if (DeviceUtils.isZte()) {            if (dcim.exists()) {                VCamera.setVideoCachePath(dcim + "/beiguanhuai/");            } else {                VCamera.setVideoCachePath(dcim.getPath().replace("/sdcard/",                        "/sdcard-ext/")                        + "/beiguanhuai/");            }        } else {            VCamera.setVideoCachePath(dcim + "/beiguanhuai/");        }        // 开启log输出,ffmpeg输出到logcat        VCamera.setDebugMode(true);        // 初始化拍摄SDK,必须        VCamera.initialize(context);    }

第三步

只需要写个button就可启动

这里写图片描述

这个便是处理视频压缩,时长等等功能的代码部分

这里写图片描述

当然这样写很多人会觉得没问题的呀

我就是这么干的,加上去后代码不会 报错,而且运行正常,但是当你点击下面这个popwindow的按钮时

这里写图片描述

你会发现之前写的拍照,相册不能使用了,按钮点击无响应,万般无奈看了各种博客说什么gradle的呀,SDK版本问题的呀………..?最后还是没能解决,还真不好注意这方面的问题。

解决办法

将写好的权限管理全部注释掉使用EasyPermissions啊或者其他类的来管理动态授权,在这里面只有简单的调用就OK了

最后每个按钮的点击事件便都能响应
效果图如下:
这里写图片描述

1 0
原创粉丝点击