这几天在写使用摄像头录像,发现使用自己自定义的录像不能沾满全屏,在手机屏幕的右侧有一道明显的黑色,所以也就没有使用自定义了。不能使用自定义的,就只能使用原生的咯,一开始还觉得挺简单的,就跳转录像,然后回调拿到地址就可以了。当然,一般的录像这样就可以了,蛋疼的是,录像过后上传完成之后,显示的视频居然是反过来了,这也太坑了吧,百度了一下,说是因为你不更改录像时的分辨率,系统就会默认使用他自己的分辨率,至今还没找到怎么解决,不过好在解决了限制录制视频时长的:
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);//跳转到录像界面,并返回地址
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,60);//限制录制时长,单位S
startActivityForResult(intent, 100);
以上是跳转录像以及限制录制时长的,顺便一起记录一下保存视频的缩略图吧,(本人比较懒,所以并没有选择缩略图的选项,就直接是截取视频第一帧作为缩略图):
获取视频第一帧转换为Bitmap:
public static Bitmap getUrlBitmap(String videourl){
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(videourl, MediaStore.Video.Thumbnails.MINI_KIND);
if (bitmap!=null){
return bitmap;
}
return null;
}
将Bitmap保存文.png格式图片:
public static String SaveImages(Context context, Bitmap bitmap,String path) {
String sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File(sdCardPath,“zzp_sale”);
if (!file.exists()){
file.mkdirs();
}
File myFile=new File(file,path);
if (!myFile.exists()) {
try {
myFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
FileOutputStream outputStream=new FileOutputStream(myFile);
bitmap.compress(Bitmap.CompressFormat.PNG,90,outputStream);
outputStream.flush();
outputStream.close();
return sdCardPath+"/zzp_sale/"+path;
} catch (FileNotFoundException e) {
e.printStackTrace();
return “”;
} catch (IOException e) {
e.printStackTrace();
return “”;
}
}
这个保存只是保存在自定义的文件夹下面,并没有插入系统图库,如果需要插入系统图库呢就在文件流关闭之后加上:
MediaStore.Images.Media.insertImage(context.getContentResolver(), newcreatefile.getAbsolutePath(), path, null);
Uri uri=Uri.fromFile(newcreatefile);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));
这个限制时长呢是倒计时的