ios直播---基于LFLiveKit的直播项目

非常感谢大家利用自己宝贵的时间来阅读我的文章 ,  这篇文章主要写一个iOS系统下基于LFLiveKit的直播demo ,如果你正好需要 , 希望你看完后能够对你的提升有所帮助 , 当然,阅读中如果发现什么错误和可优化的地方 , 希望可以得到你的指点 , 有任何不妥的地方 欢迎指正。喜欢的可以关注下我的简书我的博客


       最近一直在研究直播相关的东西,在网上遨游了几天,也算是有点成果了。其实直播在移动端的工作并没有太多的东西,其中观众端的实现比较简单,这里主要说一下主播端的实现,主播端需要实现的也就是音视频采集、音视频处理、推流,刚开始最好先把这些自己走一遍,把原理和流程搞懂,推荐1小时学会:最简单的iOS直播推流(一)介绍,可以根据自己需要看一下。现在有很多第三方都可以帮你实现这些功能,包括金山的推流SDK,基本的功能都有而且免费,感兴趣的可以自己去看一下基于金山云直播推流SDK实现直播功能,下面就来说一下我们今天的主角LFLiveKit,它已经帮我们实现了视频采集、后台录制、美颜功能、支持h264、AAC编码,动态改变速率,RTMP传输等,我们开发的时候就很简单了,先上几张demo截图


废话不多说,开始你的第一个直播项目

新建项目不用我说了吧😆,把文件拖入你的项目或者在你的podfile加入 pod 'LFLiveKit' ,(它的美颜使用的是GPUImage,感兴趣的可以看一下GPUImage详细解析),在直播控制器引用头文件

 #import "LFLiveKit.h"

@property (nonatomic, strong)LFLiveSession *session;

下面看一下常用的一些属性

@property (nullable,nonatomic, weak) delegate;//代理方法 

@property (nonatomic, assign) BOOL running;//控制直播是开还是关的状态

@property (nonatomic, strong,null_resettable) UIView *preView;//视频图层

@property (nonatomic, assign) AVCaptureDevicePosition captureDevicePosition;//摄像头方向

@property (nonatomic, assign) BOOL beautyFace;//美颜开关

@property (nonatomic,assign) BOOL muted;//静音开关

@property (nullable,nonatomic, strong,readonly) LFLiveStreamInfo * streamInfo;//控制直播流的信息

@property (nonatomic,assign,readonly) LFLiveState state;//直播流上传的状态

@property (nonatomic,assign) BOOL showDebugInfo;//

@property (nonatomic,assign) NSUInteger reconnectInterval;//重连间隔

然后初始化配置

-(void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

//初始化LFLiveSession

[self RtmpInit];

}

配置的时候可以使用默认设置,也可以自定义采集和推流设置,previewView自己创建吧,相关代码就不贴了

LFLiveSession *session  = [[LFLiveSession alloc] initWithAudioConfiguration:[LFLiveAudioConfiguration defaultConfiguration] videoConfiguration:[LFLiveVideoConfiguration defaultConfiguration] captureType:LFLiveCaptureDefaultMask];

session.preView= previewView;

//设置代理

_session.delegate = self;

_session.running = YES;

开始直播,这里的RTMP_URL_1为推流地址

LFLiveStreamInfo *stream = [LFLiveStreamInfo new];

stream.url = RTMP_URL_1;

[self.session startLive:stream];

结束直播

[self.session stopLive];

到这里其实就完成一个直播的基本流程了,下面来看一下他的代理方法

1、直播状态,返回的是一个枚举类型

- (void)liveSession:(nullable LFLiveSession *)session liveStateDidChange:(LFLiveState)state ;

typedef NS_ENUM (NSUInteger, LFLiveState){

/// 准备

LFLiveReady = 0,

/// 连接中

LFLivePending = 1,

/// 已连接

LFLiveStart = 2,

/// 已断开

LFLiveStop = 3,

/// 连接出错

LFLiveError = 4,

///  正在刷新

LFLiveRefresh = 5

};

2、连接失败

- (void)liveSession:(LFLiveSession *)session errorCode:(LFLiveSocketErrorCode)errorCode;

3、直播流的信息,如果需要显示当前流量和实时码率等信息可以在这个方法里实现

- (void)liveSession:(LFLiveSession *)session debugInfo:(LFLiveDebug *)debugInfo;

最后说一下闪光灯切换、静音开关等功能的使用

_session.torch =!_session.torch;//闪光灯开关

_session.muted = !_session.muted;//静音开关

//切换摄像头

AVCaptureDevicePosition devicePositon = self.session.captureDevicePosition;

self.session.captureDevicePosition = (devicePositon == AVCaptureDevicePositionBack) ? AVCaptureDevicePositionFront : AVCaptureDevicePositionBack;

最后再让我们来看一下美颜,我这里简单的做一个调节美颜程度和亮度的功能,创建两个UISlider,分别控制美颜和亮度,具体实现上代码

#pragma mark --美颜效果调节

- (void)sliderValueChage:(id)slider

{

UISlider *searchSlider = slider;

switch (searchSlider.tag) {

case 105:

{

self.session.beautyLevel = searchSlider.value/100;

NSString *voiceValue = [NSString stringWithFormat:@"%.0f",searchSlider.value];

_beautyValue.text = voiceValue;

CGFloat change = (_lastBeautyValue - searchSlider.value) *2;

if (searchSlider.value < 20) {

_beautyValue.textAlignment = NSTextAlignmentRight;

}else if (searchSlider.value>80)

{

_beautyValue.textAlignment = NSTextAlignmentLeft;

}else

{

_beautyValue.textAlignment = NSTextAlignmentCenter;

}

[UIView animateWithDuration:0.1 animations:^{

_beautyValue.x -= change;

}];

_lastBeautyValue = searchSlider.value;

}

break;

case 106:

{

self.session.brightLevel = searchSlider.value/100;

NSString *voiceValue = [NSString stringWithFormat:@"%.0f",searchSlider.value];

_brightValue.text = voiceValue;

CGFloat change = (_lastBrightValue - searchSlider.value) *2;

if (searchSlider.value < 20) {

_brightValue.textAlignment = NSTextAlignmentRight;

}else if (searchSlider.value>80)

{

_brightValue.textAlignment = NSTextAlignmentLeft;

}else

{

_brightValue.textAlignment = NSTextAlignmentCenter;

}

[UIView animateWithDuration:0.1 animations:^{

_brightValue.x -= change;

}];

_lastBrightValue = searchSlider.value;

}

break;

default:

break;

}

}

当然你也可以自定义你需要的美颜样式,这里就不多说了,还有截图、网络信号强度、电池电量等小功能,自己在demo里看吧,附上我自己写的demo地址ZQLiveDemo,因为主要是为了熟悉功能实现,所以没做什么代码优化。有需要做连麦功能的可以看一下这个ios直播连麦功能实现,如果帮到你的话不妨试试给个👍,发现不对的地方,欢迎指正

下面放一些不错的文章,可以看一下

iOS 直播 —— 推流

转 映客 LFLiveKit 推流

【如何快速的开发一个完整的iOS直播app】(原理篇)

最简单的基于FFmpeg的推流器(以推送RTMP为例)

基于GPUImage的实时美颜滤镜

声明:demo仅用于学习交流使用,不可实际应用于任何商业项目!

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

推荐阅读更多精彩内容