观看准备
-
获取 roomId
-
获取直播间包含看直播权限的access_token
工程配置
在开始使用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