直播源码中一对一直播功能的实现教程
2019-01-14 10:01
295 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yb1314111/article/details/86468548
在传统直播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博客中逐渐放出,有需要的朋友可以关注我,有问题可以在评论区中提问我。
声明:本文为原创文章,转载请注明出处及作者
相关文章推荐
- 安卓Android手机直播推送同步录像功能设计与实现源码
- 安卓Android手机直播推送同步录像功能设计与实现源码
- 一对一直播源码中个人主页折叠悬浮效果的实现方法
- 一对一社交直播源码是怎么火起来的,一对一视频直播实现形式
- [转]EasyPusher实现安卓Android手机直播推送同步录像功能(源码解析)
- ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK
- 一对一视频直播源码附近功能中经纬度之间的换算
- EasyPusher实现安卓Android手机直播推送同步录像功能(源码解析)
- phpcms v9 实现筛选功能图文教程
- 第二人生的源码分析(4)Log调试功能的实现
- php实现在线通讯录功能(附源码)
- 使用php+ajax实现登录功能教程-1
- 怎样用C#实现完整文档打印功能-.NET教程,C#语言
- Android实战简易教程<二十七>(Android设置头像上传功能实现)
- jQuery+Cookie实现切换皮肤功能【附源码下载】
- 用JavaScript实现页面重定向功能的教程
- jQuery实现对无序列表的排序功能(附demo源码下载)
- PHP+jQuery实现自动补全功能源码
- 一对一直播源码优化文案说明
- [置顶] hls直播实现源码V2(h264,aac流输入,ffmpeg实现,MFC,VC环境,ts,m3u8)