视频框架Vitamio学习
概述
开发公司一个乐视TV项目时,本来有个播放视频广告的功能,到最后不了了之。虽然没有在项目中做要求,但是这个点子还是激起了我研究多媒体的好奇心。刚好后面遇到一款比较喜欢的视频APP魔力盒,上面视频播放的体验及整个产品的设计都是我喜欢的类型,于是反编译了一下,发现其中用到了一个视频框架Vitamio,(还有一个很流畅的下拉刷新框架hardmark), 然后,一番百度google,发现居然是国内团队开发的框架,而且应用已经很广泛。所以研究了下,自己写了个demo。
资料总结
Vitamio官网:https://www.vitamio.org
源码地址:https://github.com/yixia/VitamioBundle
最佳教程:大名鼎鼎的农民伯伯博客http://www.cnblogs.com/over140/category/409230.html,农民伯伯应该是这个开发团队的一员。
VPlayer好像是这个框架的最佳产品,不过看到官网的一些合作伙伴,如果确实是用到这个框架的话,好像也很不错(可以反编译看看,学习学习~)
下面是农名伯伯开发教程实现的产品的源码(下载测试后,可以运行,扫描本地视频好像没找到文件,仔细找下原因应该是可以解决的,项目用到的内容还算是比较常规的吧,没有比较难懂的地方,也可能是我没有研究那么细):
项目地址:http://code.taobao.org/p/oplayer
SVN地址:http://code.taobao.org/svn/oplayer/
总体感觉,初次接触会比较难理解,花点时间去研究的话,还是比较好懂的,这个框架发展了这么久,现在算是比较成熟了。目前还是面向个人开发者免费。如果有需要的话,可以引用。
资料引用
iteye上面有几篇
相关知识点
项目中有个获取视频缩略图的功能,在VPlayer的源码中好像注释掉了,从API 8开始,现有Android API里面就有了一个用于实现相关功能的类
android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。
publicstatic Bitmap createVideoThumbnail (String filePath, int kind)
第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND。
- 第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。
- 第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。
extractThumbnail(Bitmap source, int width, int height, int options) extractThumbnail(Bitmap source, int width, int height)
这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取内存卡内图片的缩略图。
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);
从API 10开始新增一类MediaMetadataRetriever可以用来获取媒体文件的信息
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource("/sdcard/33.mp4");
Bitmap bitmap = mmr.getFrameAtTime();
image.setImageBitmap(bitmap);
System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+"");
System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+"");
mmr.release();
MediaMetadataRetriever可以获取视频任何一帧的缩略图。
publicstatic Bitmap createVideoThumbnail(String filePath) { //MediaMetadataRetriever is available on API Level 8//but is hidden until API Level 10Class<?> clazz = null; Object instance = null; try { clazz = Class.forName("android.media.MediaMetadataRetriever"); instance = clazz.newInstance(); Method method = clazz.getMethod("setDataSource", String.class); method.invoke(instance, filePath); //The method name changes between API Level 9 and 10.if (Build.VERSION.SDK_INT <= 9) { return (Bitmap) clazz.getMethod("captureFrame").invoke(instance); } else { byte[] data = (byte[]) clazz.getMethod("getEmbeddedPicture").invoke(instance); if (data != null) { Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); if (bitmap != null) return bitmap; } return (Bitmap) clazz.getMethod("getFrameAtTime").invoke(instance); } } catch (IllegalArgumentException ex) { //Assume this is a corrupt video file} catch (RuntimeException ex) { //Assume this is a corrupt video file.} catch (InstantiationException e) { Log.e(TAG, "createVideoThumbnail", e); } catch (InvocationTargetException e) { Log.e(TAG, "createVideoThumbnail", e); } catch (ClassNotFoundException e) { Log.e(TAG, "createVideoThumbnail", e); } catch (NoSuchMethodException e) { Log.e(TAG, "createVideoThumbnail", e); } catch (IllegalAccessException e) { Log.e(TAG, "createVideoThumbnail", e); } finally { try { if (instance != null) { clazz.getMethod("release").invoke(instance); } } catch (Exception ignored) { } } returnnull; }
视频框架Vitamio学习相关推荐
- android vitamio封装,Android视频框架Vitamio构建自己的通用播放器
Vitamio是Android和iOS平台上的全方位多媒体开发框架,完全支持硬件解码和GPU渲染. Vitamio功能强大手机上的万能播放器,可以平滑播放720P或1080P HD MKV,FLV手机 ...
- 视频框架 Vitamio 使用教程+部分心得 (三) 视频控制器MediaController + 部分中文API
转载注明出处: http://blog.csdn.net/u010181592/article/category/5893483 文章出自 我不只是看客/NotLooker的博客 先列出参考资料: V ...
- 视频框架 Vitamio 使用教程+部分心得(一)准备
欢迎转载,转载请注明出处:http://blog.csdn.net/u010181592 本文出自 我不只是看客的博客/NotLooker 先标注参考资料 Vitamio 官网:http://www. ...
- Android中Vitamio视频框架学习
概述 开发公司一个乐视TV项目时,本来有个播放视频广告的功能,到最后不了了之.虽然没有在项目中做要求,但是这个点子还是激起了我研究多媒体的好奇心.刚好后面遇到一款比较喜欢的视频APP魔力盒,上面视频播 ...
- vitamio视频框架使用详解
概述 开发公司一个乐视TV项目时,本来有个播放视频广告的功能,到最后不了了之.虽然没有在项目中做要求,但是这个点子还是激起了我研究多媒体的好奇心.刚好后面遇到一款比较喜欢的视频APP魔力盒,上面视频播 ...
- android视频播放框架Vitamio
概述 开发公司一个乐视TV项目时,本来有个播放视频广告的功能,到最后不了了之.虽然没有在项目中做要求,但是这个点子还是激起了我研究多媒体的好奇心.刚好后面遇到一款比较喜欢的视频APP魔力盒,上面视频播 ...
- ICLR 2020丨V4D:视频级别表示学习的四维卷积神经网络
深度学习领域的顶级会议 ICLR 2020(International Conference on Learning Representations,国际表征学习大会)将于 4 月 26 日正式线上开 ...
- 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- mmrotate旋转目标检测框架的学习与使用
目录 前言 一.环境配置 1. 下载checkpoint文件 2. 运行demo 二.制作自己的数据集 1. 标注数据 2. 标签格式转换 3. 可视化数据集 4. 数据集裁剪 三. 修改配置文件 1 ...
最新文章
- 盘点3个提升技能的AI项目,NLP/CV/BI,3个方向
- Windows Sockets2 详解2——堵塞与非堵塞模式
- 3个月带你通关Go语言
- 利用Hyperledger Fabric开发你的第一个区块链应用
- IntelliJ IDEA修改项目的根目录名称_修改包目录的名称_修改模块名称_修改项目名称
- mysql怎么用sb文件_初识mysql数据库
- 智能一代云平台(二十三):Mycat高可用的探索
- 解决genemotion模拟器冲突导致的Android Studio无法启动ADB的问题
- 默认文件夹为空,如何从Microsoft Edge下载收藏夹
- Android ueventd浅析
- 食品行业仓储条码管理系统解决方案
- 五色电阻在线计算机,色环电阻(5色环在线电阻计算器)
- 计算机管理设置透明,教你把win10任务栏透明设置
- 高中数学三角函数公式大全及其易错题型总结
- apk编辑器android源码,APK编辑器
- Java使用正则表达式从字符串中提取 IP 地址
- JAVA—— MySQL高级(二)
- vue 安装不上,报错,解决办法如下
- 31w赛题奖金!当 AI for Science 撞上“先导杯”,会擦出什么样的火花?
- 精英反向学习带扰动因子的混沌蚁狮算法-附代码