Android 录制视频并上传
2016-07-28 15:48
316 查看
一、录制视频
// 点击“录制视频”按钮
recordVideoButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// 将文件存到指定的路径
filePath = FILE_DIR + “xxx.mp4”;
File file = new File(filePath);
if (file.exists()) {
file.delete();
}
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction("android.media.action.VIDEO_CAPTURE");
intent.addCategory("android.intent.category.DEFAULT");
// 自定义输出位置,这样可以将视频存在我们指定的位置
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_VIDEO_WITH_CAMERA);
}
});
二、上传视频
// 显示视频缩略图
private void showVideoThumbail() {
this.videoView.setVisibility(View.GONE);
this.thumbailView.setVisibility(View.VISIBLE);
this.markIcon.setVisibility(View.VISIBLE);
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(filePath,
Thumbnails.MINI_KIND);
this.thumbailView.setImageBitmap(bitmap);
this.thumbailView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showVideo();
}
});
}
// 播放视频
private void showVideo() {
this.videoView.setVisibility(View.VISIBLE);
this.thumbailView.setVisibility(View.GONE);
this.markIcon.setVisibility(View.GONE);
MediaController mediaController = new MediaController(this);
this.videoView.setMediaController(mediaController);
this.videoView.setVideoPath(filePath);
mediaController.setMediaPlayer(videoView);
this.videoView.requestFocus();
this.videoView.start();
}
三、上传视频
// file是要上传的文件
// contentType是类型,我这里用的是“video/mp4”
// requestURL是文件上传请求的URL
private String uploadFile(File file, String contentType, String requestURL) {
String serverResponse = null;
try {
if (!file.exists()) {
return null;
}
this.httpClient = new DefaultHttpClient();
// 为了防止文件的中文乱码问题
this.httpClient.getParams().setParameter(
CoreProtocolPNames.HTTP_CONTENT_CHARSET,
Charset.forName("utf-8"));
HttpContext httpContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(requestURL);
// 使用MultipartEntity 来上传文件,需要导入httpmime-4.1.2.jar
MultipartEntity multipartEntity = new MultipartEntity();
// 使用FileBody来传输视频
multipartEntity.addPart("data", new FileBody(file, contentType));
// 上传
httpPost.setEntity(multipartEntity);
HttpResponse response = this.httpClient.execute(httpPost, httpContext);
serverResponse = EntityUtils.toString(response.getEntity());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return serverResponse;
}
// 点击“录制视频”按钮
recordVideoButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// 将文件存到指定的路径
filePath = FILE_DIR + “xxx.mp4”;
File file = new File(filePath);
if (file.exists()) {
file.delete();
}
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction("android.media.action.VIDEO_CAPTURE");
intent.addCategory("android.intent.category.DEFAULT");
// 自定义输出位置,这样可以将视频存在我们指定的位置
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_VIDEO_WITH_CAMERA);
}
});
二、上传视频
// 显示视频缩略图
private void showVideoThumbail() {
this.videoView.setVisibility(View.GONE);
this.thumbailView.setVisibility(View.VISIBLE);
this.markIcon.setVisibility(View.VISIBLE);
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(filePath,
Thumbnails.MINI_KIND);
this.thumbailView.setImageBitmap(bitmap);
this.thumbailView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showVideo();
}
});
}
// 播放视频
private void showVideo() {
this.videoView.setVisibility(View.VISIBLE);
this.thumbailView.setVisibility(View.GONE);
this.markIcon.setVisibility(View.GONE);
MediaController mediaController = new MediaController(this);
this.videoView.setMediaController(mediaController);
this.videoView.setVideoPath(filePath);
mediaController.setMediaPlayer(videoView);
this.videoView.requestFocus();
this.videoView.start();
}
三、上传视频
// file是要上传的文件
// contentType是类型,我这里用的是“video/mp4”
// requestURL是文件上传请求的URL
private String uploadFile(File file, String contentType, String requestURL) {
String serverResponse = null;
try {
if (!file.exists()) {
return null;
}
this.httpClient = new DefaultHttpClient();
// 为了防止文件的中文乱码问题
this.httpClient.getParams().setParameter(
CoreProtocolPNames.HTTP_CONTENT_CHARSET,
Charset.forName("utf-8"));
HttpContext httpContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(requestURL);
// 使用MultipartEntity 来上传文件,需要导入httpmime-4.1.2.jar
MultipartEntity multipartEntity = new MultipartEntity();
// 使用FileBody来传输视频
multipartEntity.addPart("data", new FileBody(file, contentType));
// 上传
httpPost.setEntity(multipartEntity);
HttpResponse response = this.httpClient.execute(httpPost, httpContext);
serverResponse = EntityUtils.toString(response.getEntity());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return serverResponse;
}
相关文章推荐
- android中VideoView无法播放此视频
- Android_Spinner_SimpleAdapter
- Android.mk 文件语法详解
- Android之事件分发与消费机制
- 谈谈Android中的Rect类
- Android 解决不同进程发送KeyEvent 的问题
- cordova platform add android 报错问题解决
- Android多用户原理和实现
- Android xutils3.0 使用
- 记录一次Android内存泄漏事件和解决过程
- ListView,点击每一个Item,如何获取当前Item的数据?
- Android Studio 如何格式化代码
- Android调试中使用默认的 签名文件
- AndroidStudio导入XlistView步骤
- Android安全机制(三)
- Android ServiceConnection
- 【Android基础知识】Android Studio 编译慢及 Adb connection Error:远程主机强迫关闭了一个现有的连接
- 中英文切换
- Android_实现省市区(县)三级联动效果
- Android Storage Options(存储方式)