• Stars
    star
    285
  • Rank 145,115 (Top 3 %)
  • Language
    Objective-C
  • Created over 8 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Show how to add IM module to Live app

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.
    return YES;
}

在需要的地方添加

#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

More Repositories

1

ChatKit-OC

此项目已经废弃,以后不再维护。我们推出了基于 Swift SDK 的 Chat Demo。
Objective-C
2,134
star
2

docs

LeanCloud Documentation
JavaScript
606
star
3

leancloud-sdk

LeanCloud SDK repository.
Objective-C
332
star
4

leantodo-weapp

LeanTodo implemented with Weapp
JavaScript
331
star
5

javascript-sdk

LeanCloud JavaScript SDK
JavaScript
330
star
6

leanmessage-demo

使用 LeanCloud 实时通讯搭建的聊天 WebApp
JavaScript
323
star
7

ticket

TypeScript
291
star
8

satori

Satori 是一个 LeanCloud 维护的监控系统,inspired by Open-Falcon
Python
232
star
9

js-realtime-sdk

LeanCloud Realtime Message JavaScript SDK
JavaScript
201
star
10

objc-sdk

LeanCloud Objective-C SDK
Objective-C
197
star
11

leancloud-social-ios

LeanCloud 社交登录组件,轻松加入 QQ、微博、微信登录
Objective-C
160
star
12

LeanEngine-WechatBot

该项目为微信公众平台开发指南文档所对应的代码,请参照文档进行开发,该项目不再维护
JavaScript
160
star
13

LeanStorageDemo-iOS

基于 iOS SDK,全面示例了 LeanCloud 的存储功能。
Objective-C
157
star
14

swift-sdk

LeanCloud Swift SDK
Swift
139
star
15

node-js-getting-started

LeanEngine Node.js getting started.
JavaScript
131
star
16

leanengine-nodejs-demos

云引擎 Node.js 常用功能和示例汇总
JavaScript
108
star
17

leancloud-graphql

Third party GraphQL support for LeanCloud, running on LeanEngine
JavaScript
106
star
18

python-sdk

LeanCloud Python SDK
Python
99
star
19

LeanCloudChatKit-Android

Java
96
star
20

lean-cli

LeanEngine Command Line Tool
Go
81
star
21

leancloud-feedback-ios

LeanCloud 开源的用户反馈组件
Objective-C
78
star
22

cloud-code-alipay

因支付宝接口变动频繁,该项目不再维护,代码可能无法正常工作。
JavaScript
77
star
23

LeanStorageDemo-Android

基于 Android SDK,全面示例了 LeanCloud 的存储功能
Java
71
star
24

StorageStarted

Objective-C
70
star
25

avoscloud-code-command

此版本命令行工具已经废弃,以后不再维护。我们推出了基于 Go 的新版本的命令行工具
JavaScript
66
star
26

leantodo-react-native

Todo app using LeanCloud and React Native
JavaScript
66
star
27

java-unified-sdk

LeanCloud Java SDK(兼容 Android)
Java
65
star
28

leanengine-node-sdk

LeanEngine Node.js SDK
JavaScript
62
star
29

android-push-demo

Android Push Demo ,示例 LeanCloud 的推送功能
Java
60
star
30

weapp-pay-getting-started

LeanCloud 小程序微信支付后端示例
JavaScript
59
star
31

php-sdk

LeanCloud PHP SDK
PHP
53
star
32

python-getting-started

LeanEngine Python runtime project template
Python
53
star
33

leantodo-vue

LeanTodo implemented with Vue.js
JavaScript
49
star
34

swift-sdk-demo

Demo for LeanCloud Swift SDK
Swift
49
star
35

weapp-polyfill

Polyfills for w3c API on top of Weapp API
JavaScript
46
star
36

open-old

LeanCloud Open Resources
CSS
41
star
37

android-sdk-all

Java
39
star
38

js-push-sdk

[已废弃] LeanCloud Push JavaScript SDK.
JavaScript
35
star
39

Storage-SDK-Flutter

LeanCloud Storage SDK for Flutter/Dart.
Dart
34
star
40

flask-todo-demo

Python port of LeanTodo.
HTML
31
star
41

react-native-installation-demo

Objective-C
29
star
42

Realtime-SDK-Flutter

LeanCloud Flutter Plugin SDK
Dart
26
star
43

lean-cache-demos

该项目已被归档,后续将不再维护,请在 leancloud/leanengine-nodejs-demos 中查看有关 LeanCache 的最新示例。
JavaScript
26
star
44

FlutterLeaveDemo

Flutter 请假、写周报应用
Dart
25
star
45

BallBattle-Cocos

模拟《球球大作战》demo
JavaScript
24
star
46

csharp-sdk

