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