Integrating Alibaba Cloud Live Streaming with ThinkPHP: Configuration, Push and Playback Implementation
This article provides a step‑by‑step guide on configuring Alibaba Cloud Live streaming URLs, implementing push and playback functions in a ThinkPHP application, and using FFMPEG and Hls.js, complete with annotated PHP code examples for developers.
With the rapid growth of live streaming, Alibaba Cloud Live has become a popular service. This guide shows how to integrate its push and playback URLs into a ThinkPHP project, explaining each code segment in detail.
The push URL follows the pattern
rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}, where placeholders such as {Domain}, {AppName}, {StreamName}, {AuthKey}, {Timestamp} and {RandomNum} must be replaced with actual values. The playback URL uses the format http://{Domain}/{AppName}/{StreamName}.m3u8 with similar placeholders.
A PHP class LiveAction is defined to store these templates and the concrete configuration values (domains, app name, stream name, auth key). It provides two private helper methods:
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;
}To push a local video file to Alibaba Cloud Live, a public push() method builds an FFmpeg command that streams test.flv to the generated push URL and executes it with exec():
public function push() {
$pushUrl = $this->getPushUrl();
$command = 'ffmpeg -re -i test.flv -vcodec copy -acodec aac -f flv ' . $pushUrl;
exec($command);
}For playback, a play() method obtains the playback URL, assigns it to the view, and renders the template. The front‑end can then use the Hls.js library to play the .m3u8 stream.
public function play() {
$playUrl = $this->getPlayUrl();
$this->assign('playUrl', $playUrl);
$this->display();
}The complete class combines all properties and methods, offering a ready‑to‑use solution for both streaming and viewing live video within a ThinkPHP application.
class LiveAction extends Action {
// Push URL template
private $pushUrl = 'rtmp://{Domain}/{AppName}/{StreamName}?auth_key={AuthKey}-{Timestamp}-{RandomNum}';
// Playback URL template
private $playUrl = 'http://{Domain}/{AppName}/{StreamName}.m3u8';
// Configuration values
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;
}
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();
}
}Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
php Courses
php中文网's platform for the latest courses and technical articles, helping PHP learners advance quickly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
