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 ...
随机推荐
- 【c学习-3】
---恢复内容开始--- #include<stdio.h> int main(){ ]={,,,,}; ; ;i<=;i++){ printf("%d\n",a ...
- get请求中文乱码问题
Get中文乱码解决 Get请求类型: <form action="${pageContext.request.contextPath}/addArtical.action" ...
- tcl之控制流-switch
- Git版本控制使用方法入门教程
1. 概述 对于软件版本管理工具,酷讯决定摒弃CVS而转向Git了. 为什么要选择Git? 你真正学会使用Git时, 你就会觉得这个问题的回答是非常自然的.然而当真正需要用文字来回答时,却觉得文字好像 ...
- .c和.h区别
本质没有区别: .h是头文件 一般情况下下边内容放在.h文件中 宏定义 结构体,联合,枚举声明 typedef声明 外部函数声明 全局变量声明 .c是程序文件 一般情况下下边内容放在.h文件中 内含函 ...
- Linux两种方式rd.break和init重置root管理员密码
centos7/rhel7进入单用户方式和重置密码方式发生了较大变化,GRUB由b引导变成了ctrl+x引导. 重置密码主要有rd.break和init两种方法. rd.break方法: 1.启动的时 ...
- 大数据江湖之即席查询与分析(下篇)--手把手教你搭建即席查询与分析Demo
上篇小弟分享了几个“即席查询与分析”的典型案例,引起了不少共鸣,好多小伙伴迫不及待地追问我们:说好的“手把手教你搭建即席查询与分析Demo”啥时候能出?说到就得做到,差啥不能差人品,本篇只分享技术干货 ...
- 5,Linux之文档与目录结构
Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来 ...
- The GNU C Library
Any Unix-like operating system needs a C library: the library which defines the ``system calls'' and ...
- Kinect关于PlayerIndex和SkeletonId之间的关系。
项目中要锁定玩家骨骼后抠图, 一时没有灵感.google 关键词: the ralationship about skeletonid and playerindex. 结论: Player Segm ...