# 7\_1-核心common-概述

* [6.1.1 简介](#_611-简介)
* [6.1.2 详细解释](#_612-详细解释)
* [6.1.3 如何使用Common层](#_613-如何使用common层)
* [6.1.4 Common层文件夹目录结构](#_614-common层文件夹目录结构)

## 6.1.1 简介

Common层（即 `PLVLiveCommonModule` 文件夹下全部文件），意译为“通用层”，是完全开源的。本质是对 保利威多场景SDK 的封装。

Common层目的：

* 提供更友好统一的API
* 实现更完整的业务功能
* 使用更规范的封装形式。

对于企业客户，Common层，实现了大部分企业的常见功能需求，但同时不依赖也不关注特定业务UI。

 

## 6.1.2 详细解释

针对

```
“Common层 有什么作用？”
“Common层 是否影响我司现在或未来的自定义UI需求？”
“Common层 如何使用？”
```

等疑问，以下将详作解释：

在 保利威多场景 架构中，我们将 `UI代码` 划分为两类：

* 第一类：具备企业元素特征的，有强烈交互特性的，有自定义倾向的UI。称为 **“企业特征UI”**
* 第二类：为SDK模块提供更完整能力的，无企业元素特征的，自定义可能极小的。称为 **“通用UI”**

以上两类 `UI代码` 分别位于（请提前下载Demo源码）：

* 第一类（企业特征UI）：位于上层 “Scene场景层” 文件夹下（即 `云课堂场景PLVLiveCloudClassScene`、`直播带货场景PLVLiveEcommerceScene`）
* 第二类（通用UI）：位于 “Common通用层” 文件夹下（即 `PLVLiveCommonModule`）

得益于以上设计，Common 层做到不依赖也不关注“企业特征UI”，更纯净低耦合，实用特点如下：

* Common层 可直接拖入自家项目使用，而不产生冲突；
* 不牵涉“企业特征UI”、无UI元素特征，因此对企业自定义的UI需求不产生负担，对各类场景UI需求兼容能力好。
* 同时 Common层 已实现了大部分企业的常见功能需求，具备 保利威 强大完整的产品能力。

 

保利威多场景 Common层代码，能力完整，场景兼容。\
强烈推荐直接拖入 `PLVLiveCommonModule` 文件夹进行集成，并直接 **面向 Common层的类** 进行开发，而 **无需面向 SDK层**。

```
体积方面，Common层全部文件总和体积，约为 950 KB，负担极小。若企业有更极致的体积需求，可进一步与我们联系
```

 

## 6.1.3 如何使用Common层

必需的集成步骤 —— 已集成 保利威多场景SDK 的前提下，直接将Demo源码中 `PLVLiveCommonModule` 文件夹，拖入自家项目即可。Xcode 弹窗选项中，`Destination` 选择 `Copy items if needed`，`Added folders` 选择 `Create gourps` 。

* 若企业 **选择 使用 保利威的场景UI源码**，实现快速上线直播能力，保持各端视觉效果统一，则请在Demo源码中，将`云课堂场景PLVLiveCloudClassScene`、`直播带货场景PLVLiveEcommerceScene` 与上述步骤一样，也直接拖入自家项目即可。
* 若企业 **选择 不使用 保利威的场景UI源码**，计划自行实现UI层代码，则参考以下：

```
 以 “创建一个播放器，进行直播观看” 为例：
 
（1）面向Common层开发，找到 PLVLiveCommonModule - Modules - Player 文件夹下的 PLVPlayerPresenter.h 类文件  
（2）简单阅读 PLVPlayerPresenter.h 的注释说明、使用演示  
（3）在自家控制器中，引入 #import "PLVPlayerPresenter.h"  
（4）在自家控制器中，创建 PLVPlayerPresenter` 作为一个播放器对象 （注：大部分Presenter 内部均依赖于 PLVRoomData 房间配置数据，请提前参 PLVRoomLoginClient.h 了解如何配置房间数据）  
（5）根据自家业务需求，面向 PLVPlayerPresenter.h 使用对外暴露的方法 和 Delegate回调。  

按以上步骤，即可快速集成拥有完整能力的 保利威播放器，进行直播观看。
其他 连麦功能、聊天功能、PPT功能、互动功能等，均可按此步骤进行快速集成。
（注：不建议直接修改 Presenter.m 内部代码，否则将可能影响后续升级的便捷性。有特殊需求的，需要修改的，可直接与我们技术支持联系，我们将针对性提供解决方案）
```

 

## 6.1.4 Common层文件夹目录结构

`PLVLiveCommonModule` 文件夹的目录结构如下：

```
.
└── PLVLiveCommonModule
    └── GeneralUI 提供了一些多场景通用的 UI 控件，Modules 文件夹提供了各个功能的基础模块：
    	├── PLVAdvView
    	├── LogoView
    	├── PLVAlbum
    	├── PLVEmoticons
    	├── PLVKeyboard
    	├── PLVMarquee
    	├── PLVPageController
    	├── PLVPhotoBrowser
    	├── PLVProgressSlider
    	└── ZJZDanMu
    └── Modules
    	├── Room 提供直播间的登录辅助类 PLVRoomLoginClient 和直播间数据管理器类 PLVRoomDataManager
    	├── PPT  提供通用的 PPT 视图 PLVPPTView
    	├── Chatroom 提供了聊天室模块的 presenter 类 PLVChatroomPresenter
    	├── Interact 提供各个互动功能的封装类和支持各种互动类型的互动视图 PLVInteractView
    	├── LinkMic  提供了连麦模块的 presenter 类 PLVLinkMicPresenter
    	└── Player   提供了播放器模块的 presenter 类 PLVPlayerPresenter
```
