IOS集成IJK直播(拉流),腾讯IM,弹幕,赞.

第一次搞简书,废话不多说,直接上干货

XMLive demo下载连接

现有的直播一般分为Phone端,PC端,通俗来说就是手机直播电脑端直播,下面就是 XMFFPlayerManager 运行后的显示效果(PC端直播流没找到,关于分辨率大家别介意):

Phone端(竖屏):

Phone端.png

PC端(竖屏&横屏):

PC端竖屏.jpeg
PC端横屏.jpg

1. 关于本demo的一些库

IJK:

ijk.png

腾讯IM:

IM.png
绿色圈起来的是需要从第三方下载的库(我这有份新鲜的大家可以拿去用--ijk & 腾讯IMSDK(10月合并最新库) 密码: fixp)

<br />

2. XMFFPlayerManager 的使用

  1. 测试接口(GET请求就够了);

    http://116.211.167.106/api/live/aggregation?uid=133825214&interest=1
    

    具体返回的数据结构我已经注释到代码中了

  1. app根控制器(MainViewController)

    导入单例 XMFFPlayerManager.h

XMFFPlayerManager.h

+ (instancetype)sharedTools;

//设置主播昵称,头像,设置直播地址~直播间名称~聊天群ID(腾讯IM)
- (void)setMCNick:(NSString *)nick headImgURLStr:(NSString *)portrait URLStr:(NSString *)urlStr liveName:(NSString *)liveName groupID:(NSString *)groupID;

//给予出发控制器 (isFullScreen:暂时无用)
- (void)setRootViewController:(UIViewController *)RootVc isFullScreen:(BOOL)on;

//判断是否为PC端
- (void)isPCPlayer:(BOOL)isOn;

//准备并开始播放;
- (void)prepareToPlay; 

MainViewController.h

//跳转并且开始播放 是(PC端)/否(手机端)
- (void)pushAndStartPlayerWithPc:(BOOL)isPc andDict:(NSDictionary *)dict {


//主播名称
NSString * nick = dict[@"nick"];
//主播头像地址
NSString * portrait = dict[@"portrait"];
//直播流地址
NSString * stream_addr = dict[@"stream_addr"];

NSString * liveName = dict[@"liveName"];

NSString * groupID = dict[@"groupID"];

//设置主播昵称,头像,设置直播地址~直播间名称~聊天群ID(腾讯IM)
[[XMFFPlayerManager sharedTools] setMCNick:nick headImgURLStr:portrait URLStr:stream_addr liveName:liveName groupID:groupID];
//给予出发控制器 (isFullScreen:暂时无用)
[[XMFFPlayerManager sharedTools] setRootViewController:self isFullScreen:YES];

//判断是否为PC端 准备并开始播放;
if (isPc) {
    [[XMFFPlayerManager sharedTools] isPCPlayer:YES];
    [[XMFFPlayerManager sharedTools] prepareToPlay];
} else {
    [[XMFFPlayerManager sharedTools] isPCPlayer:NO];
    [[XMFFPlayerManager sharedTools] prepareToPlay];
}
}

<br />

3. 小结

注意:各位同学使用IJKPlayer播放直播流需要使用 IJKFFMoviePlayerController.h

//这样就能播放一个直播
    IJKFFMoviePlayerController *FFvc = [[IJKFFMoviePlayerController alloc]initWithContentURL:[NSURL URLWithString:直播流源地址] withOptions:nil];
    //需要强引用
    self.FFvc = FFvc;
    //准备并开始播放
    [self.FFvc prepareToPlay];
    self.FFvc.view.frame = [UIScreen mainScreen].bounds;
    [self.view insertSubview:self.FFvc.view atIndex:1];

//在关闭播放器的时候 必须执行下面 三个方法
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [self.FFvc pause];
    [self.FFvc stop];
    [self.FFvc shutdown];
    //从父控件移除 (我是为了防止内存泄露,聊胜于无)
    [self.FFvc.view removeFromSuperview];
}

关于腾讯IM 我只是封装了一个登录 , 加入组群 , 接收消息 , 和发送群消息的类;

XMIMController.h

#import <UIKit/UIKit.h>
#import "XMMessageInfo.h"
typedef void(^messBlock)(XMMessageInfo *);

@interface XMIMController : UIViewController
//接收消息的回调
@property (nonatomic, copy)messBlock            messBlock;

//发消息
- (void)sendMessage:(NSString *)mess;
@end

腾讯IM用户登录需要准守代理协议 TIMUserStatusListener

XMIMController.m

//
TIMManager  *manager = [[TIMManager alloc]init];
self.manager = manager;
//腾讯IM云SDK 登录注册后会给 SDKAppId
[self.manager initSdk:SDKAppId];

TIMLoginParam * login_param = [[TIMLoginParam alloc ]init];

//类型
login_param.accountType = @"XXXX";

//用户名称
login_param.identifier = @"zhangsan";

//用户签名:(这个就是本地私钥加密后得出的签名,具体请到腾讯IM查看)
login_param.userSig = useSig;

//一样SDKAppId
login_param.appidAt3rd = SDKAppId;
login_param.sdkAppId = SDKAppId;

//登录腾讯IM
[[TIMManager sharedInstance] login: login_param succ:^(){
    NSLog(@"Login 成功");
    
    //登陆成功后加入组群
    [[TIMGroupManager sharedInstance] JoinGroup:组群ID msg:@"Apply Join Group" succ:^(){
    //加入成功
        NSLog(@"Join Succ");
        
    }fail:^(int code, NSString * err) {
        NSLog(@"code=%d, err=%@", code, err);
        
        if ([err isEqualToString:@"already group member"]) {
             NSLog(@"已经在这个群了");
        }
    }];
} fail:^(int code, NSString * err) {
    NSLog(@"登录失败: %d->%@", code, err);
}];

发送和接收消息需要准守代理协议 TIMMessageListener

#pragma mark - TIMMessageListener

//类似于远程推送 ,登陆完,准守协议后只要实现此方法 就会时刻监听别人发送的信息;
- (void)onNewMessage:(NSArray*) msgs {

//获取最新的一条信息
TIMMessage * message = (TIMMessage *)msgs[0];
XMMessageInfo *model = [[XMMessageInfo alloc]init];
//发送信息人昵称
model.nick = [message sender];

//此处只做了文本信息的解析 , 还有其他一些类型的信息大家请自行去腾讯IM文档查看
if ([elem isKindOfClass:[TIMTextElem class]]) {
        TIMTextElem * text_elem = (TIMTextElem * )elem;
        NSLog(@"%@", text_elem.text);
    }
}


//发送文本消息 

- (void)sendMessage:(NSString *)mess{

if (mess.length > 0) {
    TIMTextElem * text_elem = [[TIMTextElem alloc] init];
    
    [text_elem setText:mess];
    
    TIMMessage * msg = [[TIMMessage alloc] init];
    [msg addElem:text_elem];
    
    //此处 self.grp_conversation 为 "组群会话" 
    [self.grp_conversation sendMessage:msg succ:^(){
        //成功
        NSLog(@"SendMsg Succ");
    }fail:^(int code, NSString * err) {
        //失败
        NSLog(@"SendMsg Failed:%d->%@", code, err);
    }];
}

}
<br />

4. 结束语

希望本篇对即将需要学习和研发直播项目的同学们有所帮助;
以后也会不定期更新一些工作中的实用技术,请大家多多关照 , github 上点个Star~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容