1. Alibaba Cloud Live のプッシュアドレスと再生アドレスを設定します。
Alibaba Cloud ライブ ブロードキャスト機能を使用する前に、まず Alibaba Cloud コンソールでライブ ブロードキャスト アプリケーションを作成し、プッシュ アドレスと再生アドレスを取得する必要があります。
プッシュ アドレスの一般的な形式は次のとおりです。
rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}
で、
{Domain}
Alibaba Cloud ライブ ブロードキャストのプッシュ ドメイン名を表します。
{AppName}
アプリケーション名を表します。通常は「live」ですが、カスタマイズすることもできます。
{StreamName}
カスタマイズ可能なストリーム名を表します。
{AuthKey}
認証キーを表します。
{Timestamp}
現在のタイムスタンプを表します。
{RandomNum}
乱数を表します。
再生アドレスの一般的な形式は次のとおりです。
http://{Domain}/{AppName}/{StreamName}.m3u8
{Domain}
Alibaba Cloud Live Broadcast の再生ドメイン名を表します。
{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
で、プッシュ アドレスと再生アドレスの形式、およびいくつかの基本的な構成情報を含む一連の変数を定義します。また、プッシュ アドレスと再生アドレスを取得するための 2 つのプライベート メソッドも定義します。
getPushUrl
メソッドでは、まず 6 桁の乱数と現在のタイムスタンプを生成し、次に認証キーを計算し、最後にこれらのパラメータをプッシュ アドレスの対応する位置に置き換えます。最後に、完全なプッシュ アドレスが返されます。
getPlayUrl
メソッドでは、再生アドレスの対応する位置を直接置き換えるだけです。最後に完全な再生アドレスを返します。
2. Alibaba Cloud Liveのストリーミング機能を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 ファイルを Alibaba Cloud Live にプッシュします。
3. Alibaba Cloud Live の再生機能を 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
メソッドを追加しました。このメソッドは、再生アドレスを取得してテンプレートに割り当て、テンプレートを渡します< a i= 3>ページにメソッドが表示されます。 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();
}
}
プロジェクトの添付ファイル: ここをクリックしてダウンロードします。