Vitamio介绍及使用
一、Vitamio介绍
1.1 Vitamio是什么?
Vitamio是Android平台视音频播放组件,支持播放几乎格式的视频以及主流网络视频流(http/rtsp/mms等),详细的中文介绍: 这里。
Vitamio官网:http://vitamio.org/
Vitamio微博:http://weibo.com/vitamio
VPlayer官网:http://vplayer.net
Vitamio豆瓣:http://site.douban.com/145815/
1.2 关于Vitamio的名字(摘自豆瓣官网)
Vitamio 来源于英文单词Vitamin(维他命),希望Vitamio对于安卓多媒体开发者的重要性,就像Vitmain之于人体一样不可缺少。
The name of Vitamio comes from Vitamin, We hope the importance of Vitamio for Android multimedia developers as indispensable as Vitamin for human.
1.3 关于Vitamio的由来(摘自豆瓣官网)
我 们是一拨葱名勤劳的Coder,我们憎恶烦冗的Android多媒体程序开发,从版本升级到不同设 备,刚坑娘的测试完三星,htc,sony,操,又拿来了v880;我们认为这些讨厌的玩意注定会让我们的生活变得愚蠢,新技术神马的也是没有时间去研究 ,最令人发指的是不能专注于实现自己的创意APP。
经常沉溺于拯救世界的精神世界,平凡的Coder也能变奇葩。
作为最早研究Android媒体工具的团队,我们决定把我们的Vitamio框架免费出去,助力安卓多媒体开发者实现自己的创意梦想 :D
各位少年,我们是来自中国的高品质多媒体框架噢。
第一版发布日期:2011年9月发布
1.4 Vitamio相关数据
从2011年9月发布至今,用户下载量超过2000W,使用Vitamio的开发者超过1500位,使用过Vitamio产品有
国内:搜狐视频,91熊猫影音(网龙),海底捞,歌华有限 等
国
外:Pak TV Global,Madani Channel,Deen TV,myTRANS,FPlayer,AnimeFTW.tv,Radio
Nepali,GNC LiveWell,MagicTV Streaming Player Free,Hispan TV Mobile,TV
Italy等
1.5 Vitamio有什么优点?
a). 强大。支持超多格式视频和网络视频播放。(不强大免费也没用,所以排在第一位)
b). 个人免费。(但企业使用需要购买授权)
(Google Play上已有多款基于Vitamio的收费播放器,大家可以在里面搜索Vitamio关键字)
c). 无缝集成。仅将Vitamio的Library工程引入即可使用,无需另外下载安装解码包(Vitamio的上一个版本是需要单独下载安装解码包)。
d). 使用简单。调用非常简单,方便使用。
e). 自由定制。播放界面的代码已完全开放,方便自定义播放界面、进度条等。
d). 持续更新。2012-7-9已发布新一版的内测版本,预计8月初能发布下一个版本。
e). 服务跟进。Vitamio官方QQ群(171570336),提供开发者交流和讨论。论坛还在开发中。
1.6 Vitamio背后的团队
Vitamio与VPlayer属同一个团队、同一个公司(yixia.com)。我们在北京,目前团队有5名成员,4名开发,1名设计师,以开发VPlayer为主,Vitamio为辅 :)
1.7 Vitamio与VPlayer什么关系?
VPlayer基于Vitamio开发,所以VPlayer能播放的Vitamio也能。
OPlayer基于Vitamio开发,作为推广Vitamio的使用例子和示范产品,完全开放源代码。虽是业余之作,仍以正式发布到市场为目标。
1.8 Vitamio与ffmpeg
FFmpeg提供软件解码器和多路输出(demuxers)。Vitamio使用LGPLv2.1许可下FFmpeg的代码,代码可以从这里下载。
https://bitbucket.org/ABitNo/ffmpegandroid
二、Vitamio下载和运行
2.1 下载
Vitamio 3.0下载。(2012-10-23更新)
OPlayer 3.0下载。(2012-10-24更新,没有taocode账户的请注册一个)
2.2 运行例子
解压后两个项目:VitamioBundle和Test,其中VitamioBundle是Library(关于Android Library参见这里),运行Test例子即可。注意:
1). 例子使用API 16,没有安装升级最新Android 4.1 会报错,大家设置里降低至API 14(Android 4.0) 或API 15(Android 4.0.3) 即可。
2). 工程文件并没有gen文件夹,请大家自行加上。
3). 先编译VitamioBundle,后编译Test。如果仍然有错误,把工程Clean一下,依次再编译一下。
4). 修改VideoViewDemo视频路径为你要测试的视频路径。注意,本地视频用setVideoPath方法,播放网络视频用setVideoURI方法。
2.3 整合例子
不希望以Library的方式引用Vitamio,可以直接把VitamioBundle里所有的类、资源拷贝至目标项目。注意src、libs、res目录下的都要拷贝过去,还有AndroidManifest.xml中的配置。
成功整合例子,大家可以看一下OPlayer的结构。
2.4 自定义InitActiviy,即正在解压解码包进度条界面。
这里给出InitActivity代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public class InitActivity extends Activity { public static final String FROM_ME = "fromVitamioInitActivity" ; public static final String EXTRA_MSG = "EXTRA_MSG" ; public static final String EXTRA_FILE = "EXTRA_FILE" ; private ProgressDialog mPD; protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); new AsyncTask<Object, Object, Object>() { protected void onPreExecute() { mPD = new ProgressDialog(InitActivity. this ); mPD.setCancelable( false ); mPD.setMessage(getString(getIntent().getIntExtra(EXTRA_MSG, R.string.vitamio_init_decoders))); mPD.show(); } @Override protected Object doInBackground(Object... params) { VitamioConnection.initNativeLibs(getApplicationContext(), getIntent().getIntExtra(EXTRA_FILE, R.raw.libarm), new VitamioConnection.OnNativeLibsInitedListener() { @Override public void onNativeLibsInitCompleted(String libPath) { Log.d( "Native libs inited at " + libPath); uiHandler.sendEmptyMessage(0); } }); return null ; } }.execute(); } private Handler uiHandler = new Handler() { public void handleMessage(Message msg) { mPD.dismiss(); Intent src = getIntent(); Intent i = new Intent(); i.setClassName(src.getStringExtra( "package" ), src.getStringExtra( "className" )); i.setData(src.getData()); i.putExtras(src); i.putExtra(FROM_ME, true ); startActivity(i); finish(); } }; } |
代码说明:
主要是VitamioConnection.initNativeLibs,大家自己写一个初始化的界面即可,线程里调用这个代码即可。
三、Vitamio问题汇总
3.1 官网怎么打不开?
由于vplayer.net、vov.io等几个网站都是我们部门自己维护的,目前就一人再改,出点问题来不及弄,你懂的。
3.2 case : 为什么一直停在正在解码的解码?
case : Couldn't load vinit: findLibrary returned null
case : Not allowed to bind to service Intent (act=io.vov.vitmio.IVitamioService)
case : io.vov.vitmio.VitamioInstaller$VitamioNotFoundException
case : java.lang.UnsatisfiedLinkError: Library /data/data/null/libs/libvplaer.so not found
defalut : //各种运行不了的问题
return 基本就一个问题,2012-7-9发布的Vitamio测试版本无法共存的问题。无法与VPlayer共存、无法与其他Vitamio共存,需要卸载干净了。注意改一下包名(package)就是一个新的APK,需要把之前的卸载掉。
3.3 视频/视频流(rtp、rtsp等)播放不了。
可能存在以下几种情况:
a). 视频本身就存在问题,你可以用其他播放器播放一下,是否能正常播放。
b). 本地网速不给力/设备本事配置过低,这个没办法
c). 视频源卡,本事带宽不够,直接访问也很慢,这个也没办法
d). 用VPlayer与Vitamio同样都有问题,而其他播放器没事,这个可能是我们的问题,我们还在持续改进,尤其是播在线视频这部分,这个可以等新版发布 :)
e). 等不及了,那就把视频测试地址和简要说明发给我们(vplayer@yixia.com),我们尽可能的抽时间来回复,感谢!
3.4 Vitamio最低支持的Android版本
目前我们在运行的项目最低支持Android 2.1,示例工程选的Android API Level 是4.1,但不代表只支持4.0以上,大家可从AndroidManifest.xml中看得出:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
如果编译无法运行的话,把VitamioBundle项目下res/values-v11和values-v14删掉即可,其他部分稍作改动即可。
3.5 为什么会弹出提示框要求安装Vitamio Plugin
因为你下载和使用的是旧版的Vitamio,请卸载干净后下载2012-7-9日发布的版本,请看本文 2.1 下载。
3.6 是否支持硬解码?
目前支持硬解码这部分不是很成熟,也不稳定,暂时不提供。
3.7 什么时候发布新版本?
诶,,,请关注我们官方微博(http://weibo.com/vitamio)!!目前集中精力再弄VPlayer,新版顺利上线后应该能加快Vitamio的发布速度,所以大家可以先用VPlayer来测试。
3.8 E/Vitamio(1557): java.io.FileNotFoundException: No content provider: (2012-8-6)
这个不是错误,是正常的处理。现在播放视频是这样做的:先把 URL 当做一个 ContentProvider 来打开,如果打不开,就直接当做 URL 来打开
3.9 Vitamio支持哪些指令集的CPU?(2012-09-07)
ARMv6、ARMv6 VFP、ARMv7 VFPV3、ARMv7 NEON(注意:2012-8-31发布的版本不支持ARMv6的CPU,VPlayer已经不支持,但下次发版Vitamio会加上)
3.10 播放网络视频突然中断的问题
可能是视频网站做了限制,加入了一些不能播的地址,目前Vitamio的处理是播不了就直接关闭了,后续版本会改进,直接跳过。
3.11 拖动进度条出现回帧现象(本地播放,比如,拖到到1:20,但是播放时,跳到1:15) 【2012-11-20 新增】
这是正常现象,不是播放器的问题。默认seek要到最近的关键帧,不能保证任何时间点上都有关键帧 。除非你是intra-only 的编码方式 。(——来自GoogleGeek)
四、已知问题和注意事项(新版指2012-8-31发布的版本)
4.1 混淆工程时注意,需要忽略vitamio里面的类库!(2012-8-1 update)
1
2
|
-keep class io.vov.utils.** { *; } -keep class io.vov.vitamio.** { *; } |
4.2 不能在包含项目里面使用io.vov.vitamio.provider.MediaProvider
否则如果安装了VPlayer,会报冲突的错误无法安装。也就是说,可以直接使用VPlayer的MediaProvider,或者自己写扫描服务,但是名字不能相同。
五、其他
5.1 调用VPlayer来播放视频的代码:
1
2
3
4
5
6
7
8
|
private void startPlayer(String url, String title) { Intent i = new Intent(); i.setComponent( new ComponentName( "me.abitno.vplayer.t" , "me.abitno.vplayer.VideoActivity" )); i.setAction( "me.abitno.vplayer.action.VIEW" ); i.setData(Uri.parse(url)); i.putExtra( "displayName" , title); startActivity(i); } |
Vitamio介绍及使用的更多相关文章
- Android视频媒体相关,VideoView和开源框架vitamio
虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,但是Vitamio的确强大到没朋友! Vitamio 是一款 An ...
- 简要介绍如何集成Vitamio安卓版SDK
1.下载VitamioBundle的最新稳定,这里下载的是最新版4.2.2. 2.解压缩后,导入 Vitamio 库工程(即vitamio)和Demo工程(即vitamio--sample)到 Ecl ...
- Android之万能播放器解码框架Vitamio的介绍及使用
一.简介 Vitamio能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还可以在Android 与 iOS 上跨平台支持 MMS, RTSP, R ...
- Vitamio 多媒体框架 介绍
功能 Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染.Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐.到目前 ...
- Vitamio
前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...
- GitHub上排名前100的Android开源库介绍(来自github)
本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...
- GitHub开源库排名一百的简单介绍,值得收藏!
GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub ...
- 玩转Android之在线视频播放控件Vitamio的使用
其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaP ...
随机推荐
- PHP成随机字符串
生成随机字符串 /** * 随机字符串 * @param int $len * @return string */ function randomStr($len = 32) { $chars = & ...
- 关于对GitHub的使用
什么是GitHub? GitHub是版本控制和协作的代码托管平台.它可以让你在其他人在任何地方一起工作. 本文主要向您介绍GitHub essentials,如存储库,分支,提交和合并请求.将您创建自 ...
- MySQL查询优化 对not in 、in 的优化
因为 not in不走索引,所以不在不得已情况下,就不要使用not in 下面使用 join 来替代not in 做查询 select ID from A where ID not in (selec ...
- 【机器学习算法基础+实战系列】KNN算法
k 近邻法(K-nearest neighbor)是一种基本的分类方法 基本思路: 给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例多数属于某个类别,就把输 ...
- Dropping Balls(小球下落)
紫书P148,例题6-6 Sample Input 4 2 3 4 10 1 2 2 8 128 Sample Output 12 7 512 3 255 这应该不仅仅是一棵完全二叉树,题目中说保证所 ...
- Hbase物理存储
物理模型 每个column family存储在HDFS上的一个单独文件中,空值不会被保存. Key 和 Version number在每个column family中均有一份: HBase为每个值维护 ...
- centos使用--rpm和yum的关系以及基本用法
1 RPM包 RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的"添加/删除程序" rpm 执行安装包 二进制包(Binar ...
- 大中型 UGC 平台的反垃圾(anti-spam)工作
本文来自网易云社区 随着互联网技术的日渐发展,相继诞生了垂直社区.社交平台.短视频应用.网络直播等越来越多样的产品.但在内容爆炸式增长的同时,海量UGC中也夹杂着各种违规垃圾信息,包括垃圾广告.诈骗信 ...
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->prope ...
- 这个写法会出什么问题: @property (copy) NSMutableArray *array;
因为copy策略拷贝出来的是一个不可变对象,然而却把它当成可变对象使用,很容易造成程序奔溃 //如:-[__NSArrayI removeObjectAtIndex:]: unrecognized s ...