Android实现上传本地或拍摄的视频到Bmob服务器
2017-03-23 10:52
591 查看
好久没有更博客了,今天来说说如何实现上传本地或拍摄的视频到Bmob服务器吧。其实上传文件的代码格式都差不多,可以修改套用就能实现。
Adndroid中通过Intent 可以实现调用图片、视频、音频、录音、拍照等功能。例如调用图片可以用如下格式:
调用视频的格式如下:
还有调用调用录音,添加音频的格式如下:
本文着重讲讲如何调用视频格式的功能,并上传到Bmob服务器。一开始使用以上的格式的代码时发现调用出现问题,通过查找资料发现 “Intent intent = new Intent(Intent.ACTION_GET_CONTENT);”这个引用方法对Android 4.0以上版本并不适用,需要改成“Intent intent = new Intent(Intent.ACTION_PICK);”这个格式才能解决问题。打开视频文件的目录后选择视频,或者先选择录制视频再选择上传,如图所示效果:
下面贴上具体代码,首先是上传本地视频的格式代码:
这里我设置了视频的时间限制,不能超过5分钟,否则上传失败。上传成功,在界面的下方会出现视频第一帧的Bitmap图像。上传成功后,Bmob服务器中显示的视频格式如图:
然后如果是拍摄的视频,代码格式如下:
最后在贴一张运行后的效果图:
别忘了添加权限:
之后有机会再详细说明视频缩略图的获取显示~谢谢支持~!
Adndroid中通过Intent 可以实现调用图片、视频、音频、录音、拍照等功能。例如调用图片可以用如下格式:
//选择图片 requestCode 返回的标识 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT" intent.setType(contentType); //查看类型 ,可以在之前定义String IMAGE_UNSPECIFIED = "image/*"; Intent wrapperIntent = Intent.createChooser(intent, null); ((Activity) context).startActivityForResult(wrapperIntent, requestCode); //拍照 REQUEST_CODE_TAKE_PICTURE 为返回的标识 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //"android.media.action.IMAGE_CAPTURE"; intent.putExtra(MediaStore.EXTRA_OUTPUT, Mms.ScrapSpace.CONTENT_URI); // output,Uri.parse("content://mms/scrapSpace"); startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
调用视频的格式如下:
//拍摄视频 int durationLimit = getVideoCaptureDurationLimit(); //SystemProperties.getInt("ro.media.enc.lprof.duration", 60); Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, sizeLimit); intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, durationLimit); startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO); //视频 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(contentType); //String VIDEO_UNSPECIFIED = "video/*"; Intent wrapperIntent = Intent.createChooser(intent, null); ((Activity) context).startActivityForResult(wrapperIntent, requestCode);
还有调用调用录音,添加音频的格式如下:
//添加音频 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(contentType); //String VIDEO_UNSPECIFIED = "video/*"; Intent wrapperIntent = Intent.createChooser(intent, null); ((Activity) context).startActivityForResult(wrapperIntent, requestCode); //录音 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(ContentType.AUDIO_AMR); //String AUDIO_AMR = "audio/amr"; intent.setClassName("com.android.soundrecorder", "com.android.soundrecorder.SoundRecorder"); ((Activity) context).startActivityForResult(intent, requestCode);
本文着重讲讲如何调用视频格式的功能,并上传到Bmob服务器。一开始使用以上的格式的代码时发现调用出现问题,通过查找资料发现 “Intent intent = new Intent(Intent.ACTION_GET_CONTENT);”这个引用方法对Android 4.0以上版本并不适用,需要改成“Intent intent = new Intent(Intent.ACTION_PICK);”这个格式才能解决问题。打开视频文件的目录后选择视频,或者先选择录制视频再选择上传,如图所示效果:
下面贴上具体代码,首先是上传本地视频的格式代码:
Uri uri = data.getData(); File file = getFileByUri(uri); MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象 mmr.setDataSource(file.getAbsolutePath()); Bitmap bitmap=mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象 String duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);//时长(毫秒) Log.d("ddd","duration=="+duration); int int_duration= Integer.parseInt(duration); if(int_duration>300000){ Toast.makeText(getApplicationContext(), "视频时长已超过5分钟,请重新选择", Toast.LENGTH_SHORT).show(); }
这里我设置了视频的时间限制,不能超过5分钟,否则上传失败。上传成功,在界面的下方会出现视频第一帧的Bitmap图像。上传成功后,Bmob服务器中显示的视频格式如图:
然后如果是拍摄的视频,代码格式如下:
if (cursor != n b10a ull && cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex(VideoColumns._ID)); String filePath = cursor.getString(cursor.getColumnIndex(VideoColumns.DATA)); bitmap1 = Thumbnails.getThumbnail(getContentResolver(), id, Thumbnails.MICRO_KIND, null); // ThumbnailUtils类2.2以上可用 // Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(filePath, // Thumbnails.MICRO_KIND); Log.d("ddd", "filepath==" + filePath); File file1=new File(filePath); cursor.close(); //上传到Bomb部分的代码 final BmobFile icon1 = new BmobFile(file1); icon1.upload(this, new UploadFileListener() { @Override public void onSuccess() { //Person person = new Person(); shipin.setDescribe(describe); shipin.setTitle(title); shipin.setIcon(icon1); shipin.setAuthor(author);/////////////////////////// shipin.setUser(user1);/////////////////////////// shipin.setUsernames(usernames1);//////////////////////// shipin.setAtavars(avatars1);////////////////////////// shipin.save(Ad2.this); Toast.makeText(Ad2.this,"视频上传成功~",Toast.LENGTH_SHORT).show(); Toast.makeText(Ad2.this,"视频发表成功~",Toast.LENGTH_SHORT).show(); } @Override public void onFailure(int arg0, String arg1) { Toast.makeText(Ad2.this,"上传失败,请检查网络~",Toast.LENGTH_SHORT).show(); } @Override public void onProgress(Integer arg0) {//////////////////////////////123 // TODO Auto-generated method stub } }); ivHead.setImageBitmap(bitmap1); btn_true.setOnClickListener(new OnClickListener(){ public void onClick(View v) { // TODO Auto-generated method stub finish(); }/////////////////// });////////////// }
最后在贴一张运行后的效果图:
别忘了添加权限:
<uses-permission Android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
之后有机会再详细说明视频缩略图的获取显示~谢谢支持~!
相关文章推荐
- spydroid-ipcamera 实现Android视频实时上传到服务器,服务器可以实时浏览
- Android系统获取应用的Crash信息,保存在本地(可以自己实现上传到自己的服务器)
- Android使用OKHttp库实现视频文件的上传到服务器功能
- Android 使用开源框架实现上传本地文件至服务器
- Android MediaRecorder H264 编码实时视频流不能播放(readInt()值太大)以及如何将流实时上传到服务器的方法
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- Android开发 基于HttpComponent4.3.3实现文件上传至tomcat服务器(基于struts框架)
- android实现上传大文件到服务器(socket)
- Android 中tomcat搭建本地服务器 实现apk更新下载
- Android如何实现压缩图片后再上传至服务器
- android webservice 本地服务器的搭建 简单的运算法则的实现(五)
- Android开发之路十四-----------Android中实现视频文件的上传
- 在网页中插入FLV格式的视频在本地预览中能播放,上传到服务器就不能播放
- asp.net Flv视频在本地能播放上传服务器不能播放
- android实现拖动上传图片和文字至服务器
- GStreamer实现视频本地播放并RTP上传到网络VLC播放
- android从本地媒体库获取图片上传至服务器保存
- Android应用开发之实现视频文件的上传
- Android 中tomcat搭建本地服务器 实现apk更新下载
- android实现服务器图片本地缓存