php对接腾讯云直播,聊天,im,云录制产生回放

首先先在腾讯云中开通这三项
在这里插入图片描述
IM中创建项目
在这里插入图片描述
云直播
解析推拉流地址:
在这里插入图片描述

	$domain = $this->getConfig('anchor_push');   //推流地址
	$domainpull = $this->getConfig('anchor_pull');    //拉流地址
	$streamName = 'kangfuyuan'.$res;    //直播间ID(唯一的)
	$key = $this->getConfig('anchor_push_key');    //推流key (平台上自己获取的)
	$keypull = $this->getConfig('anchor_pull_key');   //拉流key (平台上自己获取的)
	$time = date('Y-m-d H:i:s',time()+86400);   
	//            生成推流地址
	$push_url = $this->getPushUrl($domain,$streamName,$key,$time);
	//            生成拉流地址
	$pull_url = $this->getpullUrl($domainpull,$streamName,$keypull,$time);
	//            录制视频(云点播,手动点击录制)
	
	$Taskre = $this->CreateRecordTaskLuzhi($streamName);
	//           dump($Taskre);exit;
	//            创建直播间群组   IM创建群组
	$data_ = [
	'Type' => 'ChatRoom',
	'Name' => $data['title'],
	'MaxMemberCount' => '1000',
	'ApplyJoinOption' => 'NeedPermission'
	];
	//            创建群组
	$create_group = $this->common('create_group',$data_);
	if($create_group['ErrorCode'] !== 0){
	$result['code'] = 0;
	$result['msg'] = $create_group['ErrorInfo'];
	return_json_encode($result);
	}
	//            注册腾讯云账号(每个账号都需要注册腾讯云账号  建议放在注册接口中执行)
	controller('TencentIm')->account_import($id);
	//            加入群聊
	$add = $this->add_group_id($create_group['GroupId'],$id);
	//            dump($add);exit;
	Db::name('broadcast')->where('id',$res)->update(array('push_url'=>$push_url,'pull_url'=>$pull_url,'TaskId'=>$Taskre['TaskId'],'RequestId'=>$Taskre['RequestId'],'group_id'=>$create_group['GroupId']));
	//            Db::name('broadcast')->where('id',$res)->update(array('push_url'=>$push_url,'pull_url'=>$pull_url,'group_id'=>$create_group['GroupId']));
	$data_info = Db::name('broadcast')->where('id',$res)->find();
	$data_info['cover_img'] = setFilePath($data_info['cover_img']);
	$this->ApiReturn(1,'开播成功',$data_info);

生成推拉流地址

/**
     * 获取推流地址
     * 如果不传key和过期时间,将返回不含防盗链的url
     * @param domain 您用来推流的域名
     *        streamName 您用来区别不同推流地址的唯一流名称
     *        key 安全密钥
     *        time 过期时间 sample 2016-11-12 12:00:00
     * @return String url
     */
    public function getPushUrl($domain, $streamName, $key = null, $time = null){
        if($key && $time){
            $txTime = strtoupper(base_convert(strtotime($time),10,16));
            $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 : "");
    }
    public function getPullUrl($domain, $streamName, $key = null, $time = null){
        if($key && $time){
            $txTime = strtoupper(base_convert(strtotime($time),10,16));
            $txSecret = md5($key.$streamName.$txTime);
            $ext_str = "?".http_build_query(array(
                    "txSecret"=> $txSecret,
                    "txTime"=> $txTime
                ));
        }
        return "http://".$domain."/live/".$streamName .".m3u8". (isset($ext_str) ? $ext_str : "");
    }

录制视频(云点播,手动点击录制,官方有两种录制,一种是开直播自动录制)

