1 概念说明

直播:直播的视频源是用户实时推送的。因此,用户停止推送后,播放端的画面也会随即停止,而且由于是实时直播,所以播放器在播直播的时候是没有进度条的。

2 接入准备

2.1 成为开发者

申请开通微吼云账号,提供用户资料,微吼服务人员在后台为用户开通平台账号,账号开通后,用户即可登录,成为一名开发者。

2.2 创建应用

登录微吼云平台后,控制台选择应用管理,进入应用管理页面点击创建应用,根据页面提示信息,完成应用创建。应用创建完成,您可以在控制台界面找到在应用管理界面您可以找到 AppID。

2.3 添加服务

应用创建完成后,默认开通直播服务,在直播服务下直播管理的【直播配置】页面查看AppID

2.4 SDK下载

SDK下载

3 工程配置

3.1 支持平台

  • SDK支持iOS 8.0以上系统

3.2 开发环境

  • Xcode 8或更高版本
  • OS X 10.10或更高版本

3.3 Xcode工程设置

下面通过一个简单的iOS Application工程,说明如和在Xcode工程中配置SDK。

3.3.1 拷贝SDK文件

在本例中,新建一个名字叫做VHSDKDemo的iOS工程,将下载下来的文件夹拷贝至工程目录。目录结构如下图所示:

3.3.2 添加库和Framework

libc++.tbd
libz2.1.0.tbd
libicucore.tbd
libz.tbd
libiconv.tbd
CoreTelephony.framework
MediaPlayer.framework
AVFoundation.framework
VideoToolbox.framework
AssetsLibrary.framework
OpenAL.framework
OpenGLES.framework
QuartzCore.framework
CoreMedia.framework
Security.framework

3.3.3 工程设置修改

  • AppDelegate.m 文件名修改为AppDelegate.mm
  • Build Setting 中 Enable Bitcode 设置为NO
  • 设置Info.plist中 App Transport Security Settings -> Allow Arbitrary Loads 设置为 YES
  • 设置Info.pplist中 Privacy - Camera Usage Description 是否允许使用相机
  • 设置Info.pplist中 Privacy - Microphone Usage Description 是否允许使用麦克风

3.4 验证

下面在VHSDKDemo的代码中,调用SDK的接口,设置appID 获取SDK版本信息,以验证工程设置是否正确。

3.4.1 引用头文件

在AppDelegate.mm开头引用SDK的头文件:

#import "VHLiveBase.h"

3.4.2 添加调用代码

在application: didFinishLaunchingWithOptions:方法中添加代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [VHLiveBase registerApp:@"xxxxxxxxx"];//AppID:xxxxxxxxx
    [VHLiveBase setThirdPartyUserId:@"xxxxxxxx"];//第三方账号id:xxxxxxxx
    NSLog(@"SDK Version: %@",[VHLiveBase getSDKVersion]);
    return YES;
}

3.4.3 编译运行

如果前面各个步骤都操作正确的话,VHSDKDemo工程应该可以顺利编译通过。在Debug模式下运行APP,Xcode的Console窗格会打印出SDK的版本信息。

至此,工程配置完成。

4 注册APP

[VHLiveBase registerApp:@"xxxxxxxxx"];//AppID:xxxxxxxxx

5 设置第三方ID

[VHLiveBase setThirdPartyUserId:@"xxxxxxxx"];//第三方账号id:xxxxxxxx

6 LOG打印

在 VHLiveBase 中可以设置 log的级别,具体代码如下:

[VHLiveBase setLogLevel:VHLogLevelDebug];

7 获取roomID、access_token

获取roomID、access_token

8 代码对接

8.1 创建Player

SDK 中的 VHLivePlayer 模块负责实现直播播放功能。

VHLivePlayer _livePlayer = [[VHLivePlayer alloc] init];

8.2 设置 渲染View、delegate

  • delegate 设置播放器代理
  • 接下来我们要给播放器的视频画面找个地方来显示,iOS系统中使用 view 作为基本的界面渲染单位,所以您只需要准备一个 view 并调整好布局就可以了。
    _livePlayer.delegate = self;
    _livePlayer.view.frame = self.view.bounds;
    [self.view insertSubview:_livePlayer.view atIndex:0];

如果您要调整渲染画面的大小,只需要调整_livePlayer.view大小和位置即可

8.3 开始播放

  • roomId 推流房间id 可以通过调用 api 创建
  • accessToken 可以通过调用 api 获得
    NSString* roomId = @"lss_xxxxxx";
    NSString* accessToken = @"xxxxxxxxxx";
    [_livePlayer startPlay:roomId accessToken:accessToken];

8.4 画面调整

_livePlayer.scalingMode = VHPlayerScalingModeAspectFit;

可选值 含义
VHPlayerScalingModeFill 将图像拉伸填充
VHPlayerScalingModeAspectFit 将图像等比例缩放,适配最长边,缩放后的宽和高都不会超过显示区域,居中显示,画面可能会留有黑边
VHPlayerScalingModeAspectFill 将图像等比例铺满整个屏幕,多余部分裁剪掉,此模式下画面不会留黑边,但可能因为部分区域被裁剪而显示不全

8.5 清晰度切换

_livePlayer.curDefinition = VHDefinitionOrigin;

可选值 含义
VHDefinitionOrigin 原画
VHDefinitionUHD 超高清
VHDefinitionHD 高清
VHDefinitionSD 标清
VHDefinitionAudio 纯音频

8.6 静音

默认为NO 关闭静音状态 开启静音状态设置为YES即可

_livePlayer.mute = YES;

8.7 暂停/恢复播放

对于直播播放而言,并没有真正意义上的暂停,所谓的直播暂停,只是画面冻结和关闭声音,而云端的视频源还在不断地更新着,所以当您调用 resume 的时候,会从最新的时间点开始播放,这跟点播是有很大不同的(点播播放器的暂停和继续与播放本地视频文件时的表现相同)。

// 暂停
[_livePlayer pause];
// 恢复
[_livePlayer resume];

8.8 结束播放

结束当前直播,播放器资源并未释放

[_livePlayer stopPlay];

8.9 销毁播放器

释放播放器资源

[_livePlayer destroyPlayer];

9 事件处理

  • 推流状态监听

SDK 通过 VHLivePlayerDelegate 代理来监听推流相关的事件

状态 含义
VHPlayerStatusLoading 加载中
VHPlayerStatusPlaying 播放中
VHPlayerStatusStop 停止播放
VHPlayerStatusPause 播放暂停
  • 错误通知
错误类型 数值 含义说明
VHLivePlayErrorNone 0
VHivePlayGetUrlError 1 获取服务器rtmpUrl错误
VHLivePlayParamError 2 参数错误
VHLivePlayRecvError 3 接受数据错误
VHLivePlayCDNConnectError 4 CDN链接失败
VHLivePlayStopPublish 5 已停止推流