关闭

[置顶] ios直播---基于LFLiveKit的直播项目

标签: ios直播推流美颜LFLiveKit
416人阅读 评论(0) 收藏 举报

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


 最近一直在研究直播相关的东西,在网上遨游了几天,也算是有点成果了。其实直播在移动端的工作并没有太多的东西,其中观众端的实现比较简单,聊天室、弹幕、礼物系统比较麻烦点。这里主要说一下主播端的实现,主播端需要实现的也就是音视频采集、音视频处理、推流,当然有些公司还会有些挂件啊、特效啊的功能,就先不说了。刚开始最好先把这些自己走一遍,把原理和流程搞懂,推荐1小时学会:最简单的iOS直播推流(一)介绍  可以根据自己需要看一下。现在有很多第三方都可以帮你实现这些功能,包括金山的推流SDK,基本的功能都有而且免费,感兴趣的可以去看一下我的另一篇文章 ios直播---基于金山云直播推流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仅用于学习交流使用,不可实际应用于任何商业项目!







0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS 直播技术及Demo

今天写一些关于iOS直播技术相关知识,及详细Demo介绍,总结了关于直播的一系列知识,希望对各位学习了解直播有一定的帮助,新年将至,这里预祝大家新年快乐,事业有成!
  • lunahaijiao
  • lunahaijiao
  • 2017-01-18 11:32
  • 1380

1小时学会:最简单的iOS直播推流(一)介绍

最近在做iOS直播,研究了相关直播技术,主要包含两方面:推流,播放。所以这次主要研究推流技术。并将代码开源,然后在blog里做一些简单的代码解析。 源代码:https://github.com/hardman/AWLive 群:552660248
  • hard_man
  • hard_man
  • 2016-11-07 00:13
  • 4233

1小时学会:最简单的iOS直播推流(二)代码架构概述

最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!!源代码:https://github.com/hardman/AWLive群:552660248推流流程...
  • hard_man
  • hard_man
  • 2016-11-10 23:33
  • 2534

iOS简单直播实现(二:推流)

推流用的是一个第三方的IFLiveKit框架。这个框架基于rtmp协议的,c语言和oc语言分开的非常清楚,对oc语言非常友好,使用起来相对简单。   IFLiveKit内部集成了GPUIImage。内部实现了图片渲染等美艳效果。减少了开发时候美艳效果的调试。   需求:创建一个简单的推流...
  • a454431208
  • a454431208
  • 2016-10-10 19:35
  • 1887

iOS直播推流篇

感谢:袁峥Seemygo的分享。 效果 Snip20161018_20.png 一、安装Homebrew Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件。 1、打开终端, 查看是否已经安装了Homebre...
  • wujakf
  • wujakf
  • 2017-03-23 13:04
  • 362

最简单的基于FFmpeg的移动端例子:IOS 推流器

本文记录IOS平台下基于FFmpeg的推流器。该示例C语言的源代码来自于《最简单的基于FFMPEG的推流器》。相关的概念就不再重复记录了。源代码项目的目录结构如图所示。C代码位于ViewController.m文件中,内容如下所示。
  • leixiaohua1020
  • leixiaohua1020
  • 2015-07-29 12:57
  • 27819

映客 LFLiveKit 推流

一、直播现状简介想做一套像映客的直播系统? Linkee.101.技术实现层面:技术相对都比较成熟,设备也都支持硬编码。IOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版本,8.0以下就需要用x264的库软编...
  • fzply
  • fzply
  • 2017-07-12 16:47
  • 867

四款好用的免费直播编码推流软件

现代生活已经离不开互联网,离不开软件了。 这说法毫不夸张。 比如手机上各种APP眼花缭乱 ,各种行业, 各种功能, 各种Logo, 各种的各种。 没有良好的整理力,是真 的不好意思让别人看到啊。 这些功能各异的APP程序大多数是免费APP。今天我们来谈谈关于...
  • qq_38810947
  • qq_38810947
  • 2017-05-16 16:45
  • 3656

直播推流端网络优化策略

移动直播推流端的网络优化是直播开发的难点之一,下面简单说下我的理解和解决策略。 总体原则 要尽量加深对 H.264 等协议的理解,协议规范的制定者想出来的这些算法一方面当然是要尽量提高压缩效率,但同时他们也考虑到了 H.264 的各种应用,尤其是网络传输,事实上,直播推流端的网络优化要做...
  • heliang1108
  • heliang1108
  • 2016-07-22 17:16
  • 1562

iOS开发之直播App流程介绍,直播资料收集汇总,视频推流,视频拉流,SMTP、RTMP、HLS、 PLPlayerKit

(一) iOS 直播类APP开发流程分解:  1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1、数据采集: 摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: 摄像机:CCD、CMOS 拾...
  • zhonggaorong
  • zhonggaorong
  • 2016-05-23 18:11
  • 16251
    个人资料
    • 访问:696次
    • 积分:68
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档