//录制视频
public function CreateRecordTaskLuzhi($streamName){
        try {
            $cred = new Credential("AKIDoXd******0C8zaAaPyyg8H8fwveeRXty", "1p565rYx5C3dw******6rKsBD5fGbR1e");
            $httpProfile = new HttpProfile();
            $httpProfile->setEndpoint("live.tencentcloudapi.com");
            $clientProfile = new ClientProfile();
            $clientProfile->setHttpProfile($httpProfile);
            $client = new LiveClient($cred, "ap-guangzhou", $clientProfile);
            $req = new CreateRecordTaskRequest();
            $params = array(
                "StreamName" => $streamName,
                "DomainName" => "kfytui.zzmzrj.com",
                "AppName" => "live",
                "StartTime" => time(),
                "EndTime" => time()+20*60*60,
            );
            $req->fromJsonString(json_encode($params));
            $resp = $client->CreateRecordTask($req);
            return json_decode($resp->toJsonString(),true);
        }
        catch(TencentCloudSDKException $e) {
            echo $e;
        }
    }
    //停止录制
    public function StopRecordTaskTzhi($TaskId){
        try {

             $cred = new Credential("AKIDoXd******0C8zaAaPyyg8H8fwveeRXty", "1p565rYx5C3dw******6rKsBD5fGbR1e");
            $httpProfile = new HttpProfile();
            $httpProfile->setEndpoint("live.tencentcloudapi.com");

            $clientProfile = new ClientProfile();
            $clientProfile->setHttpProfile($httpProfile);
            $client = new LiveClient($cred, "ap-guangzhou", $clientProfile);

            $req = new StopRecordTaskRequest();

            $params = array(
                "TaskId" => $TaskId,
            );
            $req->fromJsonString(json_encode($params));

            $resp = $client->StopRecordTask($req);
            return json_decode($resp->toJsonString(),true);
//            print_r($resp->toJsonString());
        }
        catch(TencentCloudSDKException $e) {
            echo $e;
        }
    }
//    腾讯云创建群组(临时聊天群)
    public function common($Interface,$data){
//        $Interface = 'create_group';
        $sdkappid = '1400504***';
        $identifier = 'administrator';
        $usersig = '************B3mW2h15-rmNBCjKIIA22R4caayS6iyThUFL17pi3Pdw7nzfbb1LhLxQJmG8CmQyYhG00XGrgQNTXUaVXom-oPOlEVbUuCBZYLgOBy3x0b*WxJyd4R0QaAUTXVP-Ms7vOZ4*D-hcr*PzfjqLRw8zie1G5xOFclX0XpGrJM*V6o0xjtZLK8Jq-cDMM5*3wBrOI0ZQ__';
        $random = '99999999';
        $url = 'https://console.tim.qq.com/v4/group_open_http_svc/'.$Interface.'?sdkappid='.$sdkappid.'&identifier='.$identifier.'&usersig='.$usersig.'&random='.$random.'&contenttype=json';
        $request = curl_post($url, $data);
        return $request;
    }
//    增加群成员
    public function add_group_id($group_id,$uid){
        $Interface = 'add_group_member';
        $sdkappid = '14005******';
        $identifier = 'administrator';
        $usersig = '******4R0QaAUTXVP-Ms7vOZ4*D-hcr*PzfjqLRw8zie1G5xOFclX0XpGrJM*V6o0xjtZLK8Jq-cDMM5*3wBrOI0ZQ__';
        $random = '99999999';

        $url = 'https://console.tim.qq.com/v4/group_open_http_svc/'.$Interface.'?sdkappid='.$sdkappid.'&identifier='.$identifier.'&usersig='.$usersig.'&random='.$random.'&contenttype=json';
        $data = [
            'GroupId' => $group_id,
            'MemberList' => [
                ['Member_Account' => "{$uid}"],
            ],
        ];
        $request = curl_post($url, $data);
        return $request;
    }
//    腾讯云注册账号
    public function account_import($usesrid='administrator')
    {
        $Interface = 'account_import';
        $sdkappid = '14005******';
        $identifier = 'administrator';
        $usersig = '********V6o0xjtZLK8Jq-cDMM5*3wBrOI0ZQ__';
        $random = '99999999';

        $url = 'https://console.tim.qq.com/v4/im_open_login_svc/'.$Interface.'?sdkappid='.$sdkappid.'&identifier='.$identifier.'&usersig='.$usersig.'&random='.$random.'&contenttype=json';
        $nick = Db::name('users')->field('nickname,headimgurl')->where('id',$usesrid)->find();
        $data = [
            'Identifier' => "{$usesrid}",
            'Nick' => $nick['nickname'],
            'FaceUrl' => setFilePath($nick['headimgurl']),
        ];
        $request = curl_post($url, $data);
        return $request;
    }
//补全文件路径
function setFilePath($file = null){
    if(!$file){
        return '';
    }
    $file = str_replace("\\","/",$file);
    /*************************************************/
    if(strstr($file,"http"))    return $file;
    if(strstr($file,"upload"))    return 'http://'.$_SERVER['HTTP_HOST'].$file;
    return "http://47.92.85.75/upload/".$file;
    /*************************************************/
    $pa = "/upload/".$file;
    if(file_exists(".".$pa))
    {
        $path="http://".$_SERVER['HTTP_HOST'].$pa;
        return $path;
    }else{
        return '';
    }
}
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值