1 | <?php |
||
9 | class AppClient |
||
10 | { |
||
11 | private $auth; |
||
12 | private $baseURL; |
||
13 | |||
14 | public function __construct(Auth $auth) |
||
15 | { |
||
16 | $this->auth = $auth; |
||
17 | |||
18 | $this->baseURL = sprintf("%s/%s/apps", Config::RTCAPI_HOST, Config::RTCAPI_VERSION); |
||
19 | } |
||
20 | |||
21 | /* |
||
22 | * hub: 直播空间名 |
||
23 | * title: app 的名称 注意,Title 不是唯一标识,重复 create 动作将生成多个 app |
||
24 | * maxUsers:人数限制 |
||
25 | * NoAutoKickUser: bool 类型,可选,禁止自动踢人(抢流)。默认为 false , |
||
26 | 即同一个身份的 client (app/room/user) ,新的连麦请求可以成功,旧连接被关闭。 |
||
27 | */ |
||
28 | public function createApp($hub, $title, $maxUsers = null, $noAutoKickUser = null) |
||
42 | |||
43 | /* |
||
44 | * appId: app 的唯一标识,创建的时候由系统生成。 |
||
45 | * Title: app 的名称, 可选。 |
||
46 | * Hub: 绑定的直播 hub,可选,用于合流后 rtmp 推流。 |
||
47 | * MaxUsers: int 类型,可选,连麦房间支持的最大在线人数。 |
||
48 | * NoAutoKickUser: bool 类型,可选,禁止自动踢人。 |
||
49 | * MergePublishRtmp: 连麦合流转推 RTMP 的配置,可选择。其详细配置包括如下 |
||
50 | Enable: 布尔类型,用于开启和关闭所有房间的合流功能。 |
||
51 | AudioOnly: 布尔类型,可选,指定是否只合成音频。 |
||
52 | Height, Width: int64,可选,指定合流输出的高和宽,默认为 640 x 480。 |
||
53 | OutputFps: int64,可选,指定合流输出的帧率,默认为 25 fps 。 |
||
54 | OutputKbps: int64,可选,指定合流输出的码率,默认为 1000 。 |
||
55 | URL: 合流后转推旁路直播的地址,可选,支持魔法变量配置按照连麦房间号生成不同的推流地址。如果是转推到七牛直播云,不建议使用该配置。 |
||
56 | StreamTitle: 转推七牛直播云的流名,可选,支持魔法变量配置按照连麦房间号生成不同的流名。例如,配置 Hub 为 qn-zhibo ,配置 StreamTitle 为 $(roomName) ,则房间 meeting-001 的合流将会被转推到 rtmp://pili-publish.qn-zhibo.***.com/qn-zhibo/meeting-001地址。详细配置细则,请咨询七牛技术支持。 |
||
57 | */ |
||
58 | public function updateApp($appId, $hub, $title, $maxUsers = null, $mergePublishRtmp = null, $noAutoKickUser = null) |
||
76 | |||
77 | /* |
||
78 | * appId: app 的唯一标识,创建的时候由系统生成。 |
||
79 | */ |
||
80 | public function getApp($appId) |
||
86 | |||
87 | /* |
||
88 | * appId: app 的唯一标识,创建的时候由系统生成 |
||
89 | */ |
||
90 | public function deleteApp($appId) |
||
96 | |||
97 | /* |
||
98 | * 获取房间的人数 |
||
99 | * appId: app 的唯一标识,创建的时候由系统生成。 |
||
100 | * roomName: 操作所查询的连麦房间。 |
||
101 | */ |
||
102 | public function listUser($appId, $roomName) |
||
108 | |||
109 | /* |
||
110 | * 踢出玩家 |
||
111 | * appId: app 的唯一标识,创建的时候由系统生成。 |
||
112 | * roomName: 连麦房间 |
||
113 | * userId: 请求加入房间的用户ID |
||
114 | */ |
||
115 | public function kickUser($appId, $roomName, $userId) |
||
121 | |||
122 | /* |
||
123 | * 获取房间的人数 |
||
124 | * appId: app 的唯一标识,创建的时候由系统生成。 |
||
125 | * prefix: 所查询房间名的前缀索引,可以为空。 |
||
126 | * offset: int 类型,分页查询的位移标记。 |
||
127 | * limit: int 类型,此次查询的最大长度。 |
||
128 | * GET /v3/apps/<AppID>/rooms?prefix=<RoomNamePrefix>&offset=<Offset>&limit=<Limit> |
||
129 | */ |
||
130 | public function listActiveRooms($appId, $prefix = null, $offset = null, $limit = null) |
||
150 | |||
151 | /* |
||
152 | * appId: app 的唯一标识,创建的时候由系统生成。 |
||
153 | * roomName: 房间名称,需满足规格 ^[a-zA-Z0-9_-]{3,64}$ |
||
154 | * userId: 请求加入房间的用户 ID,需满足规格 ^[a-zA-Z0-9_-]{3,50}$ |
||
155 | * expireAt: int64 类型,鉴权的有效时间,传入以秒为单位的64位Unix |
||
156 | 绝对时间,token 将在该时间后失效。 |
||
157 | * permission: 该用户的房间管理权限,"admin" 或 "user",默认为 "user" 。 |
||
158 | 当权限角色为 "admin" 时,拥有将其他用户移除出房间等特权. |
||
159 | */ |
||
160 | public function appToken($appId, $roomName, $userId, $expireAt, $permission) |
||
170 | |||
171 | private function get($url, $cType = null) |
||
181 | |||
182 | private function delete($url, $cType = 'application/json') |
||
192 | |||
193 | private function post($url, $body, $cType = 'application/json') |
||
204 | } |
||
205 |
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.
Let’s take a look at an example:
As you can see in this example, the array
$myArray
is initialized the first time when the foreach loop is entered. You can also see that the value of thebar
key is only written conditionally; thus, its value might result from a previous iteration.This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.