直播源码中一对一直播功能的实现教程

在传统直播APP中,由于受众过多,主播无法及时对每一个粉丝做出反馈,因此粉丝难免会希望能与主播进行一对一视频聊天,针对这种情况,为了实现一对一直播功能,我们的程序员对直播源码进行了开发,将该功能写入了直播源码中。
操作流程大约是:粉丝首先对主播进行一对一直播邀请,这个邀请相当于用户获取自己的直播流将之推送云服务器(如到阿里云或者腾讯云等),尚若主播同意进行一对一直播,那么就要把用户推的流从云服务器上拉下来,下面我们以腾讯云服务器为例,讲一下这部分的流程。

    $uid=$this->uid;
    $configpri = $this->getConfigPri(); 

$bizid = $configpri['tx_bizid']; //申请的腾讯云直播ID
$push_url_key = $configpri['tx_push_key']; //申请的腾讯云直播key
$tmp_id = str_replace(array("@","#","-"),"_",$uid);
$now_time = time();
    $now_time2 = $now_time + 3*60*60;
    $txTime = dechex($now_time2); 
$live_code = $bizid . "_" . $tmp_id . "_" . $txTime;

   $txSecret = md5($push_url_key . $live_code . $txTime);
   $safe_url = "&txSecret=" . $txSecret."&txTime=" .$txTime;
$push_url = "rtmp://livepush.yunbaozb.com/live/" . $live_code . "?bizid=" . $bizid .$safe_url;
$play_url = "rtmp://liveplay.yunbaozb.com/live/".$live_code. "?bizid=" . $bizid .$safe_url;
$info=array(
            "pushurl" => $push_url,
            "timestamp" => $now_time, 
            "playurl" => $play_url
        );

通过上面的代码,我们可以实现主播与用户之间流的相互交换,主播与用户进行一对一直播的过程可以是免费的也可以是计时收费的,在主播与用户进行一对一直播的过程中,其他用户无法再对主播进行一对一直播邀请,所以我们要在用户对主播发出一对一直播申请时,对主播目前的直播状态进行检查。

    /* 直播状态 */
    public function checkLive($uid,$liveuid,$stream){
        $islive=DI()->notorm->users_live
                    ->select("islive,type,type_val,starttime")
                    ->where('uid=? and stream=?',$liveuid,$stream)
                    ->fetchOne();                
        if(!$islive || $islive['islive']==0){
            return 1005;
        }
        $rs['type']=$islive['type'];
        $rs['type_val']='0';
        $rs['type_msg']='';
            $userinfo=DI()->notorm->users
                    ->select("issuper")
                    ->where('id=?',$uid)
                    ->fetchOne();
            if($userinfo && $userinfo['issuper']==1){
if($islive['type']==6 || $islive['type']==9){
return 1007;
}
                $rs['type']='0';
                $rs['type_val']='0';
                $rs['type_msg']='';   
                return $rs;
            }
        $rs['xianmian']='0';    
        if($islive['type']==1){
            $rs['type_msg']=md5($islive['type_val']);
        }else if($islive['type']==2){
            $rs['type_msg']='本房间为收费房间,需支付'.$islive['type_val'].'钻石';
            $rs['type_val']=$islive['type_val'];
            $isexist=DI()->notorm->users_coinrecord
                        ->select('id')
                        ->where('uid=? and touid=? and showid=? and action="roomcharge" and type="expend"',$uid,$liveuid,$islive['starttime'])
                        ->fetchOne();
            if($isexist){
                $rs['type']='0';
                $rs['type_val']='0';
                $rs['type_msg']='';
            }
        }else if($islive['type']==3){
            $rs['type_val']=$islive['type_val'];
            $rs['type_msg']='本房间为计时房间,每分钟需支付'.$islive['type_val'].'钻石';
        }else if($islive['type']==6){
            $rs['type_val']=$islive['type_val'];
            $rs['type_msg']='本房间为1V1房间,每分钟需支付'.$islive['type_val'].'钻石';
        }else if($islive['type']==9){
            $check = DI()->redis -> hget('1v1a',$liveuid);
            if($check == $uid){
                $rs['type_val']=$islive['type_val'];
                $rs['type_msg']='本房间为1V1房间,每分钟需支付'.$islive['type_val'].'钻石';    
                $userinfo = DI()->notorm->users->select("xianmian")->where("id = {$liveuid}")->fetchOne();
                $configpub = $this->getConfigPub();
                $rs['xianmian'] = $userinfo['xianmian'] == 0 ? $configpub['xianmian'] * 60 : $userinfo['xianmian'] * 60;
            }else{
                return 1008;
            }
        }

有两个问题请大家注意一下:
1、如果获取流时失败,请检查一下配置的云的ID与key是否正确,如果依然失败,就去查看下一下云API文档以及demo以获取详细解释。
2、“检查直播状态”的过程出现问题时,可以检查一下主播在与用户成功发起一对一直播后有没有改变主播的状态
以上就是关于直播源码中一对一直播功能实现的源码解决办法,更多干货内容会在我的CSDN博客中逐渐放出,有需要的朋友可以关注我,有问题可以在评论区中提问我。
声明:本文为原创文章,转载请注明出处及作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值