iOS Vitamio播放器的使用

先简单说一下本人使用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) 内置字幕

==================================
接下来去下载SDK地址:https://github.com/yixia/Vitamio-iOS/tree/master/Demo

导入 Vitamio SDK
把 Vitamio SDK 的头文件文件夹(include)和静态库 lib*.a 拖入 Xcode 工程中.
配置Target链接参数
选择 Build Settings | Linking | Other Linker Flags, 将该选项的 Debug/Release 键都配置为 -ObjC .
添加依赖
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 = [VMediaPlayer sharedInstance];
[mMPayer setVideoFillMode:VMVideoFillModeCrop];
[mMPayer setVideoFillScale:false];
[mMPayer setVideoFillAspectRatio:false];
[mMPayer setupPlayerWithCarrierView:self.view withDelegate:self];
    给播放器传入要播放的视频URL, 并告知其进行播放准备
self.videoURL = [NSURL URLWithString:videoUrl];
[mMPayer setDataSource:self.videoURL header:nil];
[mMPayer prepareAsync];
你在退出页面或者重新加载视频的时候你可能都需要调用一下两个属性不然会报错哈。
[mMPalyer reset];
[mMPalyer unSetupPlayer];

    实现 VMediaPlayerDelegate 协议, 以获得'播放器准备完成'等通知
    这里列出几个常用的,这几个应该就会满足你的需求。
// 当'播放器准备完成'时, 该协议方法被调用, 我们可以在此调用 [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);
}
// buffering停止会调用
- ( void )mediaPlayer:(VMediaPlayer *)player bufferingUpdate:(id)arg
{
     NSLog(@ "NAL 1RRE &&&& VMediaPlayer Error: %@" , arg);
}
播放器空间需要你自己完善:
获取视频时长:mMpayer.getDuration 它获取的事毫秒你需要转换一下;
获取播放进度时间: mMpayer.getCurrentPosition 这里也是毫秒;
如果你写进度条时候:设置最大值、或者value 你都需要除以1000.0 ;

这里给出一个【00:00:00】这样格式转换时长的函数:
- (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

放假回来我会再给大家分享两个强大的播放器。敬请期待。。。。。


猜你喜欢

转载自blog.csdn.net/YJ909364/article/details/78139729