PHP code example of betterus / agora-sdk-php
1. Go to this page and download the library: Download betterus/agora-sdk-php library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
betterus / agora-sdk-php example snippets
gora\Sdk\AgoraSdk;
// 基础配置(仅Token生成)
$sdk = AgoraSdk::create(
'your_app_id',
'your_app_certificate'
);
// 完整配置(包含RESTful API功能)
$sdk = AgoraSdk::create(
'your_app_id',
'your_app_certificate',
'your_customer_id', // 用于RESTful API认证
'your_customer_secret' // 用于RESTful API认证
);
// 创建房间(逻辑概念)
$room = $sdk->createRoom('test_channel', [
'admin_uid' => 1,
'token_expire_time' => 3600, // 1小时
]);
echo "房间创建成功:" . $room['channel_name'] . "\n";
echo "管理员Token:" . $room['admin_token'] . "\n";
// 为用户生成Token
$userToken = $sdk->generateUserToken(
'test_channel',
12345, // 用户ID
true, // 是否为发布者
3600 // 过期时间(秒)
);
echo "用户Token:" . $userToken['token'] . "\n";
// 配置云存储
use Agora\Sdk\CloudRecording\CloudRecordingClient;
$storageConfig = CloudRecordingClient::createStorageConfig(
CloudRecordingClient::VENDOR_AMAZON_S3, // 云存储厂商
0, // 区域
'your-bucket-name', // 存储桶
'your-access-key', // 访问密钥
'your-secret-key' // 密钥
);
// 开始录制
$recording = $sdk->startRecording('test_channel', $storageConfig, [
'recording_uid' => 999999,
'mode' => CloudRecordingClient::MODE_COMPOSITE,
'recording_config' => [
'channelType' => CloudRecordingClient::CHANNEL_TYPE_COMMUNICATION,
'streamTypes' => 2, // 录制音视频
'maxIdleTime' => 30,
],
]);
echo "录制开始,SID:" . $recording['sid'] . "\n";
// 查询录制状态
$status = $sdk->queryRecording(
$recording['resource_id'],
$recording['sid']
);
echo "录制状态:" . $status['status'] . "\n";
// 停止录制
$result = $sdk->stopRecording(
$recording['resource_id'],
$recording['sid'],
'test_channel',
999999
);
echo "录制已停止\n";
// 解析Webhook事件
$requestBody = file_get_contents('php://input');
$headers = getallheaders();
try {
$event = $sdk->parseWebhookEvent($requestBody, $headers, true);
echo "事件类型:" . $event['event_name'] . "\n";
echo "频道名称:" . $event['payload']['channelName'] . "\n";
// 根据事件类型处理
switch ($event['event_type']) {
case 101: // 频道创建
echo "频道已创建\n";
break;
case 103: // 主播加入
echo "主播 " . $event['payload']['uid'] . " 加入频道\n";
break;
case 104: // 主播离开
echo "主播 " . $event['payload']['uid'] . " 离开频道\n";
break;
}
} catch (Exception $e) {
echo "事件解析失败:" . $e->getMessage() . "\n";
}
// 生成发布者Token
$token = $sdk->generateToken(
'channel_name',
12345, // 用户ID
\Agora\Sdk\TokenBuilder\RtcTokenBuilder2::ROLE_PUBLISHER,
3600 // 过期时间(秒)
);
// 生成订阅者Token
$token = $sdk->generateToken(
'channel_name',
12346,
\Agora\Sdk\TokenBuilder\RtcTokenBuilder2::ROLE_SUBSCRIBER,
3600
);
$token = $sdk->generateTokenWithPrivileges(
'channel_name',
12345,
3600, // Token过期时间
3600, // 加入频道权限过期时间
3600, // 发布音频权限过期时间
3600, // 发布视频权限过期时间
3600 // 发布数据流权限过期时间
);
use Agora\Sdk\CloudRecording\CloudRecordingClient;
// Amazon S3
$storageConfig = CloudRecordingClient::createStorageConfig(
CloudRecordingClient::VENDOR_AMAZON_S3,
0, // 区域:0=US_EAST_1, 1=US_EAST_2, 2=US_WEST_1, 3=US_WEST_2
'bucket-name',
'access-key',
'secret-key'
);
// 阿里云OSS
$storageConfig = CloudRecordingClient::createStorageConfig(
CloudRecordingClient::VENDOR_ALIBABA_CLOUD,
0, // 区域:0=CN_Hangzhou, 1=CN_Shanghai, 2=CN_Qingdao
'bucket-name',
'access-key',
'secret-key'
);
// 腾讯云COS
$storageConfig = CloudRecordingClient::createStorageConfig(
CloudRecordingClient::VENDOR_TENCENT_CLOUD,
0, // 区域:0=AP_Beijing_1, 1=AP_Beijing, 2=AP_Shanghai
'bucket-name',
'access-key',
'secret-key'
);
$recordingConfig = [
'channelType' => CloudRecordingClient::CHANNEL_TYPE_COMMUNICATION, // 0=通信,1=直播
'streamTypes' => 2, // 0=仅音频,1=仅视频,2=音视频
'maxIdleTime' => 30, // 最大空闲时间(秒)
'subscribeVideoUids' => ['123', '456'], // 订阅的视频用户ID列表
'subscribeAudioUids' => ['123', '456'], // 订阅的音频用户ID列表
];
use Agora\Sdk\Exceptions\AgoraException;
try {
$token = $sdk->generateToken('test_channel', 12345);
} catch (AgoraException $e) {
echo "错误类型:" . $e->getErrorCode() . "\n";
echo "错误消息:" . $e->getMessage() . "\n";
echo "HTTP状态码:" . $e->getCode() . "\n";
// 获取详细错误信息
$details = $e->getErrorDetails();
if (!empty($details)) {
echo "错误详情:" . json_encode($details) . "\n";
}
}
// 复制配置示例文件
cp config/agora.example.php config/agora.php
// 编辑配置文件
$config = _id'],
$config['customer_secret']
);
bash
composer