Vitamio 视频播放
资料总结
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/
总体感觉,初次接触会比较难理解,花点时间去研究的话,还是比较好懂的,这个框架发展了这么久,现在算是比较成熟了。目前还是面向个人开发者免费。如果有需要的话,可以引用。
资料引用
Vitamio IOS 测试版发布(2013-07-16)
4.0 公测版发布(2013-05-28)
2013-03-13)
播放网络视频缓冲处理
3.0 新手教程
Vitamio项目发展迅猛,官方群突破400位开发者,基于Vitamio的项目突破1000个,使用Vitamio提供优质播放体验的用户超过
5000万。文档是短板,也欢迎大家分享你的Vitamio使用经验,本文将进一步介绍Vitamio的简单使用方法。阅读全文
本地扫描后台服务
MediaPlayer
VitamioInstaller
SDK 2.0 新版发布(2012-08-31)
MediaController
VideoView
MediaStore
Vitamio新版SDK发布在即,文档一直欠缺,接下来的一段时间将陆续补上,后续还会推出开发者指南等系列文章,官网也在改版,帮助开发者更好的使用
Vitamio。本章MediaStore主要用于读取本地视频、音频信息、缩略图用,请参加Vitamio万能播放器系列文章第10篇。阅读全文
FAQ(2012-11-20 )
本地播放 (缩略图、视频信息、视频扫描服务)
Vitamio是团队的诚意之作,我们除了要将VPlayer打造成Android最好的播放器,也要将Vitamio播放组件打造成Android最好
的播放器组件。新版发布内测SDK虽然还有一些问题,但已经具备高可扩展性、便捷性和许多内置实用的功能,后续文章将继续深挖和介绍Vitamio的使用
细节和方法。本章将提供显示缩略图、视频大小等视频信息,并介绍使用Vitamio内置的ContentProvider以及文件扫描服务。阅读全文
在线播放 (在线电视)
成功的产品往往在细节之处也做到极致,产品和项目从使用的角度来看最大的区别我认为也就是细节的处理上。开播视频的目标是产品,前面7篇文章高歌猛进,添
加了很多的功能,也该停下来休整一下,优化一下,也欢迎交流反馈做得不周到的地方。由于开源,大家也可以按照自己的喜好来添加修改不同的功能和细节。阅读全文
新版本的VPlayer由设计转入开发阶段,预计开发周期为一个月,这也意味着新版本的Vitamio将随之发布,开发者们可以和本系列文章一样,先开发
其他功能。本章内容为"在线视频播放列表",集合了主流各大视频网站的手机版,欢迎给"开播视频"反馈改进建议!阅读全文
决定推迟本地播放的一些功能(截图、视频时间、尺寸等),跳过直接写在线播放部分的章节。从Vitamio的介绍可以看得出,其支持http、m3u8等
多种网络协议,本章将编写播放优酷视频的例子。阅读全文
手势控制亮度、音量、缩放
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。
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 10
Class<?> 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 视频播放的更多相关文章
- vitamio视频播放库
vitamio视频播放库 http://www.d evstore.cn/evaluation/testInfo/155-181.html
- Vitamio视频播放
activity代码 package com.hck.player.ui; import io.vov.utils.StringUtils; import io.vov.vitamio.LibsChe ...
- Vitamio视频播放器
前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...
- 非常有用的GitHub链接
平常开发工作中,我经常取Github上搜索项目,Clone下来学习使用,在这个过程中,发现了好多比较好的Github地址,记录下来,分享出去. image 非常有用的GitHub链接(顺序不分先后): ...
- github视频录制播放相关功能-参考
lookingstars/JZVideoDemo 视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo iOS vi ...
- 视频播放-VideoVIew,Vitamio
播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的.这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器.VideoView的用法和 Med ...
- 玩转Android之在线视频播放控件Vitamio的使用
其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaP ...
- Android开发学习之路--基于vitamio的视频播放器(二)
终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...
- Android开发学习之路--基于vitamio的视频播放器(一)
之前也试过vitamio这个库,后来不知道被什么事情给耽搁了,就没继续下去.近来觉得视频还是需要学习一下的,谁让直播那么火呢,就想着写一个简单的视频播放的app先吧.好了那就开始吧,暂时取名为JP ...
随机推荐
- vue笔记v-if
如果ite.type=='培训',显示第一个img, 如果ite.type=='会议',显示第二个img
- html5中的progress兼容ie,制作进度条样式
html5新增的progress标签用处很大,它可以制作进度条,不用像以前那样用css来制作进度条! 一.progress使用方法 progress标签很好使用,他有两个属性,value和max,va ...
- C++封装的全部总结
类 类是对现实生活中一类具有共同特征的事物的抽象 类是面向对象程序设计实现信息封装的基础. 类是一种用户定义类型,也称类类型. 类的实例称为对象. 类的实质是一种数据类型 面向对象原则 以对象为中心, ...
- pdfmake实现中文支持,解决中文乱码问题
引言:当初自己为了在项目中bootstrap-table中实现导出pdf,使用的pdfmake,但是pdfmake默认使用的不是中文字体,实现pdfmake使用中文字体主要就是编译新的vfs_font ...
- python协程和IO多路复用
协程介绍 ...
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目5
2014-04-23 18:42 题目:设计一个在线阅读系统的数据结构. 解法:这题目太大了,我的个亲娘.显然你不可能一次加载一整本书,做到单页纸加载的粒度是很必要的.为了读书的连贯效果,预取个几页也 ...
- 去掉referer信息
<iframe src="auto-refresh.html" width=500 height=500 rel="noreferrer">< ...
- Java基础-4变量与数据类型
变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...
- PoolManager
我用的PoolManager版本是5.5.2的,导入的包总共有三个文件夹:Editor,Plugins,PoolManagerExampleFiles 1.Editor这个文件夹里面的东西,顾名思义, ...
- python multiprocessing.Pool 中map、map_async、apply、apply_async的区别
multiprocessing是python的多进程库,multiprocessing.dummy则是多线程的版本,使用都一样. 其中都有pool池的概念,进程池/线程池有共同的方法,其中方法对比如下 ...