PHP code example of mryzys / agora-rtc-record

1. Go to this page and download the library: Download mryzys/agora-rtc-record 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/ */

    

mryzys / agora-rtc-record example snippets


use MrYzys\AgoraRtcRecord\CloudRecordingClient;
use MrYzys\AgoraRtcRecord\Requests\Acquire\AcquireClientRequest;
use MrYzys\AgoraRtcRecord\Requests\Acquire\AcquireRequest;
use MrYzys\AgoraRtcRecord\Requests\Acquire\RecordingConfig;
use MrYzys\AgoraRtcRecord\Requests\Acquire\StartParameter;
use MrYzys\AgoraRtcRecord\Requests\Acquire\StorageConfig;
use MrYzys\AgoraRtcRecord\Requests\Acquire\Transcoding\TranscodingConfig;
use MrYzys\AgoraRtcRecord\Requests\Query\QueryRequest;
use MrYzys\AgoraRtcRecord\Requests\Start\RecordingFileConfig;
use MrYzys\AgoraRtcRecord\Requests\Start\StartClientRequest;
use MrYzys\AgoraRtcRecord\Requests\Start\StartRequest;
use MrYzys\AgoraRtcRecord\Requests\Stop\StopClientRequest;
use MrYzys\AgoraRtcRecord\Requests\Stop\StopRequest;
use MrYzys\AgoraRtcRecord\Requests\Update\StreamSubscribe;
use MrYzys\AgoraRtcRecord\Requests\Update\UidList;
use MrYzys\AgoraRtcRecord\Requests\Update\UpdateClientRequest;
use MrYzys\AgoraRtcRecord\Requests\Update\UpdateRequest;
use MrYzys\AgoraRtcRecord\Requests\Update\WebRecordingConfig;
use MrYzys\AgoraRtcRecord\Requests\UpdateLayout\UpdateLayoutClientRequest;
use MrYzys\AgoraRtcRecord\Requests\UpdateLayout\UpdateLayoutRequest;
use MrYzys\AgoraRtcRecord\Requests\Acquire\Transcoding\BackgroundConfigEntry;
use MrYzys\AgoraRtcRecord\Requests\Layout\LayoutConfigEntry;
use MrYzys\AgoraRtcRecord\Requests\Layout\BackgroundConfigEntry;

$client = new CloudRecordingClient(
    appId: 'your-agora-app-id',
    customerId: 'your-customer-id',
    customerCertificate: 'your-customer-certificate'
);

$storageConfig = (new StorageConfig(
    vendor: 2,
    region: 14,
    bucket: 'bucket-name',
    accessKey: 'ak',
    secretKey: 'sk'
))->setFileNamePrefix(['recordings']);

$startParameter = (new StartParameter())
    ->setToken('channel-token')
    ->setStorageConfig($storageConfig);

$recordingConfig = (new RecordingConfig())
    ->setChannelType(1)
    ->setStreamTypes(2)
    ->setMaxIdleTime(60);

$clientRequest = (new AcquireClientRequest())
    ->setScene(0)
    ->setResourceExpiredHour(24)
    ->setRegionAffinity(1)
    ->setStartParameter($startParameter)
    ->setRecordingConfig($recordingConfig);

// 1. Acquire
$acquireResponse = $client->acquire(new AcquireRequest('demoChannel', '110', $clientRequest));
$resourceId = $acquireResponse['resourceId'];

// 2. Start
$transcodingConfig = (new TranscodingConfig())
    ->setWidth(1280)
    ->setHeight(720)
    ->setBitrate(2000)
    ->setMixedVideoLayout(1);

$recordingConfig = (new RecordingConfig())
    ->setChannelType(1)
    ->setStreamTypes(2)
    ->setMaxIdleTime(60)
    ->setTranscodingConfig($transcodingConfig);

$recordingFileConfig = (new RecordingFileConfig())->setAvFileTypes(['hls', 'mp4']);

$startClientRequest = (new StartClientRequest($storageConfig))
    ->setToken('channel-token')
    ->setRecordingConfig($recordingConfig)
    ->setRecordingFileConfig($recordingFileConfig);

$startResponse = $client->start(new StartRequest(
    resourceId: $resourceId,
    mode: 'mix',
    channelName: 'demoChannel',
    uid: '110',
    clientRequest: $startClientRequest
));
$sid = $startResponse['sid'];

// 3. Query status
$queryResponse = $client->query(new QueryRequest(
    resourceId: $resourceId,
    sid: $sid,
    mode: 'mix'
));

// 4. Update (e.g. adjust subscription list or pause/resume web recording)
$audioUidList = (new UidList('audio'))->setSubscribeUids(['#allstream#']);
$streamSubscribe = (new StreamSubscribe())->setAudioUidList($audioUidList);
$updateClientRequest = (new UpdateClientRequest())
    ->setStreamSubscribe($streamSubscribe)
    ->setWebRecordingConfig((new WebRecordingConfig())->setOnhold(false));

$client->update(new UpdateRequest(
    resourceId: $resourceId,
    sid: $sid,
    mode: 'mix',
    channelName: 'demoChannel',
    uid: '110',
    clientRequest: $updateClientRequest
));

// 5. Update mix layout (mix mode only)
$layoutClientRequest = (new UpdateLayoutClientRequest())
    ->setMixedVideoLayout(3)
    ->setBackgroundColor('#0055FF')
    ->addLayoutConfig(new LayoutConfigEntry('110', 0.0, 0.0, 0.5, 0.5))
    ->addBackgroundConfig(new BackgroundConfigEntry('111', 'https://example.com/bg.png'));

$client->updateLayout(new UpdateLayoutRequest(
    resourceId: $resourceId,
    sid: $sid,
    mode: 'mix',
    channelName: 'demoChannel',
    uid: '110',
    clientRequest: $layoutClientRequest
));

// 6. Stop
$stopClientRequest = (new StopClientRequest())->setAsyncStop(false);

$client->stop(new StopRequest(
    resourceId: $resourceId,
    sid: $sid,
    mode: 'mix',
    channelName: 'demoChannel',
    uid: '110',
    clientRequest: $stopClientRequest
));