龙采网站建设案例,九洲建设集团网站,广州哪家公司做网站,驻马店网络1. 配置阿里云直播的推流地址和播放地址
使用阿里云直播功能前#xff0c;首先需要在阿里云控制台中创建直播应用#xff0c;然后获取推流地址和播放地址。
推流地址一般格式为#xff1a;
rtmp://{Domain}/{AppName}/{StreamName}?auth_key{AuthKey}-{Timestamp}-{Rand…
1. 配置阿里云直播的推流地址和播放地址
使用阿里云直播功能前首先需要在阿里云控制台中创建直播应用然后获取推流地址和播放地址。
推流地址一般格式为
rtmp://{Domain}/{AppName}/{StreamName}?auth_key{AuthKey}-{Timestamp}-{RandomNum}其中
{Domain}代表阿里云直播的推流域名
{AppName}代表应用名称一般为“live”也可以自定义
{StreamName}代表流名称可以自定义
{AuthKey}代表授权密钥
{Timestamp}代表当前时间戳
{RandomNum}代表随机数。
播放地址一般格式为
http://{Domain}/{AppName}/{StreamName}.m3u8{Domain}代表阿里云直播的播放域名
{AppName}代表应用名称一般为“live”也可以自定义
{StreamName}代表流名称可以自定义。
把获取到的推流地址和播放地址配置到代码中代码如下
class LiveAction extends Action {// 推流地址private $pushUrl rtmp://{Domain}/{AppName}/{StreamName}?auth_key{AuthKey}-{Timestamp}-{RandomNum};// 播放地址private $playUrl http://{Domain}/{AppName}/{StreamName}.m3u8;// 阿里云直播的推流域名private $pushDomain xxx.xxx.com;// 阿里云直播的播放域名private $playDomain xxx.xxx.com;// 应用名称private $appName live;// 流名称private $streamName test;// 授权密钥private $authKey 1234567890;// 获取推流地址private function getPushUrl() {$randomNum rand(100000, 999999);$timestamp time();$authKey md5($this-authKey . $this-appName . $this-streamName . $timestamp . $randomNum);$pushUrl str_replace(array({Domain}, {AppName}, {StreamName}, {AuthKey}, {Timestamp}, {RandomNum}), array($this-pushDomain, $this-appName, $this-streamName, $authKey, $timestamp, $randomNum), $this-pushUrl);return $pushUrl;}// 获取播放地址private function getPlayUrl() {$playUrl str_replace(array({Domain}, {AppName}, {StreamName}), array($this-playDomain, $this-appName, $this-streamName), $this-playUrl);return $playUrl;}
}在LiveAction中定义了一系列变量包括推流地址和播放地址的格式和一些基本的配置信息同时定义了两个私有方法分别用于获取推流地址和播放地址。
在getPushUrl方法中先生成一个六位的随机数和当前时间戳然后计算出授权密钥最后将这些参数替换到推流地址的相应位置。最终返回一个完整的推流地址。
在getPlayUrl方法中直接将播放地址的相应位置替换即可。最终返回一个完整的播放地址。 2. 在ThinkPHP中集成阿里云直播的推流功能
在ThinkPHP框架中可以使用Fmpeg库来实现推流的功能。Fmpeg是一个非常强大的音视频处理工具它不仅可以播放、转码音视频还可以进行音视频的编辑、剪辑等等。
在使用Fmpeg之前需要先安装Fmpeg库并把它的路径配置到环境变量中。
代码如下
class LiveAction extends Action {// 推流地址private $pushUrl rtmp://{Domain}/{AppName}/{StreamName}?auth_key{AuthKey}-{Timestamp}-{RandomNum};// 阿里云直播的推流域名private $pushDomain xxx.xxx.com;// 应用名称private $appName live;// 流名称private $streamName test;// 授权密钥private $authKey 1234567890;// 获取推流地址private function getPushUrl() {$randomNum rand(100000, 999999);$timestamp time();$authKey md5($this-authKey . $this-appName . $this-streamName . $timestamp . $randomNum);$pushUrl str_replace(array({Domain}, {AppName}, {StreamName}, {AuthKey}, {Timestamp}, {RandomNum}), array($this-pushDomain, $this-appName, $this-streamName, $authKey, $timestamp, $randomNum), $this-pushUrl);return $pushUrl;}// 推流public function push() {$pushUrl $this-getPushUrl();$command ffmpeg -re -i test.flv -vcodec copy -acodec aac -f flv . $pushUrl;exec($command);}
}在LiveAction中添加了一个push方法该方法利用Fmpeg库将本地的test.flv文件推流到阿里云直播中。
3. 在ThinkPHP中集成阿里云直播的播放功能
在ThinkPHP框架中可以使用Hls.js库来实现直播的播放功能。Hls.js是一个基于HTML5的JavaScript库它能够将M3U8格式的直播流实时转换成模拟的FLV格式并播放。
代码如下
class LiveAction extends Action {// 播放地址private $playUrl http://{Domain}/{AppName}/{StreamName}.m3u8;// 阿里云直播的播放域名private $playDomain xxx.xxx.com;// 应用名称private $appName live;// 流名称private $streamName test;// 获取播放地址private function getPlayUrl() {$playUrl str_replace(array({Domain}, {AppName}, {StreamName}), array($this-playDomain, $this-appName, $this-streamName), $this-playUrl);return $playUrl;}// 播放public function play() {$playUrl $this-getPlayUrl();$this-assign(playUrl, $playUrl);$this-display();}
}在LiveAction中添加了一个play方法该方法获取播放地址并分配给模板然后通过模板display方法展示到页面上。
在页面上可以使用Hls.js库来播放直播流。
完整代码如下
class LiveAction extends Action {// 推流地址private $pushUrl rtmp://{Domain}/{AppName}/{StreamName}?auth_key{AuthKey}-{Timestamp}-{RandomNum};// 阿里云直播的推流域名private $pushDomain xxx.xxx.com;// 播放地址private $playUrl http://{Domain}/{AppName}/{StreamName}.m3u8;// 阿里云直播的播放域名private $playDomain xxx.xxx.com;// 应用名称private $appName live;// 流名称private $streamName test;// 授权密钥private $authKey 1234567890;// 获取推流地址private function getPushUrl() {$randomNum rand(100000, 999999);$timestamp time();$authKey md5($this-authKey . $this-appName . $this-streamName . $timestamp . $randomNum);$pushUrl str_replace(array({Domain}, {AppName}, {StreamName}, {AuthKey}, {Timestamp}, {RandomNum}), array($this-pushDomain, $this-appName, $this-streamName, $authKey, $timestamp, $randomNum), $this-pushUrl);return $pushUrl;}// 获取播放地址private function getPlayUrl() {$playUrl str_replace(array({Domain}, {AppName}, {StreamName}), array($this-playDomain, $this-appName, $this-streamName), $this-playUrl);return $playUrl;}// 推流public function push() {$pushUrl $this-getPushUrl();$command ffmpeg -re -i test.flv -vcodec copy -acodec aac -f flv . $pushUrl;exec($command);}// 播放public function play() {$playUrl $this-getPlayUrl();$this-assign(playUrl, $playUrl);$this-display();}
}项目附件点此下载