StudioService.class.php
2.38 KB
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
<?php
/**
* 腾讯云直播表
*/
namespace Common\Service;
use Com\LiveSDK;
use Common\Common\Constant;
use Common\Model\MainModel;
use Common\Model\StudioModel;
class StudioService extends AbstractService
{
/**
* 直播室状态 0: 禁用 1: 允许推流 2: 断流
*/
const STREAM_STATUS_DISABLED = 0;
const STREAM_STATUS_ALLOW = 1;
const STREAM_STATUS_CUT_OFF = 2;
// 构造方法
public function __construct()
{
$this->_d = new StudioModel();
parent::__construct();
}
/**
* 根据直播数据 获取直播地址
* @param $lmDetail
* @return array
*/
public function liveNameAndUrlByLmId($lmDetail)
{
$studioDetail = $this->_d->get_by_conds(['lm_id' => $lmDetail['lm_id']]);
$streamUrl = isset($studioDetail['stream_url']) ? $studioDetail['stream_url'] : '';
$streamName = isset($studioDetail['stream_name']) ? $studioDetail['stream_name'] : '';
$liveSdk = new LiveSDK();
// 如果已经有直播数据了
if (!empty($studioDetail)) {
$mainModel = new MainModel();
$mainDetail = $mainModel->get($lmDetail['lm_id']);
// 开始时间 变了
if ($mainDetail['start_time'] != $lmDetail['start_time']) {
// 获取直播推流地址
list($streamUrl, $streamName) = $liveSdk->getPushUrl(
$studioDetail['stream_id'],
round($lmDetail['start_time'] / 1000 + Constant::LIVE_TOTAL_PLAYING_TIME * 60 * 60)
);
// 更新推流名称
$this->update($studioDetail['ls_id'], ['stream_name' => $streamName]);
}
} else {
// 生成直播唯一标示
$streamId = $liveSdk->getLiveCode();
// 获取直播推流地址
list($streamUrl, $streamName) = $liveSdk->getPushUrl(
$streamId,
round($lmDetail['start_time'] / 1000 + Constant::LIVE_TOTAL_PLAYING_TIME * 60 * 60)
);
// 记录直播数据
$this->_d->insert([
'lm_id' => $lmDetail['lm_id'],
'stream_id' => $streamId,
'stream_url' => $streamUrl,
'stream_name' => $streamName,
]);
}
return [
$streamUrl,
$streamName
];
}
}