Android上传视频

二丶第一步,点击跳转

/**

* 打开录像机

*/

camera.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent it = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

startActivityForResult(it, 100);

}

});

/**

* 打开视频相册

*/

pick.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

intent.setType("video/*");

intent.setAction(Intent.ACTION_GET_CONTENT);

intent.addCategory(Intent.CATEGORY_OPENABLE);

startActivityForResult(intent, 100);

}

});

二丶第二步,需要一个Util类,来拿到视频的绝对路径

public class UriUtils {

/**

* Get a file path from a Uri. This will get the the path for Storage Access

* Framework Documents, as well as the _data field for the MediaStore and

* other file-based ContentProviders.

*

* @param context The context.

* @param uri The Uri to query.

*/

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

public static String getPath(final Context context, final Uri uri) {

 

final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

 

// DocumentProvider

if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {

// ExternalStorageProvider

if (isExternalStorageDocument(uri)) {

final String docId = DocumentsContract.getDocumentId(uri);

final String[] split = docId.split(":");

final String type = split[0];

 

if ("primary".equalsIgnoreCase(type)) {

return Environment.getExternalStorageDirectory() + "/" + split[1];

}

 

// TODO handle non-primary volumes

}

// DownloadsProvider

else if (isDownloadsDocument(uri)) {

 

final String id = DocumentsContract.getDocumentId(uri);

final Uri contentUri = ContentUris.withAppendedId(

Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

 

return getDataColumn(context, contentUri, null, null);

}

// MediaProvider

else if (isMediaDocument(uri)) {

final String docId = DocumentsContract.getDocumentId(uri);

final String[] split = docId.split(":");

final String type = split[0];

 

Uri contentUri = null;

if ("image".equals(type)) {

contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

} else if ("video".equals(type)) {

contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

} else if ("audio".equals(type)) {

contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

}

 

final String selection = "_id=?";

final String[] selectionArgs = new String[] {

split[1]

};

 

return getDataColumn(context, contentUri, selection, selectionArgs);

}

}

// MediaStore (and general)

else if ("content".equalsIgnoreCase(uri.getScheme())) {

return getDataColumn(context, uri, null, null);

}

// File

else if ("file".equalsIgnoreCase(uri.getScheme())) {

return uri.getPath();

}

 

return null;

}

 

/**

* Get the value of the data column for this Uri. This is useful for

* MediaStore Uris, and other file-based ContentProviders.

*

* @param context The context.

* @param uri The Uri to query.

* @param selection (Optional) Filter used in the query.

* @param selectionArgs (Optional) Selection arguments used in the query.

* @return The value of the _data column, which is typically a file path.

*/

public static String getDataColumn(Context context, Uri uri, String selection,

String[] selectionArgs) {

 

Cursor cursor = null;

final String column = "_data";

final String[] projection = {

column

};

 

try {

cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,

null);

if (cursor != null && cursor.moveToFirst()) {

final int column_index = cursor.getColumnIndexOrThrow(column);

return cursor.getString(column_index);

}

} finally {

if (cursor != null)

cursor.close();

}

return null;

}

 

 

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is ExternalStorageProvider.

*/

public static boolean isExternalStorageDocument(Uri uri) {

return "com.android.externalstorage.documents".equals(uri.getAuthority());

}

 

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is DownloadsProvider.

*/

public static boolean isDownloadsDocument(Uri uri) {

return "com.android.providers.downloads.documents".equals(uri.getAuthority());

}

 

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is MediaProvider.

*/

public static boolean isMediaDocument(Uri uri) {

return "com.android.providers.media.documents".equals(uri.getAuthority());

}

 

}

二丶第三步,在回调进行处理

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 100 && resultCode == RESULT_OK) {

Uri uri = data.getData();

//需要有一个控件,把选择的视频展示出来

VideoView videoView = findViewById(R.id.postvideo_vv);

videoView.setKeepScreenOn(true);

videoView.setVideoURI(uri);

videoView.start();

//对uri进行转换

String path = UriUtils.getPath(this, uri);

File file = new File(path);

 

//获取视频的第一帧

Bitmap bitmap1 = getNetVideoBitmap(path);

File resourceFile1 = getResourceFile1(bitmap1);

//RequestBody封装了文件和文件的类型

RequestBody body1 = RequestBody.create(MediaType.parse("video/*"), resourceFile1);

// MultipartBody.Part封装了接受的key和文件名字和RequestBody

MultipartBody.Part Image= MultipartBody.Part.createFormData("coverFile", resourceFile1.getName(), body1);

 

//视频

//RequestBody封装了文件和文件的类型

RequestBody requestBody = RequestBody.create(MediaType.parse("video/*"), file);

// MultipartBody.Part封装了接受的key和文件名字和RequestBody

MultipartBody.Part Video= MultipartBody.Part.createFormData("videoFile", file.getName(), requestBody);

}

 

 

}

//拿到图片的第一帧

public Bitmap getNetVideoBitmap(String videoPath) {

try {

bitmap2 = null;

retriever = new MediaMetadataRetriever();

// 获取本地视频的第一帧 //

retriever.setDataSource(videoPath);

// 获得第一帧图片

bitmap2 = retriever.getFrameAtTime();

 

// 视频第一帧的压缩 /*

FileOutputStream outStream = null;

outStream = new FileOutputStream(new File(PostvideoActivity.this.getExternalCacheDir().getAbsolutePath() + "/" + "视频" + ".jpg"));

bitmap2.compress(Bitmap.CompressFormat.JPEG, 10, outStream);

outStream.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} finally {

retriever.release();

return bitmap2;

}

}

//将bitmap写入文件流

public File getResourceFile1(Bitmap bitmap) {

File file = new File(PostvideoActivity.this.getFilesDir().getAbsolutePath());

if (!file.exists()) {

//如果file不存在 则创建此文件

file.mkdirs();

}

//给据获取的file文件夹 生成带根目录的图片文件

File file1 = new File(file, "image.png");

try {

FileOutputStream fileOutputStream = new FileOutputStream(file1);

bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);

//刷新流

fileOutputStream.flush();

//关流

fileOutputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

return file1;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值