认识Vitamio
Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐。到目前,全球已经有超过 一万 种应用在使用 Vitamio,覆盖用户超过 5亿 。Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还可以在 Android 与 iOS 上跨平台支持 MMS, RTSP, RTMP, HLS(m3u8) 等常见的多种视频流媒体协议,包括点播与直播。另外值得一说的是,Vitamio是国人开发的,在国外得到了广泛使用,国内也有一些比如:VPlayer、熊猫影音、321影音等。
流媒体支持
Vitamio 支持各种常见的流媒体协议,可以点播或者直播音频和视频,例如如下常见协议均能无缝支持:MMS、RTSP (RTP, SDP), RTMP、HTTP progressive streaming、HLS - HTTP live streaming (M3U8)
音频和视频格式
Vitamio 使用了 FFmpeg 做为媒体解析器和最主要的解码器,同时开发了针对不同移动平台的硬解码方案,能够完美支持 H.264/AVC、H.263、 MPEG4 等常见的视频编码,覆盖上百种多媒体格式。下表只是一些最常见的视频格式支持,除特殊标明,全部支持硬件加速:DivX/Xvid、WMV (一般只有软解码)、FLV、TS/TP、RMVB (只有软解码)、MKV、MOV、M4V、AVI、MP4、3GP
字幕支持
Vitamio 对字幕的支持很优秀,包括各种常见外挂字幕与很多视频格式的内嵌字幕,同多个字幕等特性的支持也非常完善。比如:SubRip(.srt)、Sub Station Alpha(.ssa) / Advanced Sub Station Alpha(.ass)、SAMI(.smi/.sami)、MicroDVD(.sub/.txt)、SubViewer2.0(.sub)、MPL2(.mpl/.txt)、Matroska (.mkv) 内置字幕
更多特性
除了上面列出的常见功能之外,Vitamio 还做了相当多人性化的工作:多音轨与字幕支持、细致的 CPU 与 GPU 优化、支持手机到平板各种设备、流媒体播放缓冲支持、播放画面比例大小随手调节、自动文字编码检测,拒绝乱码。
Vitamio有什么优点
a)强大。支持超多格式视频和网络视频播放。(不强大免费也没用,所以排在第一位)
b)个人免费。(但企业使用需要购买授权)(Google Play上已有多款基于Vitamio的收费播放器,大家可以在里面搜索Vitamio关键字)
c)无缝集成。仅将Vitamio的Library工程引入即可使用,无需另外下载安装解码包(Vitamio的上一个版本是需要单独下载安装解码包)。
d)使用简单。调用非常简单,方便使用。
e)自由定制。播放界面的代码已完全开放,方便自定义播放界面、进度条等。
基础知识
Android平台支持下述网络协议的音视频播放
1.实时流传输协议RTSP(实时传输协议RTP,会话描述协议SDP)
2.Http流式传输(串流传输分两种:progressive streaming和real time streaming, progressive好处是透过HTTP来传输,品质较好,只能单点播送Unitcast)
3.HTTP Live Streaming协议
Vitamio框架说明
Vitamio是一款Android与iOS平台上的全能多媒体开发框架,全面支持硬件解码与GPU渲染。Vitamio完整下载包是Vitamio-iOS-version.zip解压后包含Demo,Vitamio,Doc三个部分,解压后的目录结构,如下说明所示:
- Vitamio/ 该目录存放 Vitamio SDK 的头文件和静态库(.a)文件.
- Doc/ 该目录存放用户手册和类参考文档.
- Demo/ 该目录主要存放1个iOS示例工程, 用于帮助开发都快速了解如何使用SDK.
在新建项目后需要完成一下操作,选择Build Setting | Linking | Other Linker Flags将该选项的Debug/Release键都配置为ObjC.添加依赖
- AVFoundation.framwork 音视频播放基本工具
- AudioToolbox.framwork 音频控制API
- CoreGraphics.framwork 轻量级2D渲染API
- CoreMedia.framwork 音视频低级API
- CoreVideo.framwork 视频低级API
- Foundation.framwork 基本工具
- MediaPlayer.framwork 系统播放器接口
- OpenGLES.framwork 3D图形渲染API
- QuartzCore.framwork 视频渲染输出需要
- UIKit.framwork 界面API
- libbz2.dylib 压缩工具
- libz.dylib 压缩工具
- libstdc++.dylib C++标准库
- libiconv.dylib 字符编码转换工具
配置target,在Xcode Build Phases | Link Binary With Libraries中添加以上所列框架和库,导入Vitamio SDK,把Vitamio SDK的头文件夹(include)和静态库lib*.a拖入Xcode工程中,这样准备工作就可以开始了。播放视频的接口来自于Vitamio.m,首先要先创建播放器mediaPlayer = [VMediaPlayer sharedInstance]:[mediaPlayer setupPlayerWithCarrierView:self.PlayerView withDelegate:self],创建播放器后加载视频的URL并准备播放,[mediaPlayer setDataSource:self.video.videoPath header:nil],[mediaPlayer prepareAsync];这样只要输入的URL正确就可以正确地播放了,这时候就可以使用协议接口了,同时记录时间点,这个时间点是视频开始准备时间,
- (void)mediaPlayer:(VMediaPlayer didPrepared:(id)arg);当准备完成时调用这个方法,一般视频开始也是在这个方法中完成,同时可以记录这个时间点,这是视频准备完成的时间,可以和开始时间计算视频准备的时间;
- (void)mediaPlayer:(VMediaPlayer *)player playbackComplete:(id)arg;当视频播放完成时调用这个方法,在这个方法中进行设置下一个视频;
- (void)mediaPlayer:(VMediaPlayer *)player downloadRate:(id)arg;这个方法会显示加载的速度,将播放过程中的所有数据记录下来,播放结束后进行排序可以获取最大速度和最小速度;
- (void)mediaPlayer:(VMediaPlayer *)player bufferingStart:(id) arg;当缓冲开始时调用这个方法,将这个时间点记录下来,方便以后计算;
- (void)mediaPlayer:(VMediaPlayer *)player bufferingUpdate:(id)arg;当缓冲改变时调用这个方法
- (void)mediaPlayer:(VMediaPlayer *)player bufferingEnd:(id)arg;当缓冲结束时调用这个方法,并将这个时间点记录下来,和之前记录的缓冲开始时间进行计算可以得到首次缓冲时间和总缓冲时间
- (void)mediaPlayer:(VMediaPlayer *)player cacheNotAvailable:(id)arg;当缓存失效时调用这个方法;
- (void)mediaPlayer:(VMediaPlayer *)player cacheStart:(id)arg;当缓存开始时调用这个方法;
- (void)mediaPlayer:(NMediaPlayer *)player cacheUpdate:(id)arg;当缓存改变时调用这个方法;
- (void)mediaPlayer:(VMediaPlayer *)player cacheSpeed:(id)arg;获取缓存速度;
- (void)mediaPlayer:(VMediaPlayer *)player cacheComplete:(id)arg;当缓存完成时调用这个方法;
视频播放的局限性
目前Vitamio框架是适用于网络状态良好的情况,要是网络状态不好就无法得到视频信息,有时候播放网络视频也会出现错误情况,这个播放器总体来说不是很稳定,可能将来需要换VLC来使用。
=========================并不华丽的分割线===============================
参考资料