记录一次完整对接腾讯云直播 以及直播聊天室
/**
* @param mixed $arg1
* @author xusir
* @date: 2022/6/13
* @createTime: 14:13
* @remark:开启直播
*/
public function startLive(){
$post = $_POST;
if(!$post['access_token'] || !$post['live_name'] || !$post['live_img']) return $this->asJson(['code'=>1,'msg'=>'参数不全']);
$time = date('Y-m-d H:i:s', strtotime('+365day'));
$user = Db::name('wd_xcx_user')->where(['access_token'=>$post['access_token']])->find();
$streamName = $user['id']."zhibojian";
$push_url = self::getPushUrl($streamName,$time);//推流地址
$pull_url = self::getLivePullUrl($streamName,$time);//推流地址
$post['push_url'] = $push_url;
$post['pull_url'] = $pull_url;
$post['status'] = 1;
$post['uniacid'] = 51;
unset($post['suid']);
$check = Db::name("wd_xcx_live_home")->where(['access_token'=>$post['access_token']])->find();
$groupId = $this->liveGroup($user['id']);
if($check){
// echo "<pre>";
// var_dump($groupId);exit;
$post['group_id'] = $groupId['GroupId'];
$res = Db::name('wd_xcx_live_home')->where(['access_token'=>$post['access_token']])->update($post);
if($res !=false){
$data['live_id'] = $check['id'];
$data['group_id'] = $groupId['GroupId'];
return $this->asJson(['code'=>0,'msg'=>'创建成功','data'=>$data]);
}else{
return $this->asJson(['code'=>1,'msg'=>'直播间创建失败']);
}
}
$live_id = Db::name('wd_xcx_live_home')->insertGetId($post);
if($live_id){
$data['live_id'] = $live_id;
$data['group_id'] = $groupId['GroupId'];
return $this->asJson(['code'=>0,'msg'=>'创建成功','data'=>$data]);
}else{
return $this->asJson(['code'=>1,'msg'=>'直播间创建失败']);
}
}
/**
* 获取推流地址
* @param $streamName 填写自定义的流名称 StreamName,例如:liveteststream。可以理解为唯一标识
*
* @return string
*/
private static function getPushUrl($streamName,$time) {
// $streamName = mt_rand(0000,9999);
$live = Db::name('wd_xcx_live_set')->where('uniacid',51)->find();
$key = $live['push_key']; //key为配置推流域名主key,可以去腾讯控制台->域名管理->管理->推流配置 里面可以看到主key
$domain = $live['push_url'];//您的推流域名
// $time = config('live.time');//过期时间,自行设置 例:c
$txTime = strtoupper(base_convert(strtotime($time), 10, 16));
//txSecret = MD5( KEY + streamName + txTime )
$txSecret = md5($key . $streamName . $txTime);
$ext_str = "?" . http_build_query(array(
"txSecret" => $txSecret,
"txTime" => $txTime
));
return "rtmp://" . $domain . "/live/" . $streamName . (isset($ext_str) ? $ext_str : "");
}
/**
* 获取 拉流 地址
* 如果不传key和过期时间,将返回不含防盗链的url
*
* @param $streamName : 您用来区别不同推流地址的唯一流名称
*
* @return String url
*/
public static function getLivePullUrl($streamName,$time)