j最近在Adnroid开发用到了视频的读写操作,记录备忘一下:

都是借用android的med

1、保存TextView到mp4视频

2、读取MP4视频

  /*** 获取本地视频缩略图* @param* @return*/public void getVideoThumbnail() {//获得当前时间int sample = 5;//每秒5帧Bitmap bitmap = null;MediaMetadataRetriever mmr = new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象File file = new File(FileHelper.instance().getVideoFilePath(this));//实例化File对象,文件路径为/storage/sdcard/Movies/video.mp4FileOutputStream fos = null;File fileGaode = null;if(file.exists()){mmr.setDataSource(file.getAbsolutePath());//设置数据源为该文件对象指定的绝对路径// 取得视频的长度(单位为毫秒)String time = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);// 转换单位为秒)int seconds = Integer.valueOf(time) / 1000;int dowsample = seconds * sample;// Bitmap bitmap = mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象// 得到每一秒时刻的bitmap比如第一秒,第二秒for (int i = 1; i <= dowsample; i++) {bitmap = mmr.getFrameAtTime(i * 1000 * 1000 / sample, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);String path = FileHelper.instance().getPicFilePath(this) + "/" + i + ".jpg";//保存if(bitmap!=null) {try{fos = new FileOutputStream(path);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();}catch (Exception e){}}}}else{Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();//文件不存在时,弹出消息提示框}return bitmap;}
    public void saveBitmap2file(Bitmap bmp, String filename) {if (bmp == null){return;}String savePath;String fileName = filename + ".jpeg";savePath = FileHelper.instance().getSDcardPath();File filePic = new File(savePath + fileName);try {if (!filePic.exists()) {filePic.getParentFile().mkdirs();filePic.createNewFile();}FileOutputStream fos = new FileOutputStream(filePic);bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();//  Toast.makeText(MainActivity., "保存成功,位置:" + filePic.getAbsolutePath(), Toast.LENGTH_SHORT).show();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

以下为测试在SD卡读写文件

{// 在SD卡目录下创建文件File file = new File(FileHelper.instance().getSDcardPath(), "mysdcard.txt");Log.d(TAG, "file.exists():" + file.exists() + " file.getAbsolutePath():"+ file.getAbsolutePath());if (file.exists()) {file.delete();try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}// 在SD卡目录下的文件,写入内容FileWriter fw = null;try {fw = new FileWriter(file);} catch (IOException e) {e.printStackTrace();}try {fw.write("我sdcard内容.....");} catch (IOException e) {e.printStackTrace();}try {fw.close();} catch (IOException e) {e.printStackTrace();}Toast.makeText(MainActivity.this, "SD卡写入内容完成...",Toast.LENGTH_LONG).show();Log.d(TAG, "SD卡写入内容完成...");// 读取SD卡文件里面的内容FileReader fr = null;try {fr = new FileReader("/mnt/sdcard/mysdcard.txt");} catch (FileNotFoundException e) {e.printStackTrace();}BufferedReader r = new BufferedReader(fr);String result = null;try {result = r.readLine();} catch (IOException e) {e.printStackTrace();}Log.d(TAG, "SD卡文件里面的内容:" + result);Toast.makeText(MainActivity.this, "SD卡文件里面的内容...",Toast.LENGTH_LONG).show();mBtnRecord.setText(result);
}

3、FFmpegMediaMetadataRetriever 也挺好用

https://github.com/wseemann/FFmpegMediaMetadataRetriever

使用

(1)在app下建立libs ,下载aar放进去

在app的build.gradle的andriod中加入

repositories {flatDir {dirs 'libs'   // aar目录}

我的:

android {compileSdkVersion 28buildToolsVersion '28.0.3'defaultConfig {applicationId ""minSdkVersion 21targetSdkVersion versionTargetversionCode 1versionName "1.0"multiDexEnabled truetestInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"externalNativeBuild {cmake {cppFlags "-std=c++11 -frtti -fexceptions "abiFilters "armeabi-v7a", "arm64-v8a"arguments "-DANDROID_STL=gnustl_static" //该处添加gnustl_static,使得可读取opencv JNI的库文件。}ndk {abiFilters "armeabi-v7a", "x86"}}}buildTypes {release {zipAlignEnabled false  //开启优化对齐minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {zipAlignEnabled falseminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}externalNativeBuild {cmake {path "CMakeLists.txt"}}sourceSets{main{jniLibs.srcDirs = ['src/main/jniLibs']}}repositories {flatDir {dirs 'libs'   // aar目录}}lintOptions {checkReleaseBuilds false// Or, if you prefer, you can continue to check for errors in release builds,// but continue the build even when errors are found:abortOnError false}
}

(2)在app的build.gradle中

Add the following maven dependency to your project's build.gradle file:

dependencies {compile 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'
}

Optionally, to support individual ABIs:

dependencies {compile 'com.github.wseemann:FFmpegMediaMetadataRetriever-armeabi:1.0.14'compile 'com.github.wseemann:FFmpegMediaMetadataRetriever-armeabi-v7a:1.0.14'compile 'com.github.wseemann:FFmpegMediaMetadataRetriever-x86:1.0.14'compile 'com.github.wseemann:FFmpegMediaMetadataRetriever-mips:1.0.14'compile 'com.github.wseemann:FFmpegMediaMetadataRetriever-x86_64:1.0.14'compile 'com.github.wseemann:FFmpegMediaMetadataRetriever-arm64-v8a:1.0.14'
}

Android 保存视频以及读取视频相关推荐

  1. 视频操作_01视频读写:视频读写+读取视频+保存视频

    1 从文件中读取视频并播放 在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件: 1.创建读取视频的对象 cap = cv.VideoCapture( ...

  2. python 读视频_Python3读取视频保存视频

    使用python3+opencv3.3.1环境将视频流保存为本地视频文件,具体内容如下 1.利用opencv中的VideoCapture类获取视频流的链接,通过cv2的方法得到该视频流的帧数和每帧大小 ...

  3. python使用方法视频-Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  4. python怎么导入视频-Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  5. 用python打开视频_Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  6. 使用MATLAB读取视频并获取视频信息、分帧保存

    题外话:初学MATLAB,是因为跟着老师做项目,与MATLAB机器学习相关,包含了智能信息处理,是从前未接触的领域.因此,想写博客来记录自己的学习进度.老师安排的第一次任务为:用MATLAB读取视频, ...

  7. Python-OpenCV 笔记1 -- 图像与视频的读取、显示、保存

    Python-OpenCV 笔记1 – 图像与视频的读取.显示.保存 一.图片的读取.显示.保存 1.图片读取 原型: imread (filename, flags=None) 参数: filena ...

  8. opencv读取视频并保存为图片

    1.功能: opencv读取指定文件夹中的视频文件,按照一定的间隔截取某些帧,将这些帧图像连续命名,存储在指定文件夹里. 2.代码如下: (1)IplImage #include <stdlib ...

  9. opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...

最新文章

  1. 根据某一列的进行去重的小工具----duplicated.exe
  2. Smartmail外贸CRMBuild1.0版使用说明书
  3. Ubuntu增加(swap)交换分区
  4. AWS发布低延迟互动直播服务
  5. pro git 阅读笔记1 基本操作
  6. jquery遍历节点
  7. 自动化CodeReview - ASP.NET Core请求参数验证
  8. matlab 文本分析工具,MATLAB,Simulink. - Text Analytics , 文本分析工具箱-鈦思科技
  9. ad15图层显示_AD15使用及设置
  10. 阿里菜鸟java后台开发电话面试
  11. 计算机中回收站的作用,windows7回收站的功能与作用
  12. 我国网络营销发展的现状、障碍与对策
  13. 高通安卓关闭WiFi服务不卸载驱动
  14. python第三方库re库基本介绍
  15. 树莓派3B qt+mplayer制作音乐播放器(10)
  16. 贝叶斯分类器算法及案例详解
  17. SAP ABAP开发个别概念理论区分理解
  18. mysql checking_高并发下MySQL出现checking permissions
  19. 苹果全球企业传播副总裁考顿正式退休
  20. Axure 制作iphonex手机壳

热门文章

  1. 大一上学期C语言不熟知识点学习总结
  2. WHQL认证最新申请流程
  3. 高能手办团服务器维护了,高能手办团11月27日更新了什么 11月27日更新维护详情...
  4. 计算机科学 vs 计算机技术
  5. 如何用保险抵御人生中的死亡风险【全攻略】
  6. arduino触须传感器使用方法
  7. 微信小程序标题栏放logo 搜索框
  8. 让人着迷的 STP生成树协议
  9. 集成/信息系统项目管理师学习笔记共享 (1)
  10. deepstream c++ rtsp流输出