Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

17 Commits

Repository files navigation

LiveKit-iOS

![enter image description here](https://img.shields.io/badge/platform-iOS%208.0%2B-ff69b5618733984.svg)

LiveKit 是一个专门为视频直播业务提供的一个 UI 组件。主要特点是:

  1. 将直播模块与 IM 模块结合,提供了推流端和播放端,以及聊天室等的实现。
  2. 支持无人数限制的聊天室
  3. 支持多种自定义消息拓展并提供了默认实现,比如:弹幕、点赞出心、送飞机游轮或保时捷等礼物、成员加入聊天室自动打招呼等。
  4. 针对直播服务,LeanCloud 只按照 聊天的费用标准 收费,而直播相关的内容,LeanCloud 并不参与收费,其产生的费用请在七牛账户中查询。

获取项目

git clone --depth=1 https://github.com/leancloud/LeanCloudLiveKit-iOS.git

集成效果

项目结构

└── LiveKit-iOS
├── LiveKit-iOS
│ ├── Assets.xcassets
│ ├── Class
│ │ ├── Camera
│ │ │ ├── Controller
│ │ │ └── View
│ │ ├── Category
│ │ ├── Live
│ │ │ ├── ChildViewController
│ │ │ ├── Controller
│ │ │ ├── Model
│ │ │ └── View
│ │ ├── Main
│ │ │ ├── Controller
│ │ │ └── Libs
│ │ │ ├── IJKMediaFramework.framework #缺少的库
│ │ │ └── ... ...
│ │ └── Mine
│ │ ├── Category
│ │ ├── Controller
│ │ └── View
│ ├── LiveChat #推流端和播放端
│ ├── Model
│ ├── Resources
│ │ ├── Gift
│ │ └── HeartImage
│ ├── Streaming
│ │ └── PLCameraStreamingKit
│ ├── Tool
│ │ └── MBProgressHUD
│ └── View
└── Pods
├── ChatKit #IM系统
└── Class
├── Model
├── Module
├── Resources
├── Tool
│ ├── Categories
│ ├── Service
│ └── Vendor
└── View

使用方法

本库通过 CocoaPods 管理依赖。

CocoaPods 是目前最流行的 Cocoa 项目库依赖管理工具之一,考虑到便捷与项目的可维护性,我们更推荐您使用 CocoaPods 导入并管理 SDK。

CocoaPods 导入

1. CocoaPods 安装

如果您的机器上已经安装了 CocoaPods,直接进入下一步即可。

如果您的网络能够访问 CocoaPods 服务器,在终端中运行如下命令直接安装:

 sudo gem install cocoapods

如果您的网络不能访问 CocoaPods 服务器,可以通过淘宝的 RubyGems 镜像 进行安装。

在终端依次运行以下命令:

 gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
sudo gem install cocoapods

2. 使用 CocoaPods 导入

打开终端,然后使用 CocoaPods 进行安装。在终端中运行以下命令:

 pod install

或者这个命令:

# 禁止升级 CocoaPods 的 spec 仓库,否则会卡在 Analyzing dependencies,非常慢
pod update --verbose --no-repo-update

如果提示找不到库,则可去掉 --no-repo-update

完成后,CocoaPods 会在您的工程根目录下生成一个 .xcworkspace 文件。您需要通过此文件打开您的工程,而不是之前的 .xcodeproj

Pod安装后,会发现,还是少一个framework:IJKMediaFramework.framework ,在文档上文中的项目结构部分有标注。可以到这里下载,编译好的版本 :

推流端与播放端

播放端配置

在 Demo 中,播放端的配置演示主要集中 PlayerViewController 这个类。

播放端的配置步骤如下:

  1. APP 层面需要提供URL,然后将 URL 传给 LiveKit, LiveKit 根据 URL 地址查询聊天室信息,如果在发现不存在,LiveKit会创建一个聊天室聊天室。

具体代码如下:

 [[LCLKLiveService sharedInstance] fetchConversationIfNeededForLiveId:self.liveUrl callback:^(AVIMConversation *conversation, NSError *error) {
if (conversation) {
//...
}
}];
  1. 根据 URL 获得聊天室ID后,根据 ID 获取聊天室视图,具体可参考下面这个方法:

-[PlayerViewController exampleOpenConversationViewControllerWithConversaionId:fromNavigationController:]

聊天视图位置的设置需要借助 LiveKit 提供的几个生命周期函数-setViewDidLoadBlock:-setViewWillAppearBlock:-setViewWillDisappearBlock:,同时将自动加入聊天室属性 enableAutoJoin 设置为 YES。

推流端配置

在 Demo 中,推流端的配置演示主要集中 PLViewController 这个类。

Demo 中使用了七牛 SDK 的推流端 PLStreamingKit:

PLStreamingKit 是一个适用于 iOS 的 RTMP 直播推流 SDK,可高度定制化和二次开发。特色是支持 H.264 硬编码,以及支持 AAC 硬编码;同时,还根据移动网络环境的多变性,实现了一套可供开发者灵活选择的编码参数集合。

PLStreamingKit 不包括摄像头、麦克风等设备相关的资源获取,只包括音视频数据的编码处理和发送。

具体步骤如下:

AppDelegate.m 中进行 SDK 初始化,如果未进行 SDK 初始化,在核心类 PLStreamingSession 初始化阶段将抛出异常

#import<PLStreamingKit/PLStreamingEnv.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[PLStreamingEnv initEnv];
// Override point for customization after application launch.returnYES;
}

