直播流程:
- 生成推流地址,使用推流软件(例:OBS)设置参数推流;
- 获取拉流地址,进行播放;
在开发环节php作为服务端主要责任就是返回推流地址以及拉流播放地址其它也没什么;关于地址阿里的只给出了文档并没有给出详细的sdk方法,具体生成还得自定义,话不多说上代码:
/**
* 生成推流地址
* @param $streamName 流名
* @param $vhost 加速域名
* @param $time 有效时间单位秒
*/
public function getPushSteam($streamName='test1',$type='rtmp',$time=3600){
$time = time()+$time;
$vhostName = self::$vhostName;
$pushUrl = self::$pushUrl;
$appName = self::$appName;
$authKey=self::$authKey;
$url = '';
if($authKey){
$auth =md5('/'.$appName.'/'.$streamName.'-'.$time.'-0-0-'.$authKey);
$url =$pushUrl.'/'.$appName.'/'.$streamName.'?vhost='.$vhostName.'&auth_key='.$time.'-0-0-'.$auth;
}else{
$url = $pushUrl.'/'.$appName.'/'.$streamName.'?vhost='.$vhostName;
}
switch ($type){
case 'rtmp':
$url = 'rtmp://'.$url;
break;
case 'flv':
$url = 'http://'.$url;
break;
case 'm3u8':
$url = 'http://'.$url;
break;
}
return $url;
}
/**
* 生成拉流地址
* @param $streamName 流名
* @param $vhost 加速域名
* @param $type 视频格式 支持rtmp、flv、m3u8三种格式
*/
public function getPullSteam($streamName='test1',$type='rtmp',$quality='',$time=3600){
$time = time()+$time;
$appName = self::$appName;
$authKey = self::$authKey;
$vhostName = self::$vhostName;
$url='';
if(strlen($quality)>0) $quality = '_'.$quality;
switch ($type){
case 'rtmp':
$host = 'rtmp://'.$vhostName;
$url = '/'.$appName.'/'.$streamName.$quality;
break;
case 'flv':
$host = 'http://'.$vhostName;
$url = '/'.$appName.'/'.$streamName.$quality.'.flv';
break;
case 'm3u8':
$host = 'http://'.$vhostName;
$url = '/'.$appName.'/'.$streamName.'.m3u8';
break;
}
if($authKey){
$auth =md5($url.'-'.$time.'-0-0-'.$authKey);
$url = $host.$url.'?auth_key='.$time.'-0-0-'.$auth;
}else{
$url = $host.$url;
}
return $url;
}
写在后面:阿里直播和点播真心不好使,不推荐使用;不论是文档还是sdk关于php的都不是很完善,阿里这块的开发似乎更新完善文档进度很慢;提交工单回复的还都是文档链接,打客服很难接进去,所以不推荐