<?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 ]; } }