第一次接触七牛云直播连麦功能,中间遇到过很多困难,爬过很多坑,也让自己学到了很多。好了,言归正传分享一个直播连麦的遇到过得坑。
1.首先配置好七牛的配置
这些
-
$options= [
'ak' => '',//ak
'sk' => ',//sk
'hubName'=>'',//七牛云名字
'publishurl'=>'',//推流地址
'playurl'=>''//播放地址
];
2.就是七牛云的demo创建房间,参考七牛云的demo
3.配置连麦
前提主播和用户都是经过环信进行授权的,只有进行环信授权的用户和主播才能进行连麦和进入房间。
创建连麦房间主播端:
- $create_room = $qn->creatroom($qiniu_room_id,$qiniu_room_name);
//七牛创建房间
这里$qiniu_room_id,是我们自己生成的随机数,数字和字母的组合必须是这两个,位数是3-50之间,$qiniu_room_name这也是我们自己生成的七牛房间号,千万千万不要有汉字,也是字母和数字的组合3-64之间。传到七牛sdk进行授权返回的连麦参数
我们传过去的几个参数也就是上面创建连麦时间$create_room;我把生成的随机数放在这里,完成的后台逻辑
-
//七牛生成流地址
$qn = new QiniuPili();
$play_address = $qn->push_address();
$chars = "abcdefghijklmnopqrstuvwxyz123456789";
mt_srand(10000000*(double)microtime());
for ($i = 0, $str = '', $lc = strlen($chars)-1; $i < 6; $i++){
$str .= $chars[mt_rand(0, $lc)];
}
$qiniu_room_id = 'qiniu-'.$str.rand(10, 99).'-b'.rand(100.999).'-'.rand(1000,9999);
$qiniu_room_name = 'qiniu-'.rand(100,999); // $qiniu_room_id = 'qiniu-1b5d0c9a-b239-4223-8a3a-d2c846cc5433'; //
$qiniu_room_name = 'qiniu-123';
$create_room = $qn->creatroom($qiniu_room_id,$qiniu_room_name); //七牛创建房间
/**
* @七牛创建房间
* 七牛的
*/
function creatroom($id,$room_name){
$ak = $this->ak;
$sk = $this->sk;
//创建hub
$mac = new \Qiniu\Pili\Mac($ak, $sk);
$client = new \Qiniu\Pili\RoomClient($mac);
try {## 标题 ##
$client->createRoom($id,$room_name);
$room = $client->getRoom($room_name); // pre($room);die;
//鉴权的有效时间: 24个小时.
$token = $client->roomToken($room_name, $id, 'admin', (time()+3600*24));
} catch (\Exception $e) {
//echo "Error:", $e, "\n";
}
$result = ['room_id'=>$room['owner_id'],'room_name'=>$room['room_name'],'token'=>$token];
return $result;
}
获取到的参数后两个作为连麦使用的参数,一个是房间号,一个是token值,房间的id千万千万不要使用第一个参数,因为不能使用,我们测了很久发现七牛给的这个id是错误的,这里是我最浪费时间的地方,经验主义害死人呢。使用的房间号是我们自己生成的主播房间号就是这个 $qiniu_room_id,上面后台代码那里,这里是主播端的。
现在我们来看看用户端,用户端和主播端没有什么变化,来看看后台用户传的参数
//七牛生成流地址
$chars = "abcdefghijklmnopqrstuvwxyz123456789";
mt_srand(10000000*(double)microtime());
for ($i = 0, $str = '', $lc = strlen($chars)-1; $i < 6; $i++){
$str .= $chars[mt_rand(0, $lc)];
}
$qiniu_room_id = 'qiniu-'.$str.rand(10, 99).'-b'.rand(100.999).'-'.rand(1000,9999);
$qiniu_room_name = $live['qiniu_room_name'];
// $qiniu_room_id = 'qiniu-1b5d0c9a-b239-4223-8a3a-d2c846cc2577';
// $qiniu_room_name = 'qiniu-123';
$qn = new QiniuPili();
$a = $qn->watch_room($qiniu_room_id,$qiniu_room_name); //七牛创建房间
$live['user_qiniu_id'] = $qiniu_room_id;
$live['user_qiniu_token'] = $a;
下面是七牛云那边进行授权的连麦的东西
/**
* @观众端
*/
function watch_room($id,$room_name){
$ak = $this->ak;
$sk = $this->sk;
// $room_name = '22173';
// $id = 'admin';
//创建hubuser
$mac = new \Qiniu\Pili\Mac($ak, $sk);
$client = new \Qiniu\Pili\RoomClient($mac);
try {
// $client->createRoom($id,$room_name);
$client->createRoom($room_name);
$room = $client->getRoom($room_name);
//鉴权的有效时间: 24个小时.
$token = $client->roomToken($room_name, $id,'user', (time()+3600*24));
} catch (\Exception $e) {
//echo "Error:", $e, "\n";
}
// $result = ['user_room_id'=>$room['owner_id'],'user_room_name'=>$room['room_name'],'user_token'=>$token];
return $token;
}
然后app端拿到参数进行配置,连麦就可以进行。如有不好,欢迎拍砖。