liusuyi
2026-05-12 9f327c33730ba10cb2d89aff99b727502232e968
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
package com.ard.zlm.service;
 
import com.ard.gb28181.api.domain.Device;
import com.ard.qs.api.domain.QsDevice;
import com.ard.work.api.domian.ArdChannel;
import com.ard.zlm.api.domain.*;
import com.ard.zlm.common.InviteSessionType;
import com.ard.zlm.domain.MediaServerLoad;
import com.ard.zlm.domain.RecordInfo;
import com.ard.zlm.domain.Snap;
import java.util.List;
import java.util.Map;
 
/**
 * 媒体服务器Service接口
 *
 * @FileName IMediaServerService
 * @Description
 * @Author fengcheng
 * @date 2026-03-31
 **/
public interface IMediaServerService {
 
    /**
     * 获取默认的媒体服务器
     *
     * @return
     */
    ZlmMediaServer getDefaultMediaServer();
 
    /**
     * 添加媒体服务器
     *
     * @param zlmMediaServer
     */
    int add(ZlmMediaServer zlmMediaServer);
 
    /**
     * 修改媒体服务器
     *
     * @param zlmMediaServer
     */
    int update(ZlmMediaServer zlmMediaServer);
 
    /**
     * 删除媒体服务器
     *
     * @param zlmMediaServer
     */
    void delete(ZlmMediaServer zlmMediaServer);
 
    /**
     * 从数据库中获取所有媒体服务器
     *
     * @return
     */
    List<ZlmMediaServer> getAllFromDatabase();
 
    /**
     * 从数据库中获取指定id的媒体服务器
     *
     * @param id
     * @return
     */
    ZlmMediaServer getOneFromDatabase(String id);
 
    /**
     * 从数据库中获取指定id的媒体服务器
     *
     * @param id
     * @return
     */
    ZlmMediaServer getOne(String id);
 
    /**
     * 获取所有在线媒体服务器
     *
     * @return
     */
    List<ZlmMediaServer> getAllOnlineMediaServe();
 
    /**
     * 获取负载最小的媒体服务器
     *
     * @param hasAssist 是否包含辅助媒体服务器
     * @return
     */
    ZlmMediaServer getMediaServerForMinimumLoad(Boolean hasAssist);
 
    /**
     * 拉流播放
     *
     * @param streamPullPlay 拉流播放请求参数
     * @param callback       回调
     */
    void streamPullPlay(StreamPullPlay streamPullPlay, ErrorCallback<StreamInfo> callback);
 
