缘由
最近帮朋友看一个直播网站的源码,发现这份直播源码借助 阿里云 、腾讯云这些大公司提供的SDK 可以非常方便的搭建一个直播网站。下面我们来给大家讲解下如何借助 腾讯云 我们搭建一个简易的 直播示例
云直播架构
![600](http://cdn.pic1.54php.cn/20190422/3f89f433141c188d2c98ef2ac11de96a.jpg?imageView/2/w/600)
主要分三部分
1:直播端 通过设备 直接通过 直播服务提供方 的推流 地址 进行直播视频,这些直播流视频 会推送到 直播服务提供方 直播服务器云存储
2:直播服务提供方 会将 云存储的 视频流 转发到 CDN 节点
3:观众 就通过 各种终端 看直播(此时就会根据不同游客 会 访问不同的节点 )
生成推送流URL
根据 腾讯云直播官方 https://cloud.tencent.com/product/lvb 介绍,所有用户都可以领取20G 的流量,够我们测试了。
准备工作
1:官方注册账号 领取20G流量 官方地址: https://cloud.tencent.com/product/lvb
2:需要一个备案过的域名(用户播放直播视频域名) 。这就需要自己购买了
3:支持推流的app。易推流 只支持IOS 、腾讯官方小直播 DEMO:https://cloud.tencent.com/document/product/267/32732#.E5.B0.8F.E7.9B.B4.E6.92.AD-demo
推流URL代码
/**
* 获取推流地址
* 如果不传key和过期时间,将返回不含防盗链的url
* @param domain 您的推流域名
* stream_id 您用来区别不同推流地址的唯一流ID
* key 安全密钥
* time 过期时间 sample 2016-11-12 12:00:00
* @return String url */
public static function getPushUrl($domain, $stream_id, $key = null, $time = null){
if($key && $time){
$tx_time = strtoupper( base_convert(strtotime($time),10,16));
$tx_secret = md5($key.$stream_id.$tx_time);
$ext_str = "?".http_build_query([
"txSecret"=> $tx_secret,
"txTime"=> $tx_time
]);
}
return "rtmp://".$domain."/live/".$stream_id.( isset($ext_str) ? $ext_str : "");
}
其中domain 和 key 都是通过腾讯控制台获取的 。如下图
![](http://cdn.pic1.54php.cn/20190423/8133cc3bef773686076947c7631ae223.jpg?imageView/2/w/600)
![](http://cdn.pic1.54php.cn/20190423/830473e16de76173066aa7c23152fbcf.jpg?imageView/2/w/600)
而其中的stream_id 你可以理解为直播房间id,在具体开发中 不要重复就好了
播放流URL
生成播放流URL非常简单,但是需要 有自己备案过得域名。然后在后台添加播放域名就行了。
添加完成域名之后 就需要将域名 cname 到 下图二中的官方分配地址
![8f0374d3483d5e944d92979c231e45ab zhibo_3.jpg](http://cdn.pic1.54php.cn/20190423/8f0374d3483d5e944d92979c231e45ab.jpg?imageView/2/w/600)
![89a5a335fd1adf6d4f42e25b8275f326 zhibo_4.jpg](http://cdn.pic1.54php.cn/20190423/89a5a335fd1adf6d4f42e25b8275f326.jpg?imageView/2/w/600)
播放URL代码
/**
* 获取播放地址
* @param domain 您的播放域名
* stream_id 您用来区别不同推流地址的唯一流ID
* @return String url */
public static function getPlayUrl($domain, $stream_id){
$data = [
"rtmp://".$domain."/live/".$stream_id,
"http://".$domain."/live/".$stream_id.".flv",
"http://".$domain."/live/".$stream_id.".m3u8"
];
return $data[1];
}
其中 domain 就是刚在添加的域名。stream_id 就是生成推送流里面的参数。播放流可以生成三种模式,flv 和 m3u8。一般我们flv格式延迟会低些
效果展示
获取推送Url 和 播放Url
![f11b976d3bc95f7ca545a2011295508c zhibo_5.jpg](http://cdn.pic1.54php.cn/20190423/f11b976d3bc95f7ca545a2011295508c.jpg?imageView/2/w/600)
推送流Url:rtmp://44159.livepush.myqcloud.com/live/54php?txSecret=安全保密替换掉&txTime=5CC066FD
播放流Url:http://lvb.54php.cn/live/54php.flv
使用腾讯小直播软件直播
![f407009ca2213b2224a1102d97c691c1](http://cdn.pic1.54php.cn/20190423/f407009ca2213b2224a1102d97c691c1.jpg?imageView/2/w/600)
![3e13df37a06305c3049884eac6da49b6](http://cdn.pic1.54php.cn/20190423/3e13df37a06305c3049884eac6da49b6.jpg?imageView/2/w/600)
![a44b79a150f7d01983bc7cc7e9c3854d](http://cdn.pic1.54php.cn/20190423/a44b79a150f7d01983bc7cc7e9c3854d.jpg?imageView/2/w/600)
![0039a45590b97b5bcc63590b69455d59](http://cdn.pic1.54php.cn/20190423/0039a45590b97b5bcc63590b69455d59.jpg?imageView/2/w/600)
![32e0a501c38070bcd94a04fade7177b5](http://cdn.pic1.54php.cn/20190423/32e0a501c38070bcd94a04fade7177b5.jpg?imageView/2/w/600)
易推流App
![48b140b0882ee336edfe3ad3d98dd93a](http://cdn.pic1.54php.cn/20190423/48b140b0882ee336edfe3ad3d98dd93a.jpg?imageView/2/w/600)
![8c00b31c15d4465f75539f41eaaa489a](http://cdn.pic1.54php.cn/20190423/8c00b31c15d4465f75539f41eaaa489a.jpg?imageView/2/w/600)
前端演示地址:http://m.54php.cn/demo/lvb ,可能无法看到,因为浪子没有直播了
不错
回复 @ apanly: 非常不错