今天研究了一下视频上传的处理,还包括研究可以视频压缩,本地视频、录制视频上传。本地视频获取需要适配手机,这个建议自己获取本地视频列表自己实现。不然就会出现路径找不到返回 null

好东西都是要分享给大家的 有问题请留言评论。。。

视频压缩我用的是七牛的 ,我们图片上传的就是七牛,七牛的视频压缩还是很快的

感兴趣可以看看官网文档 看不懂就看下面加红的那个链接

https://developer.qiniu.com/pili/sdk/3734/android-short-video-sdk

视频压缩可以看这个博客的介绍 ,他写的挺详细 我就不写了

https://blog.csdn.net/qq_31796651/article/details/79154072

一、权限设置

 <!-- 读取内部存储数据权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 写入内部存储数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

二、本地视频跳转

 //选择视频private void selectVideo() {if (android.os.Build.BRAND.equals("Huawei")) {Intent intentPic = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);startActivityForResult(intentPic, 2);}if (android.os.Build.BRAND.equals("Xiaomi")) {//是否是小米设备,是的话用到弹窗选取入口的方法去选取视频Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "video/*");startActivityForResult(Intent.createChooser(intent, "选择要导入的视频"), 2);} else {//直接跳到系统相册去选取视频Intent intent = new Intent();if (Build.VERSION.SDK_INT < 19) {intent.setAction(Intent.ACTION_GET_CONTENT);intent.setType("video/*");} else {intent.setAction(Intent.ACTION_OPEN_DOCUMENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("video/*");}startActivityForResult(Intent.createChooser(intent, "选择要导入的视频"), 2);}}

三、视频录制跳转

 //拍摄视频private void video() {push_mp3 = true;Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 1);intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);startActivityForResult(intent, 3);}

四、视频录制和本地视频获取

requestCode=3是视频录制获取