    /**
     * 根据应用名和流ID获取播放地址, 通过zlm接口检查是否存在
     *
     * @param app           应用名
     * @param stream        流ID
     * @param mediaServerId 媒体服务器ID
     * @param addr          媒体服务器地址
     * @param authority     鉴权
     * @return
     */
    StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId, String addr, boolean authority);
 
    /**
     * 根据应用名和流ID获取播放地址, 只是地址拼接
     *
     * @param mediaServer 媒体服务器
     * @param app         应用名
     * @param stream      流ID
     * @param mediaInfo   媒体信息
     * @return
     */
    StreamInfo getStreamInfoByAppAndStream(ZlmMediaServer mediaServer, String app, String stream, MediaInfo mediaInfo);
 
    /**
     * 停止拉流播放
     *
     * @param streamPullPlay
     */
    void stopStreamPullPlay(StreamPullPlay streamPullPlay);
 
    /**
     * 点播成功时调用截图
     *
     * @param mediaServer media
     * @param app         app
     * @param stream      流id
     */
    String snapOnPlay(ZlmMediaServer mediaServer, String app, String stream);
 
    /**
     * 获取截图
     *
     * @param mediaServer
     * @param snap
     * @return
     */
    String getSnap(ZlmMediaServer mediaServer, Snap snap);
 
    /**
     * 创建RTP服务器
     *
     * @param mediaServer  zlm服务实例
     * @param app          应用名
     * @param streamId     流Id
     * @param ssrc         ssrc
     * @param port         端口, 0/null为使用随机
     * @param onlyAuto     是否只自动分配
     * @param disableAudio 是否禁用音频
     * @param reUsePort    是否重用端口
     * @param tcpMode      0/null udp 模式,1 tcp 被动模式, 2 tcp 主动模式。
     * @return
     */
    int createRTPServer(ZlmMediaServer mediaServer, String app, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode);
 
    /**
     * rtp播放
     *
     * @param rtpServerParam 创建rtp端口请求参数
     * @param callback
     * @return
     */
    void rtpPlay(RTPServerParam rtpServerParam, ErrorCallback<StreamInfo> callback);
 
    /**
     * 关闭RTP服务器
     *
     * @param mediaServerItem
     * @param streamId
     */
    void closeRTPServer(ZlmMediaServer mediaServerItem, String streamId);
 
    /**
     * 停止rtp播放
     *
     * @param rtpServerParam 创建rtp端口请求参数
     * @return
     */
    void stopRtpPlay(RTPServerParam rtpServerParam);
 
    /**
     * 判断流是否已经准备好
     *
     * @param mediaServer
     * @param rtp
     * @param streamId
     * @return
     */
    Boolean isStreamReady(ZlmMediaServer mediaServer, String rtp, String streamId);
 
    /**
     * 加载文件形成播放地址
     *
     * @param id       设备id
     * @param callback 回调
     * @return
     */
    void loadRecord(Long id, ErrorCallback<StreamInfo> callback);
 
    /**
     * 关闭流文件形成播放地址
     *
     * @param id 设备id
     */
    void closeStreams(Long id);
 
    /**
     * 获取流媒体服务器列表
     *
     * @return
     */
    List<ZlmMediaServer> getAll();
 
    /**
     * 测试流媒体服务
     *
     * @param ip     流媒体服务IP
     * @param port   流媒体服务HTT端口
     * @param secret 流媒体服务secret
     * @param type   流媒体服务类型
     * @return
     */
    ZlmMediaServer checkMediaServer(String ip, int port, String secret, String type);
 
    /**
     * 获取流信息
     *
     * @param app         应用名
     * @param stream      流ID
     * @param mediaServer 媒体服务器
     * @return
     */
    MediaInfo getMediaInfo(ZlmMediaServer mediaServer, String app, String stream);
 
    /**
     * 删除录制文件
     *
     * @param mediaServer
     * @param app
     * @param stream
     * @param date
     * @param fileName
     * @return
     */
    boolean deleteRecordDirectory(ZlmMediaServer mediaServer, String app, String stream, String date, String fileName);
 
    /**
     * 获取下载文件路径
     *
     * @param mediaServer
     * @param recordInfo
     * @return
     */
    DownloadFileInfo getDownloadFilePath(ZlmMediaServer mediaServer, RecordInfo recordInfo);
 
    /**
     * 设置录像播放速度
     *
     * @param mediaServer 使用的节点
     * @param app         应用名
     * @param stream      流id
     * @param stamp       播放速度
     * @param schema      播放协议
     */
    void seekRecordStamp(ZlmMediaServer mediaServer, String app, String stream, Double stamp, String schema);
 
    /**
     * 定位录像播放到制定位置
     *
     * @param mediaServer 使用的节点
     * @param app         应用名
     * @param stream      流ID
     * @param speed       要定位的时间位置,从录像开始的时间算起
     * @param schema      播放协议
     */
    void setRecordSpeed(ZlmMediaServer mediaServer, String app, String stream, Integer speed, String schema);
 
    /**
     * 关闭流
     *
     * @param mediaServer 媒体服务器
     * @param app         应用名
     * @param stream      流ID
     */
    void closeStreams(ZlmMediaServer mediaServer, String app, String stream);
 
    /**
     * 开始播放
     *
     * @param channel  通道信息
     * @param record   是否录制
     * @param callback 回调
     */
    void play(ArdChannel channel, Boolean record, ErrorCallback<StreamInfo> callback);
 
    /**
     * 获取流媒体服务器负载
     *
     * @param mediaServer
     * @return
     */
    MediaServerLoad getLoad(ZlmMediaServer mediaServer);
 
    /**
     * 重启流媒体
     *
     * @param mediaServer 流媒体ID
     * @return
     */
    void restartServer(ZlmMediaServer mediaServer);
 
    /**
     * 生成推流地址
     *
     * @param id     设备id
     * @param callId
     * @return
     */
    Map<String, Object> getStreamPushAddress(Long id, String callId);
 
    /**
     * 推流播放
     *
     * @param id
     * @param callback
     */
    void streamPullPush(Long id, ErrorCallback<StreamInfo> callback);
 
    /**
     * gb28181 播放
     *
     * @param qsDevice
     * @param gbDevice
     * @param callback
     */
    void startGb28181Play(QsDevice qsDevice, Device gbDevice, ErrorCallback<StreamInfo> callback);
 
    /**
     * 连接rtp服务
     *
     * @param mediaServer
     * @param address
     * @param port
     * @param stream
     * @return
     */
    Boolean connectRtpServer(ZlmMediaServer mediaServer, String address, int port, String stream);
 
    /**
     * gb28181 停止点播
     *
     * @param type
     * @param qsDevice
     * @param device
     * @param stream
     */
    void stopGb28181Play(InviteSessionType type, QsDevice qsDevice, Device device, String stream);
 
}