LeanCloud C# SDK
C#
24
star
47

leanmessage-javascript-sdk

LeanMessage JavaScript SDK
JavaScript
22
star
48

servlet-getting-started

Java
17
star
49

LeanCloudRocks

ReactNative meets LeanCloud
Objective-C
17
star
50

filter-service

A RESTFul bloom filters daemon.
Java
16
star
51

cpp-sdk

[NO MAINTAINED] LeanCloud C++ SDK
C++
16
star
52

BallBattle-Unity

《球球大作战》Demo Unity 版本
C#
16
star
53

multiplayer-turn-based-game-demo

回合制对战游戏示例
TypeScript
15
star
54

LeanCloudLiveKit-Android

Java
15
star
55

react-native-image-upload-demo

Java
14
star
56

joke

LeanCloud 中发生的一些搞笑的事情……Orz
14
star
57

realtime-messaging-signature-cloudcode

该项目已被归档,后续将不再维护,请在 leancloud/leanengine-nodejs-demos 中查看有关实时通讯签名的最新示例。
JavaScript
14
star
58

realtime-SDK-dotNET

LeanCloud Instants Messaging SDK for Portable & Unity & .NET Core written by c#
C#
13
star
59

resty-marathon-lb

基于 OpenResty 的 Marathon 服务发现 & 路由
Lua
12
star
60

spring-boot-getting-started

Java
12
star
61

go-sdk

Golang SDK for LeanCloud Storage and LeanEngine
Go
12
star
62

delphi-sdk

[NO MAINTAINED] Delphi SDK for LeanCloud BaaS demo
Pascal
12
star
63

java-sdk

Java
11
star
64

unity-sdk

Unity SDK
11
star
65

Akara

A Swift networking library based on cURL.
Swift
11
star
66

hackthon-eye

黑客马拉松项目——眼缘
JavaScript
11
star
67

django-getting-started

Python
11
star
68

mixpush-demos

Java
10
star
69

answer-game

一个答题类小游戏
JavaScript
9
star
70

leancloud-smsdemo-ios

LeanCloud SMS Demo
Objective-C
9
star
71

leanengine-nodejs-apm

LeanEngine performance monitoring for Node.js application
JavaScript
9
star
72

js-analytics-sdk

[已废弃] LeanCloud JavaScript Analytics SDK
JavaScript
9
star
73

leancloud-feedback-android

LeanCloud 开源的用户反馈组件
Java
9
star
74

ios-feedback-demo

iOS 小项目,用来展示如何快速集成 LeanCloud 反馈模块
Objective-C
8
star
75

use-resource

A set of simple utilities for declarative async resource fetching.
TypeScript
8
star
76

leanengine-java-sdk

LeanEngine Java lib
Java
8
star
77

slim-todo-demo

LeanCloud todo demo for Slim PHP Framework
HTML
8
star
78

react-hook-demo

A React hook demo with backend data store.
JavaScript
8
star
79

clj-archaius

A Clojure library designed to use Netflix/archaius for configuration management.
Clojure
7
star
80

swift-programming

Chinese Version Of Swift Programming Language
7
star
81

LeanCloudSNSDemo-Android

Android 第三方登录示例 Demo
Java
6
star
82

CSharp-SDK-Unity-Demo

CSharp SDK Unity Demo
C#
6
star
83

WeShare

Java
6
star
84

knowhow

LeanCloud 知识库 - 用户使用常见问题
Shell
6
star
85

LCLogger

Map NSLogger to LeanCloud namespace (LC)
Objective-C
5
star
86

Play-SDK-CSharp

C#
5
star
87

leancloud-status

LeanCloud Status Page
JavaScript
5
star
88

PuppetChat

Deprecated
Objective-C
5
star
89

LeanEngine-OAuth-China

该项目已被归档,后续将不再维护,请在 leancloud/leanengine-nodejs-demos 中查看云引擎的最新示例。
JavaScript
5
star
90

java-common

Java
5
star
91

affiliate-web

JavaScript
4
star
92

Swift-Sample-Code

Swift SDK 文档中的示例代码 。
Swift
4
star
93

Play-Quick-Start-JS

JavaScript
4
star
94

slim-getting-started

Slim Getting Started for LeanEngine
PHP
4
star
95

kafka-java-consumer

A Kafka consumer which can help you to overcome common pitfalls
Java
4
star
96

LeanCloudBirthday

五周年小游戏
JavaScript
4
star
97

TypeScript-Sample-Code

TypeScript SDK 文档中的示例代码
TypeScript
4
star
98

paas.product

Paas product release repo.
Objective-C
4
star
99

typed-leancloud-jssdk

Typed define for leancloud-jssdk.
TypeScript
4
star
100

leanengine-python-apm

Python
4
star