在需要的地方添加

#import<PLStreamingKit/PLStreamingKit.h>

PLStreamingSession 是核心类,你只需要关注并使用这个类就可以完成推流工作。

PLStreamingSession 的创建

// streamJSON 是从服务端拿回的//// 从服务端拿回的 streamJSON 结构如下:// @{@"id": @"stream_id",// @"title": @"stream_title",// @"hub": @"hub_name",// @"publishKey": @"publish_key",// @"publishSecurity": @"dynamic", // or static// @"disabled": @(NO),// @"profiles": @[@"480p", @"720p"], // or empty Array []// @"hosts": @{// ...// }NSDictionary *streamJSON;
PLVideoStreamingConfiguration *videoStreamingConfiguration = [PLVideoStreamingConfiguration configurationWithVideoSize:CGSizeMake(320, 576) videoQuality:kPLVideoStreamingQualityLow2];
PLAudioStreamingConfiguration *audioStreamingConfiguration = [PLAudioStreamingConfiguration defaultConfiguration];
PLStream *stream = [PLStream streamWithJSON:streamJSON];
self.session = [[PLStreamingSession alloc] initWithVideoStreamingConfiguration:videoStreamingConfiguration audioStreamingConfiguration:audioStreamingConfiguration stream:stream];
self.session.delegate = self;

推流操作

// 开始推流,无论 security policy 是 static 还是 dynamic,都无需再单独计算推流地址
[self.session startWithCompleted:^(BOOL success) {
// 这里的代码在主线程运行,所以可以放心对 UI 控件做操作if (success) {
// 连接成功后的处理// 成功后,在这里才可以读取 self.session.pushURL,start 失败和之前不能确保读取到正确的 URL
} else {
// 连接失败后的处理
}
}];
// 停止推流
[self.session stop];

销毁推流 session

[self.session destroy];

推流端需要获取的 streamJSON 如果有不清楚的可以参考:

  1. 《七牛开发者中心-API文档》
  2. 《2小时搞定移动直播 App 开发》 视频教程

播放端是采用的通用的直播组件,Demo 中实时播放的直播地址,是从网上抓包抓取的直播地址。如果想观看推流端的直播视频,直接替换 URL 地址就可以达到效果。

播放端和推流端的代码位置,在上文的项目结构部分已经标注出。

IM 系统配置

IM 部分的配置需要参考:ChatKit-OC

IM 系统的的代码位置,在上文的项目项目结构部分已经标注出。

参考到的开源项目

主要是两个部分:

  1. 直播演示部分,主要参考:520Linkee
  2. IM部分,主要参考:ChatKit-OC

About

Show how to add IM module to Live app

Resources

Stars

286 stars

Watchers

25 watching

Forks

Releases

Packages

Used by

Contributors

Languages