StudioService.class.php 2.38 KB
<?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
        ];
    }
}