观看准备

  1. 注册微吼开发者账号

  2. 创建应用 获取AppID

  3. 设置应用Bundle ID

  4. 获取 roomId

    • 使用发起直播的 roomId
    • 创建直播间 可以通过 【测试工具】 或 【API】 获得
  5. 获取直播间包含看直播权限的access_token

    可以通过 【测试工具】 或 【API】 获得

工程配置

在开始使用sdk之前,我们要配置好IDE和创建基础的工程代码。相关内容在【工程配置】中有详细说明。

时序图

注:已知直播间ID的情况下虚线框部分无需请求。

对接流程

1: 引入直播播放器头文件

#import "VHLivePlayer.h"

2: 创建直播播放器

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

_livePlayer = [[VHLivePlayer alloc] init];

3: 设置 渲染View、delegate

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

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

4: 开始播放

roomId 和 accessToken 参考页首观看准备

NSString* roomId = @"lss_xxxxxx";
NSString* accessToken = @"xxxxxxxxxx";
[_livePlayer startPlay:roomId accessToken:accessToken];

5: 画面调整

_livePlayer.scalingMode = VHPlayerScalingModeAspectFit;

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

6: 清晰度切换

_livePlayer.curDefinition = VHDefinitionOrigin;
可选值 含义
VHDefinitionOrigin 原画
VHDefinitionUHD 超高清
VHDefinitionHD 高清
VHDefinitionSD 标清
VHDefinitionAudio 纯音频

7: 静音

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

_livePlayer.mute = YES;

8: 暂停/恢复播放

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

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

9: 结束播放

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

[_livePlayer stopPlay];

10: 销毁播放器

释放播放器资源

[_livePlayer destroyPlayer];

播放器皮肤

/**
 设置播放器皮肤
 @param skinView 播放器皮肤,继承于VHPlayerSkinView的子类view。
 @discussion 可继承VHPlayerSkinView自定义播放器皮肤,并实现父类的相关方法。也可不使用此方法,完全自定义播放器皮肤并添加到播放器view上。
 */
- (void)setPlayerSkinView:(VHPlayerSkinView *)skinView;

微吼云提供了设置播放器皮肤的Api和播放器皮肤源代码(见Demo),用户可自定义播放器皮肤,也可直接使用系统提供的开源皮肤。只需要设置皮肤到播放器即可实现播放控制等。

事件处理

  • 播放状态监听

SDK 通过 VHLivePlayerDelegate 代理来监听播放相关的状态和事件

具体 VHLivePlayerDelegate 中方法参考【发起直播参考手册

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

快速集成代码

可以把观看直播代码写到 ViewController.m 的 viewDidLoad 方法中测试观看,代码如下:

//
//  ViewController.m
//  TestProject
//
//  Created by vhall on 2018/3/12.
//  Copyright © 2018年 vhall. All rights reserved.
//

#import "ViewController.h"

#import "VHLivePlayer.h"

@interface ViewController ()<VHLivePlayerDelegate>
@property (nonatomic,strong)VHLivePlayer *livePlayer;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //构造并初始化播放器
    _livePlayer = [[VHLivePlayer alloc] init];
    //设置代理
    _livePlayer.delegate = self;
    //设置显示区域
    _livePlayer.view.frame = self.view.bounds;
    //加入显示view
    [self.view insertSubview:_livePlayer.view atIndex:0];
    
    //开始播放
    NSString* roomId        = @"lss_xxxxxx";//roomId 获得方式 参考页面开始处
    NSString* accessToken   = @"xxxxxxxxxx";//accessToken 获得方式 参考页面开始处
    [_livePlayer startPlay:roomId accessToken:accessToken];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)viewDidLayoutSubviews
{
    //刷新播放器画面位置
    _livePlayer.view.frame = self.view.bounds;
}

#pragma mark - VHLivePlayerDelegate
/**
 *  错误回调
 *  @param player   播放器实例
 *  @param error    错误
 */
- (void)player:(VHLivePlayer *)player stoppedWithError:(NSError *)error
{
    NSLog(@"错误: %@",error );
}

/**
 *  播放过程中下载速度回调
 *  @param player   播放器实例
 *  @param speed    kb/s
 */
- (void)player:(VHLivePlayer *)player downloadSpeed:(NSString*)speed
{
    NSLog(@"缓冲速度:%@ Kb/s",speed);
}

@end

其他相关文档

  1. 快速开始
  2. 如何集成发起直播
  3. 发起直播参考手册