先简单说一下本人使用Vitamio播放器的体会:
iOS端在网上很少有人对Vitamio做介绍,今天我简单的描述一下。我在三个项目中使用了这个播放器,整体来说用得多开心的!它支持的格式也很多(看简介)。自从iOS11后我的三个项目瘫痪,我是直播项目全是播放rtmp的流,iOS11后播放rtmp的流只有声音竟然没有画面了!联系Vitamio居然说研发人员最近忙不能确定什么解决,感觉只做android不搭理iOS了。然后我就忙到现在替换播放器、直到今天还有一个项目没替换完! 如果你播放的不是流而是视频:mp4、mkv、f lv等都是没问题的。如果是rtmp流的就只有等Vitamio修复吧! 该进入主题了。。。。。。
一,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 支持各种常见的流媒体协议,可以点播或者直播音频和视频,例如如下常见协议均能无缝支持:
- 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 SDK 的头文件文件夹(include)和静态库 lib*.a 拖入 Xcode 工程中.
添加依赖
Vitamio SDK 依赖的系统框架和系统库如下:
- 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 字符编码转换工具
在您将要使用的Controller中声明使用 VMediaPlayerDelegate 协议
使用类 VMediaPlayer 的类方法 +sharedInstance 获取播放器共享实例, 然后调用实例 方法 -setupPlayerWithCarrierView:withDelegate: 来注册使用播放器.
[mMPayer setVideoFillMode:VMVideoFillModeCrop];
[mMPayer setVideoFillScale:false];
[mMPayer setupPlayerWithCarrierView:self.view withDelegate:self];
self.videoURL = [NSURL URLWithString:videoUrl];
[mMPayer setDataSource:self.videoURL header:nil];
[mMPayer prepareAsync];
// 当'播放器准备完成'时, 该协议方法被调用, 我们可以在此调用 [player start]
// 来开始音视频的播放.
- (
void
)mediaPlayer:(VMediaPlayer *)player didPrepared:(id)arg
{
[player start];
}
// 当'该音视频播放完毕'时, 该协议方法被调用, 我们可以在此作一些播放器善后
// 操作, 如: 重置播放器, 准备播放下一个音视频等
- (
void
)mediaPlayer:(VMediaPlayer *)player playbackComplete:(id)arg
{
[player reset];
}
// 如果播放由于某某原因发生了错误, 导致无法正常播放, 该协议方法被调用, 参
// 数 arg 包含了错误原因.
- (
void
)mediaPlayer:(VMediaPlayer *)player error:(id)arg
{
NSLog(@
"NAL 1RRE &&&& VMediaPlayer Error: %@"
, arg);
}
- (
void
)mediaPlayer:(VMediaPlayer *)player videoTrackLagging:(id)arg
NSLog(@
"NAL 1RRE &&&& VMediaPlayer Error: %@"
, arg);
- (
void
)mediaPlayer:(VMediaPlayer *)player bufferingUpdate:(id)arg
NSLog(@
"NAL 1RRE &&&& VMediaPlayer Error: %@"
, arg);
- (NSString *)playDuration:(long)num{
NSString *Duration = @"";
if (num == 0) {
Duration = @"00:00";
}else{
NSInteger seconds = num / 1000;
NSInteger hour = seconds / 3600;
NSInteger min = (seconds - hour*3600) / 60;
NSInteger sec = (seconds - hour*3600) - min * 60;
if (hour > 0)
{
Duration = [NSString stringWithFormat: @"%.2ld:%.2ld:%.2ld", (long)hour, (long)min, (long)sec];
}
else
{
Duration = [NSString stringWithFormat: @"%.2ld:%.2ld", (long)min, (long)sec];
}
}
return Duration;
}
放国庆了很激动,就写到这里了!哈哈 我有对播放器封装为控件有需要的可以扣我QQ:3376512101
放假回来我会再给大家分享两个强大的播放器。敬请期待。。。。。