mryzys/agora-rtc-record
Composer 安装命令:
composer require mryzys/agora-rtc-record
包简介
PHP client for Shengwang (Agora) cloud recording acquire/start/stop APIs.
README 文档
README
Simple Composer package that wraps the Shengwang (Agora) cloud recording REST APIs for acquire, start, update, query, and stop.
Installation
composer require MrYzys/agora-rtc-record
Usage
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 ));
The MrYzys\AgoraRtcRecord\Requests\Acquire namespace mirrors the settings documented in acquire.md, giving you typed helpers for clientRequest, startParameter, storageConfig, extensionParams, and recordingConfig.
- Refer to the official documentation for the expected
clientRequestpayload:- Acquire: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/post-v1-apps-appid-cloud_recording-acquire and the included
acquire.md - Start: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/post-v1-apps-appid-cloud_recording-resourceid-resourceid-mode-mode-start and the included
start.md - Update: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/post-v1-apps-appid-cloud_recording-resourceid-resourceid-sid-sid-mode-mode-update and the included
update-setting.md - Update layout: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/post-v1-apps-appid-cloud_recording-resourceid-resourceid-sid-sid-mode-mode-updateLayout and the included
update-layout.md - Query: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/get-v1-apps-appid-cloud_recording-resourceid-resourceid-sid-sid-mode-mode-query and the included
query.md - Stop: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/post-v1-apps-appid-cloud_recording-resourceid-resourceid-sid-sid-mode-mode-stop
- Acquire: https://doc.shengwang.cn/doc/cloud-recording/restful/cloud-recording/operations/post-v1-apps-appid-cloud_recording-acquire and the included
The MrYzys\AgoraRtcRecord\Requests\Start namespace mirrors the whole clientRequest schema in start.md: StartRequest carries path/body values, StartClientRequest exposes setters for the token, storageConfig, recordingConfig, recordingFileConfig, snapshotConfig, and extensionServiceConfig, and dedicated helpers such as RecordingFileConfig, ExtensionServiceConfig, and WebRecorderServiceParam map the nested structures for mix/web/page recording scenarios.
The MrYzys\AgoraRtcRecord\Requests\Stop namespace mirrors stop.md: StopRequest wraps the path/body data, while StopClientRequest exposes the async_stop flag so you can choose between synchronous and asynchronous stop semantics.
The MrYzys\AgoraRtcRecord\Requests\Update namespace follows update-setting.md: build StreamSubscribe with audio/video UID lists, toggle page-recorder pause via WebRecordingConfig, refresh RTMP publish targets, or rotate third-party storage keys before posting an UpdateRequest.
The MrYzys\AgoraRtcRecord\Requests\UpdateLayout namespace mirrors update-layout.md: create LayoutConfigEntry/BackgroundConfigEntry arrays, set mixedVideoLayout, set custom colors/images, and send them through UpdateLayoutRequest to adjust mix compositions on the fly.
Error handling
Every method throws MrYzys\AgoraRtcRecord\Exceptions\CloudRecordingException when the underlying HTTP call fails or the API responds with a non-2xx status code. Inspect $exception->getResponsePayload() for the raw API error payload.
mryzys/agora-rtc-record 适用场景与选型建议
mryzys/agora-rtc-record 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 67 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 12 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 mryzys/agora-rtc-record 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 mryzys/agora-rtc-record 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 67
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 33
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-12-26