效果图:
做直播已经有一段时间了,今天偶尔跟一个网友聊到这一块,问我有没有这一块的资料,我说没有,都是自己看文档,玩demo摸索出来的,吐槽了一下腾讯的很多坑,网友说既然这样何不写个博客记录一下这里面遇到的坑, 以后再做也比较方便,还能分享,于是就写了这篇简书, 第一次写, 写的不好不要吐槽, 只是希望能帮助到大家~~~
1.首先登陆腾讯云平台注册自己的账号,并在应用列表里面创建自己的应用id
2.腾讯那边的demo有两个,一个是官网,还有一个是gitHub上面的,从demo上来看,git上面的比较流畅一点,文档也比较全面,建议用git上面的(这里讲的也是git上的, 其实都差不多, 底层是一样的)
gitHub地址:https://github.com/zhaoyang21cn/iOS_Suixinbo
3.腾讯云平台配置完以后就轮到客户端的类库引入了,网上都有,不过为了项目的完整性,我就再啰嗦一遍了。首先从demo里面找到需要的类库,我们需要的库都在libs这个文件夹里面,就是这些。
**4.导入CommonLibrary,添加到PCH,并添加Compiler Flags
**
5.引入腾讯云的库之后还需要导入ios本地支持的库,如下图所示。
6.配置App参数,修改TIMAdapter.h 中的 SDK App ID
将环境配置好以后就可以开发云视频的各个流程了。
1.登陆
我们这边是采用鉴权Token来登陆的, 所以只介绍这个
在写登录的时候需要一些demo里面封装好的接口文档
这个文件夹里面的就是需要导入的文件。
// 腾讯的登陆类, 服务器返回qcloudSign之后进行登陆
IMALoginParam *loginParam = [[IMALoginParam alloc] init];
loginParam.identifier = // 生成qcloudSign对应的ID;
loginParam.userSig = // qcloudSign;
IMAPlatform *platform = [IMAPlatform configWith:loginParam.config];
// 获取本地的登录config
[platform login:loginParam succ:^{
[platform configOnEnterMainUIWith:loginParam];
DLog(@"IM登录成功");
} fail:^(int code, NSString *msg) {
DLog(@"IM登录失败");
}];
- 因为
登陆
这个东西需要保存的个人信息
太重要
,创建直播和看直播都需要这些东东,所以才会引起之前说的很多人吐槽demo可以成功,但是自己写的就会有问题等等,一个原因是自己将demo里面的逻辑搞乱了,另一个就是使用方法不当,因为demo是使用的托管模式,而有的需求可能会是独立模式,所以才会引起推流收不到,收到的又看不到画面等等问题。下面直接将开创房间和收看视频写出来,代码并不多,直接上代码。
1.获取当前房间列表
/**
* 加载直播数据
*/
- (void)loadDirectSeedingData {
XSWeakSelf;
__weak typeof(XSBaseTableView *) weakTableView = _tableView;
[[XSHttpEngine shareInstance] getMyMainLectureList:^(NSDictionary *respData) {
[weakSelf hideHUD];
BOOL success = [[respData objectForKey:XS_STATUS_CODE] isEqualToString:XS_STATUSCODE_SUCCESS];
if (success) {
[weakTableView headerEndRefreshing];
NSDictionary *dict = [respData objectForKey:XS_RESP_DATA];
XSLiveModel *liveModel = [[XSLiveModel alloc] initWithDictionary:dict error:nil];
if (!liveModel.data.count) {
weakSelf.models = @[];
[weakTableView reloadData];
return;
} else {
[weakTableView removeNoDataFooter];
}
weakSelf.models = [liveModel.data sortedArrayUsingComparator:^NSComparisonResult(XSMyMainLectureItemModel *obj1, XSMyMainLectureItemModel *obj2) {
NSComparisonResult result = [[NSString stringWithFormat:@"%zd", obj1.status] compare:[NSString stringWithFormat:@"%zd", obj2.status]];
return result;
}];
[weakTableView reloadData];
} else {
[weakTableView headerEndRefreshing];
}
} failedBlock:^(NSString *errMsg) {
[weakSelf hideHUD];
weakSelf.models = @[];
[weakTableView reloadData];
}];
}
**2.既然是房间列表肯定得放入list中,我将数据放入tableview里面,当点击某一行时可以获取到某个特定房间的数据,didselect方法里面的代码如下 **
/**
* 创建直播室
*/
- (void)createRoomModel:(XSLiveModel *)model {
// 登陆信息
TCShowHost *host = (TCShowHost *)[IMAPlatform sharedInstance].host;
XSMemberDetailModel *userModel = [XSUser sharedInstance].userModel;
host.profile.faceURL = userModel.avatar;
host.profile.nickname = userModel.username;
TCShowUser *user = [[TCShowUser alloc] init];
user.avatar = [host imUserIconUrl];
user.uid = [host imUserId];
user.username = userModel.username;//[host imUserName];
// 房间信息
TCShowLiveListItem *liveRoom = [[TCShowLiveListItem alloc] init];
liveRoom.host = user;
liveRoom.title = model.name;
liveRoom.cover = model.image_url;
liveRoom.avRoomId = (int)model.id;
liveRoom.avRoomType = 0;
TCShowMultiLiveViewController *vc = [[TCShowMultiLiveViewController alloc] initWith:liveRoom user:host];
vc.enableIM = NO; // 项目需要不需要聊天
[self presentViewController:vc animated:YES completion:nil];
}
3.那么看直播也是依样画葫芦代码如下
//进入手机直播间
TCShowLiveListItem *liveRoom = [[TCShowLiveListItem alloc] init];
liveRoom.title = title;
TCShowUser *user = [[TCShowUser alloc] init];
user.avatar = @"";
user.username = @"";
user.uid = @"";
liveRoom.host = user;
liveRoom.avRoomId = [_courseId intValue]; // 列表所拿到的房间号
TCShowMultiLiveViewController *vc = [[TCShowMultiLiveViewController alloc] initWith:liveRoom user:[IMAPlatform sharedInstance].host];
vc.enableIM = NO;
[self presentViewController:vc animated:YES completion:nil];
4.最后说一个很重要的事情,那就是看直播和创建房间是不可以使用同一个账号的。
- 最后在说一下这个推流的, 直接上代码
// 添加推流返回
- (void)onAVEngine:(TCAVBaseRoomEngine *)engine onStartPush:(BOOL)succ pushRequest:(TCAVLiveRoomPushRequest *)req {
// 设置直播地址AVLiveUrl playUrl
AVLiveUrl *RTMPLiveUrl = req.pushResp.urls.firstObject;
AVLiveUrl *HLSLiveUrl = req.pushResp.urls.lastObject;
NSData *RTMPData =[RTMPLiveUrl.playUrl dataUsingEncoding:NSUTF8StringEncoding];
NSData *HLSData =[HLSLiveUrl.playUrl dataUsingEncoding:NSUTF8StringEncoding];
RTMPData = [GTMBase64 encodeData:RTMPData];
HLSData = [GTMBase64 encodeData:HLSData];
NSString *RTMP = [[NSString alloc] initWithData:RTMPData encoding:NSUTF8StringEncoding];
NSString *HLS = [[NSString alloc] initWithData:HLSData encoding:NSUTF8StringEncoding];
XSWeakSelf;
[[XSHttpEngine shareInstance] uploadLiveInfoWithRTMP:RTMP HLS:HLS type:self.liveClassType name:nil playType:self.playType completionBlock:^(NSDictionary *respData) {
DLog(@"添加推流返回 respData %@", respData);
} failedBlock:^(NSString *errMsg) {
DLog(@"添加推流返回 errMsg %@", errMsg);
[weakSelf exitLive];
}];
return;
}
腾讯那边观看直播是利用房间号来观看的,重要的参数就是房间号,主播信息以及当前登陆信息,这三个东西必须保证是对的,观看就是没有问题的,大概就是这些,各位有问题可以留言提问,知道的会回答的.毕竟已经过去一个月了,有些问题想不起来,想起来了再补充