requestCode=2是本地视频获取

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK && null != data && requestCode == 3) {Uri uri = data.getData();ContentResolver cr = this.getContentResolver();/** 数据库查询操作。* 第一个参数 uri:为要查询的数据库+表的名称。* 第二个参数 projection : 要查询的列。* 第三个参数 selection : 查询的条件,相当于SQL where。* 第三个参数 selectionArgs : 查询条件的参数,相当于 ?。* 第四个参数 sortOrder : 结果排序。*/assert uri != null;Cursor cursor = cr.query(uri, null, null, null, null);if (cursor != null) {if (cursor.moveToFirst()) {// 视频ID:MediaStore.Audio.Media._IDint videoId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));// 视频名称:MediaStore.Audio.Media.TITLEString title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));// 视频路径:MediaStore.Audio.Media.DATAString path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));// 视频时长:MediaStore.Audio.Media.DURATIONint duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));// 视频大小:MediaStore.Audio.Media.SIZElong size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));Log.e("size ", size + "");// 视频缩略图路径:MediaStore.Images.Media.DATAString imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));// 缩略图ID:MediaStore.Audio.Media._IDint imageId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));// 方法一 Thumbnails 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例// 第一个参数为 ContentResolver,第二个参数为视频缩略图ID, 第三个参数kind有两种为:MICRO_KIND和MINI_KIND 字面意思理解为微型和迷你两种缩略模式,前者分辨率更低一些。Bitmap bitmap1 = MediaStore.Video.Thumbnails.getThumbnail(cr, imageId, MediaStore.Video.Thumbnails.MICRO_KIND, null);// 方法二 ThumbnailUtils 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例// 第一个参数为 视频/缩略图的位置,第二个依旧是分辨率相关的kindBitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(imagePath, MediaStore.Video.Thumbnails.MICRO_KIND);// 如果追求更好的话可以利用 ThumbnailUtils.extractThumbnail 把缩略图转化为的制定大小if (duration > 11000) {Toast.makeText(getApplicationContext(), "视频时长已超过10秒,请重新选择", Toast.LENGTH_SHORT).show();return;}}cursor.close();}} else if (resultCode == RESULT_OK && null != data && requestCode == 2) { {Uri uri = data.getData();String path = getRealPathFromURI(uri);Log.d("path", "path==" + path);File file = new File(path);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 > 11000) {Toast.makeText(getApplicationContext(), "视频时长已超过10秒,请重新选择", Toast.LENGTH_SHORT).show();return;}}}}

uri转path的方法

public String getRealPathFromURI(Uri contentUri) {String res = null;String[] proj = {MediaStore.Images.Media.DATA};Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);if (cursor.moveToFirst()) {int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);res = cursor.getString(column_index);}cursor.close();return res;}

自己写的东西肯定要适配很多东西和大量测试,建议还是使用比较出色一点的开源库

https://github.com/LuckSiege/PictureSelector

欢迎加入技术分享学习公众号【码兄】

Android实现本地视频+录制视频+视频压缩上传相关推荐

  1. iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传

    iOS 录视频,相册选择视频,视频压缩,存储本地文件,播放,上传 工程中用到了这部分的功能,也纠结了几天后做完了,现在总结下这部分的东西. 先说描述下需求: (1)从相册取视频.录视频: (2)视频转 ...

  2. vue 调用pc端本地摄像头、麦克风实现拍照、录视频、录音 并上传到服务器指定树文件夹

    vue 调用pc端本地摄像头.麦克风实现拍照.录视频.录音 并上传 自己写blog只是为了下次方便使用 过程确实很烦 ,自己摸索加各大网站cv查看 可以直接使用 1.调用摄像头拍照 录屏 首先是npm ...

  3. Android OpenGL添加水印并录制视频--抖音视频录制原理

    Android OpenGL添加水印并录制视频–抖音视频录制原理 简单的视频录制,我们可以使用MediaRecorder,具体示例可以参考Gitee: Camera2VideoJava 本文将介绍采集 ...

  4. 视频太大不能上传如何缩小?

    视频太大不能上传如何缩小?相信大家都有过这样的体验,由于工作原因需要向某个网站上传一个视频,然而因为网站有限制,视频由于超出限制的大小而不能上传.这种情况的发生概率非常的大,那么怎么办呢?唯一的办法就 ...

  5. 优酷怎么上传视频 优酷如何上传视频

    有时我们在应用优酷视频的情况下,想视频上传,怎么操作呢,下边来共享一下方式 01. 第一步在大家的手机里面打开软件,进来用户中心页面,点一下提交 优酷怎么上传视频,优酷如何上传视频 02. 第二步进来 ...

  6. php ios视频文件上传,iOS实现视频和图片的上传思路

    关于iOS如何实现视频和图片的上传, 我们先理清下思路,然后小编根据思路一步一步给大家详解实现过程. 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. ...

  7. php解码 u7f3a u5c11,视频转码系统文件上传接口规范

    视频转码系统文件上传接口规范 1. 概述 1.1. 用途 云视睿博视频转码系统 (以下简称转码系统) 可以将转码后的视频文件通过 HTTP 协议上传到服务器上 默认情况下, 给出一个可以上传文件的 H ...

  8. vue+flask实现视频合成(拖拽上传)

    vue+flask实现视频合成 效果如下 欢迎访问博客代码哈士奇 技术 聊天 交流群 974178910 前端交流群 535620886 vue+flask实现视频合成 拖拽上传我们之前一个文章有写过 ...

  9. Git上传本地文件到服务器,git上传文件到远程服务器

    git上传文件到远程服务器 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云 ...

  10. android com.mylhyl,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. photopicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

最新文章

  1. P2016 战略游戏
  2. java富文本编辑器wangEditor-3.1.1的使用流程
  3. 【今日CV 视觉论文速览】 17 Dec 2018
  4. 第三方服务-阿里云视频点播服务java服务端SDK相关代码
  5. jsp页面中文乱码解决方法
  6. VBA编程之ODBC连接数据库
  7. Unity3D视频教程,Unity3D从入门到精通视频教程
  8. java毕业答辩会问什么,java毕业设计答辩(详细流程介绍)
  9. css ico图标不显示,网站后台ico图标不显示的解决方法
  10. 在官网下载linux版本的tomcat
  11. MQTT——服务质量Qos
  12. 51Nod 1007 正整数分组
  13. 关于python数据的纬度_Python插值时间,纬度和经度
  14. Android 启动过程介绍
  15. VBA入门到进阶常用知识代码总结40
  16. 全国地区 mysql表_数据库表地址数据(中国地区)
  17. java 图片url转图片
  18. 腾讯数平精准推荐 | OCR技术之识别篇
  19. CD刻录之Nero Burning ROM
  20. css 科技 边框_纯css制作带三角的边框(附效果图)

热门文章

  1. methods定义方法
  2. mx350显卡天梯图_2020最新显卡高清天梯图
  3. MEPG2 初探(PSI,SI的解析)
  4. Live Streaming Protocol--三种主流的流媒体协议MEPG DASH,HLS,Smooth Streaming及其manifest 文件字段解释
  5. C#使用NPOI实现Excel数据透视
  6. Markdown常用语法详解
  7. 球中瑞雪 (Snow Globe) ——关于用程序实现圣诞水晶球的设想
  8. 第一次使用无人船的日志
  9. 优秀课程案例:母亲节系列相关教程案例!
  10. html中%3cp%3e中加空格,html中空白空格怎么打?