diff --git a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/api/req/StartResourceReq.java b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/api/req/StartResourceReq.java index 0ed1756..6b93f5c 100644 --- a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/api/req/StartResourceReq.java +++ b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/api/req/StartResourceReq.java @@ -60,15 +60,9 @@ public static class StartClientRequest { @JsonProperty("token") private String token; - @JsonProperty("appsCollection") - private AppsCollection appsCollection; - @JsonProperty("recordingConfig") private RecordingConfig recordingConfig; - @JsonProperty("transcodeOptions") - private TranscodeOptions transcodeOptions; - @JsonProperty("recordingFileConfig") private RecordingFileConfig recordingFileConfig; @@ -87,9 +81,7 @@ public static Builder builder() { private StartClientRequest(Builder builder) { setToken(builder.token); - setAppsCollection(builder.appsCollection); setRecordingConfig(builder.recordingConfig); - setTranscodeOptions(builder.transcodeOptions); setRecordingFileConfig(builder.recordingFileConfig); setSnapshotConfig(builder.snapshotConfig); setStorageConfig(builder.storageConfig); @@ -104,14 +96,6 @@ public void setToken(String token) { this.token = token; } - public AppsCollection getAppsCollection() { - return appsCollection; - } - - public void setAppsCollection(AppsCollection appsCollection) { - this.appsCollection = appsCollection; - } - public RecordingConfig getRecordingConfig() { return recordingConfig; } @@ -120,14 +104,6 @@ public void setRecordingConfig(RecordingConfig recordingConfig) { this.recordingConfig = recordingConfig; } - public TranscodeOptions getTranscodeOptions() { - return transcodeOptions; - } - - public void setTranscodeOptions(TranscodeOptions transcodeOptions) { - this.transcodeOptions = transcodeOptions; - } - public RecordingFileConfig getRecordingFileConfig() { return recordingFileConfig; } @@ -164,9 +140,7 @@ public void setExtensionServiceConfig(ExtensionServiceConfig extensionServiceCon public String toString() { return "StartClientRequest{" + "token='" + token + '\'' + - ", appsCollection=" + appsCollection + ", recordingConfig=" + recordingConfig + - ", transcodeOptions=" + transcodeOptions + ", recordingFileConfig=" + recordingFileConfig + ", snapshotConfig=" + snapshotConfig + ", storageConfig=" + storageConfig + @@ -178,12 +152,8 @@ public static final class Builder { private String token; - private AppsCollection appsCollection; - private RecordingConfig recordingConfig; - private TranscodeOptions transcodeOptions; - private RecordingFileConfig recordingFileConfig; private SnapshotConfig snapshotConfig; @@ -204,21 +174,11 @@ public Builder token(String val) { return this; } - public Builder appsCollection(AppsCollection val) { - appsCollection = val; - return this; - } - public Builder recordingConfig(RecordingConfig val) { recordingConfig = val; return this; } - public Builder transcodeOptions(TranscodeOptions val) { - transcodeOptions = val; - return this; - } - public Builder recordingFileConfig(RecordingFileConfig val) { recordingFileConfig = val; return this; @@ -245,71 +205,6 @@ public StartClientRequest build() { } } - /** - * @brief Configuration for the application. - * @since v0.4.0 - */ - public static class AppsCollection { - - /** - * The combination of cloud recording applications.(Optional) - *

- * The combination policy can be set to: - *

- * - "default": Use this policy except for postponed transcoding and audio - * mixing.(Default) - *

- * - "postpone_transcoding": Use this policy if you need to postpone transcoding - * or audio mixing. - */ - @JsonProperty("combinationPolicy") - private String combinationPolicy; - - public static Builder builder() { - return new Builder(); - } - - private AppsCollection(Builder builder) { - setCombinationPolicy(builder.combinationPolicy); - } - - public String getCombinationPolicy() { - return combinationPolicy; - } - - public void setCombinationPolicy(String combinationPolicy) { - this.combinationPolicy = combinationPolicy; - } - - @Override - public String toString() { - return "AppsCollection{" + - "combinationPolicy='" + combinationPolicy + '\'' + - '}'; - } - - public static final class Builder { - - private String combinationPolicy; - - private Builder() { - } - - public static Builder builder() { - return new Builder(); - } - - public Builder combinationPolicy(String val) { - combinationPolicy = val; - return this; - } - - public AppsCollection build() { - return new AppsCollection(this); - } - } - } - /** * @brief Configuration for recorded audio and video streams. * @since v0.4.0 @@ -794,342 +689,6 @@ public RecordingConfig build() { } } - /** - * @brief Container format. - * @since v0.4.0 - */ - public static class Container { - - /** - * The container format of the file.(Optional) - *

- * The container format can be set to: - *

- * - "mp4": the default format for the postponed transcoding. MP4 format. - *

- * - "mp3": The default format for postponed audio mixing. MP3 format. - *

- * - "m4a": M4A format. - *

- * - "aac": AAC format. - */ - @JsonProperty("format") - private String format; - - public static Builder builder() { - return new Builder(); - } - - private Container(Builder builder) { - setFormat(builder.format); - } - - public String getFormat() { - return format; - } - - public void setFormat(String format) { - this.format = format; - } - - @Override - public String toString() { - return "Container{" + - "format='" + format + '\'' + - '}'; - } - - public static final class Builder { - - private String format; - - private Builder() { - } - - public Builder format(String val) { - format = val; - return this; - } - - public Container build() { - return new Container(this); - } - } - } - - /** - * @brief Configurations for the recorded files generated under postponed - * transcoding or audio mixing. - * @since v0.4.0 - */ - public static class TranscodeOptions { - /** - * The container format of the recorded files.(Optional) See - * {@link TranscodeOptions.Container}. - */ - @JsonProperty("container") - private Container container; - - /** - * The configuration for transcoding.(Required) See - * {@link TranscodeOptions.TransConfig}. - */ - @JsonProperty("transConfig") - private TransConfig transConfig; - - /** - * Audio properties of the file. See {@link TranscodeOptions.Audio}. - */ - @JsonProperty("audio") - private Audio audio; - - public static Builder builder() { - return new Builder(); - } - - private TranscodeOptions(Builder builder) { - setContainer(builder.container); - setTransConfig(builder.transConfig); - setAudio(builder.audio); - } - - public Container getContainer() { - return container; - } - - public void setContainer(Container container) { - this.container = container; - } - - public TransConfig getTransConfig() { - return transConfig; - } - - public void setTransConfig(TransConfig transConfig) { - this.transConfig = transConfig; - } - - public Audio getAudio() { - return audio; - } - - public void setAudio(Audio audio) { - this.audio = audio; - } - - @Override - public String toString() { - return "TranscodeOptions{" + - "container=" + container + - ", transConfig=" + transConfig + - ", audio=" + audio + - '}'; - } - - public static final class Builder { - - private Container container; - private TransConfig transConfig; - private Audio audio; - - private Builder() { - } - - public Builder container(Container val) { - container = val; - return this; - } - - public Builder transConfig(TransConfig val) { - transConfig = val; - return this; - } - - public Builder audio(Audio val) { - audio = val; - return this; - } - - public TranscodeOptions build() { - return new TranscodeOptions(this); - } - } - } - - /** - * @brief Configuration for transcoding. - * @since v0.4.0 - */ - public static class TransConfig { - - /** - * The transcoding mode.(Required) - *

- * The transcoding mode can be set to: - *

- * - "postponeTranscoding": Postponed transcoding. - *

- * - "audioMix": Postponed audio mixing. - */ - @JsonProperty("transMode") - private String transMode; - - public static Builder builder() { - return new Builder(); - } - - private TransConfig(Builder builder) { - setTransMode(builder.transMode); - } - - public String getTransMode() { - return transMode; - } - - public void setTransMode(String transMode) { - this.transMode = transMode; - } - - @Override - public String toString() { - return "TransConfig{" + - "transMode='" + transMode + '\'' + - '}'; - } - - public static final class Builder { - - private String transMode; - - private Builder() { - } - - public Builder transMode(String val) { - transMode = val; - return this; - } - - public TransConfig build() { - return new TransConfig(this); - } - } - } - - /** - * @brief Audio properties of the file. - * @since v0.4.0 - */ - public static class Audio { - - /** - * Audio sampling rate.(Optional) - *

- * The sampling rate can be set to: - *

- * - "48000": 48 kHz.(Default) - *

- * - "32000": 32 kHz. - *

- * - "16000": 16 kHz. - */ - @JsonProperty("sampleRate") - private String sampleRate; - - /** - * Audio bitrate(Kbps).(Optional) - *

- * It supports a customized value and the default value is "48000". - */ - @JsonProperty("bitrate") - private String bitRate; - - /** - * Audio channels.(Optional) - *

- * The channels can be set to: - *

- * - "1": Mono. - *

- * - "2": Stereo.(Default) - */ - @JsonProperty("channels") - private String channels; - - public static Builder builder() { - return new Builder(); - } - - private Audio(Builder builder) { - setSampleRate(builder.sampleRate); - setBitRate(builder.bitRate); - setChannels(builder.channels); - } - - public String getSampleRate() { - return sampleRate; - } - - public void setSampleRate(String sampleRate) { - this.sampleRate = sampleRate; - } - - public String getBitRate() { - return bitRate; - } - - public void setBitRate(String bitRate) { - this.bitRate = bitRate; - } - - public String getChannels() { - return channels; - } - - public void setChannels(String channels) { - this.channels = channels; - } - - @Override - public String toString() { - return "Audio{" + - "sampleRate='" + sampleRate + '\'' + - ", bitRate='" + bitRate + '\'' + - ", channels='" + channels + '\'' + - '}'; - } - - public static final class Builder { - - private String sampleRate; - - private String bitRate; - - private String channels; - - private Builder() { - } - - public Builder sampleRate(String val) { - sampleRate = val; - return this; - } - - public Builder bitRate(String val) { - bitRate = val; - return this; - } - - public Builder channels(String val) { - channels = val; - return this; - } - - public Audio build() { - return new Audio(this); - } - } - } - /** * @brief Configurations for transcoded video output. * @since v0.4.0 diff --git a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenario.java b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenario.java index 881b23f..b42087f 100644 --- a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenario.java +++ b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenario.java @@ -18,20 +18,17 @@ public abstract class IndividualScenario { * @since v0.4.0 * @post After receiving the resource ID, call the start API to start cloud * recording. - * @param cname The name of the channel to be recorded. - * @param uid The user ID used by the cloud recording service in the - * RTC channel to identify the recording service in the - * channel. - * @param enablePostpone Whether to postpone the recording. - * - true: Postpone the recording. - * - false: Start the recording immediately. - * @param clientRequest The request body. See - * {@link AcquireIndividualResourceClientReq} for - * details. + * @param cname The name of the channel to be recorded. + * @param uid The user ID used by the cloud recording service in the + * RTC channel to identify the recording service in the + * channel. + * @param clientRequest The request body. See + * {@link AcquireIndividualResourceClientReq} for + * details. * @return Returns the acquire resource result. See * {@link AcquireResourceRes} for details. */ - public abstract Mono acquire(String cname, String uid, boolean enablePostpone, + public abstract Mono acquire(String cname, String uid, AcquireIndividualResourceClientReq clientRequest); /** diff --git a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenarioImpl.java b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenarioImpl.java index 543017d..b612fb6 100644 --- a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenarioImpl.java +++ b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/IndividualScenarioImpl.java @@ -19,146 +19,135 @@ public class IndividualScenarioImpl extends IndividualScenario { - private final AcquireResourceAPI acquireResourceAPI; + private final AcquireResourceAPI acquireResourceAPI; - private final QueryResourceAPI queryResourceAPI; + private final QueryResourceAPI queryResourceAPI; - private final StartResourceAPI startResourceAPI; + private final StartResourceAPI startResourceAPI; - private final UpdateResourceAPI updateResourceAPI; + private final UpdateResourceAPI updateResourceAPI; - private final StopResourceAPI stopResourceAPI; + private final StopResourceAPI stopResourceAPI; - public IndividualScenarioImpl(AcquireResourceAPI acquireResourceAPI, - QueryResourceAPI queryResourceAPI, - StartResourceAPI startResourceAPI, - UpdateResourceAPI updateResourceAPI, - StopResourceAPI stopResourceAPI) { - this.acquireResourceAPI = acquireResourceAPI; - this.queryResourceAPI = queryResourceAPI; - this.startResourceAPI = startResourceAPI; - this.updateResourceAPI = updateResourceAPI; - this.stopResourceAPI = stopResourceAPI; - } + public IndividualScenarioImpl(AcquireResourceAPI acquireResourceAPI, + QueryResourceAPI queryResourceAPI, + StartResourceAPI startResourceAPI, + UpdateResourceAPI updateResourceAPI, + StopResourceAPI stopResourceAPI) { + this.acquireResourceAPI = acquireResourceAPI; + this.queryResourceAPI = queryResourceAPI; + this.startResourceAPI = startResourceAPI; + this.updateResourceAPI = updateResourceAPI; + this.stopResourceAPI = stopResourceAPI; + } + + @Override + public Mono acquire(String cname, String uid, + AcquireIndividualResourceClientReq clientRequest) { + + StartResourceReq.StartClientRequest startParameter = null; + if (clientRequest.getStartParameter() != null) { + startParameter = StartResourceReq.StartClientRequest.builder() + .token(clientRequest.getStartParameter().getToken()) + .storageConfig(clientRequest.getStartParameter() + .getStorageConfig()) + .recordingConfig(clientRequest.getStartParameter() + .getRecordingConfig()) + .recordingFileConfig(clientRequest.getStartParameter() + .getRecordingFileConfig()) + .snapshotConfig(clientRequest.getStartParameter() + .getSnapshotConfig()) + .build(); + } + + AcquireResourceReq req = AcquireResourceReq.builder() + .cname(cname) + .uid(uid) + .clientRequest(AcquireResourceReq.ClientRequest.builder() + .scene(0) + .resourceExpiredHour(clientRequest.getResourceExpiredHour()) + .regionAffinity(clientRequest.getRegionAffinity()) + .excludeResourceIds(clientRequest.getExcludeResourceIds()) + .startParameter(startParameter) + .build()) + .build(); + + return this.acquireResourceAPI.handle(req); + } - @Override - public Mono acquire(String cname, String uid, boolean enablePostpone, - AcquireIndividualResourceClientReq clientRequest) { - int scene = 0; + @Override + public Mono start(String cname, String uid, String resourceId, + StartIndividualRecordingClientReq clientRequest) { + return this.startResourceAPI.handle(resourceId, CloudRecordingModeEnum.INDIVIDUAL, StartResourceReq + .builder() + .cname(cname) + .uid(uid) + .clientRequest(StartResourceReq.StartClientRequest.builder() + .token(clientRequest.getToken()) + .storageConfig(clientRequest.getStorageConfig()) + .recordingConfig(clientRequest.getRecordingConfig()) + .recordingFileConfig(clientRequest.getRecordingFileConfig()) + .snapshotConfig(clientRequest.getSnapshotConfig()) + .build()) + .build()); + } - if (enablePostpone) { - scene = 2; + @Override + public Mono query(String resourceId, String sid) { + return this.queryResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL) + .handle((res, sink) -> { + sink.next(QueryIndividualRecordingResourceRes.builder() + .cname(res.getCname()) + .uid(res.getUid()) + .resourceId(res.getResourceId()) + .sid(res.getSid()) + .serverResponse(res.getQueryIndividualRecordingServerResponse()) + .build()); + + sink.complete(); + }); } - StartResourceReq.StartClientRequest startParameter = null; - if (clientRequest.getStartParameter() != null) { - startParameter = StartResourceReq.StartClientRequest.builder() - .token(clientRequest.getStartParameter().getToken()) - .storageConfig(clientRequest.getStartParameter() - .getStorageConfig()) - .recordingConfig(clientRequest.getStartParameter() - .getRecordingConfig()) - .recordingFileConfig(clientRequest.getStartParameter() - .getRecordingFileConfig()) - .snapshotConfig(clientRequest.getStartParameter() - .getSnapshotConfig()) - .appsCollection(clientRequest.getStartParameter() - .getAppsCollection()) - .transcodeOptions(clientRequest.getStartParameter() - .getTranscodeOptions()) - .build(); + @Override + public Mono queryVideoScreenshot(String resourceId, + String sid) { + return this.queryResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL) + .handle((res, sink) -> { + sink.next(QueryIndividualRecordingVideoScreenshotResourceRes.builder() + .cname(res.getCname()) + .uid(res.getUid()) + .resourceId(res.getResourceId()) + .sid(res.getSid()) + .serverResponse(res + .getQueryIndividualVideoScreenshotServerResponse()) + .build()); + + sink.complete(); + }); } - AcquireResourceReq req = AcquireResourceReq.builder() - .cname(cname) - .uid(uid) - .clientRequest(AcquireResourceReq.ClientRequest.builder() - .scene(scene) - .resourceExpiredHour(clientRequest.getResourceExpiredHour()) - .regionAffinity(clientRequest.getRegionAffinity()) - .excludeResourceIds(clientRequest.getExcludeResourceIds()) - .startParameter(startParameter) - .build()) - .build(); - - return this.acquireResourceAPI.handle(req); - } - - @Override - public Mono start(String cname, String uid, String resourceId, - StartIndividualRecordingClientReq clientRequest) { - return this.startResourceAPI.handle(resourceId, CloudRecordingModeEnum.INDIVIDUAL, StartResourceReq - .builder() - .cname(cname) - .uid(uid) - .clientRequest(StartResourceReq.StartClientRequest.builder() - .token(clientRequest.getToken()) - .storageConfig(clientRequest.getStorageConfig()) - .recordingConfig(clientRequest.getRecordingConfig()) - .recordingFileConfig(clientRequest.getRecordingFileConfig()) - .snapshotConfig(clientRequest.getSnapshotConfig()) - .appsCollection(clientRequest.getAppsCollection()) - .transcodeOptions(clientRequest.getTranscodeOptions()) - .build()) - .build()); - } - - @Override - public Mono query(String resourceId, String sid) { - return this.queryResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL) - .handle((res, sink) -> { - sink.next(QueryIndividualRecordingResourceRes.builder() - .cname(res.getCname()) - .uid(res.getUid()) - .resourceId(res.getResourceId()) - .sid(res.getSid()) - .serverResponse(res.getQueryIndividualRecordingServerResponse()) - .build()); - - sink.complete(); - }); - } - - @Override - public Mono queryVideoScreenshot(String resourceId, - String sid) { - return this.queryResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL) - .handle((res, sink) -> { - sink.next(QueryIndividualRecordingVideoScreenshotResourceRes.builder() - .cname(res.getCname()) - .uid(res.getUid()) - .resourceId(res.getResourceId()) - .sid(res.getSid()) - .serverResponse(res - .getQueryIndividualVideoScreenshotServerResponse()) - .build()); - - sink.complete(); - }); - } - - @Override - public Mono update(String cname, String uid, String resourceId, String sid, - UpdateIndividualRecordingResourceClientReq clientRequest) { - return this.updateResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL, - UpdateResourceReq.builder() - .cname(cname) - .uid(uid) - .clientRequest(UpdateResourceReq.ClientRequest.builder() - .streamSubscribe(clientRequest.getStreamSubscribe()) - .build()) - .build()); - } - - @Override - public Mono stop(String cname, String uid, String resourceId, String sid, boolean asyncStop) { - return this.stopResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL, - StopResourceReq.builder() - .cname(cname) - .uid(uid) - .clientRequest(StopResourceReq.StopClientRequest.builder() - .asyncStop(asyncStop) - .build()) - .build()); - } + @Override + public Mono update(String cname, String uid, String resourceId, String sid, + UpdateIndividualRecordingResourceClientReq clientRequest) { + return this.updateResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL, + UpdateResourceReq.builder() + .cname(cname) + .uid(uid) + .clientRequest(UpdateResourceReq.ClientRequest.builder() + .streamSubscribe(clientRequest.getStreamSubscribe()) + .build()) + .build()); + } + + @Override + public Mono stop(String cname, String uid, String resourceId, String sid, boolean asyncStop) { + return this.stopResourceAPI.handle(resourceId, sid, CloudRecordingModeEnum.INDIVIDUAL, + StopResourceReq.builder() + .cname(cname) + .uid(uid) + .clientRequest(StopResourceReq.StopClientRequest.builder() + .asyncStop(asyncStop) + .build()) + .build()); + } } diff --git a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/req/StartIndividualRecordingClientReq.java b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/req/StartIndividualRecordingClientReq.java index 6a1435c..6916784 100644 --- a/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/req/StartIndividualRecordingClientReq.java +++ b/agora-rest-client-core/src/main/java/io/agora/rest/services/cloudrecording/scenario/individual/req/StartIndividualRecordingClientReq.java @@ -13,24 +13,12 @@ public class StartIndividualRecordingClientReq { */ private String token; - /** - * Configuration for the application.(Optional) See - * {@link StartResourceReq.AppsCollection}. - */ - private StartResourceReq.AppsCollection appsCollection; - /** * Configuration for recorded audio and video streams.(Optional) See * {@link StartResourceReq.RecordingConfig}. */ private StartResourceReq.RecordingConfig recordingConfig; - /** - * Configurations for the recorded files generated under postponed transcoding - * or audio mixing.(Optional) See {@link StartResourceReq.TranscodeOptions}. - */ - private StartResourceReq.TranscodeOptions transcodeOptions; - /** * Configuration for recorded files.(Optional) See * {@link StartResourceReq.RecordingFileConfig}. @@ -55,9 +43,7 @@ public static Builder builder() { private StartIndividualRecordingClientReq(Builder builder) { setToken(builder.token); - setAppsCollection(builder.appsCollection); setRecordingConfig(builder.recordingConfig); - setTranscodeOptions(builder.transcodeOptions); setRecordingFileConfig(builder.recordingFileConfig); setSnapshotConfig(builder.snapshotConfig); setStorageConfig(builder.storageConfig); @@ -71,14 +57,6 @@ public void setToken(String token) { this.token = token; } - public StartResourceReq.AppsCollection getAppsCollection() { - return appsCollection; - } - - public void setAppsCollection(StartResourceReq.AppsCollection appsCollection) { - this.appsCollection = appsCollection; - } - public StartResourceReq.RecordingConfig getRecordingConfig() { return recordingConfig; } @@ -87,14 +65,6 @@ public void setRecordingConfig(StartResourceReq.RecordingConfig recordingConfig) this.recordingConfig = recordingConfig; } - public StartResourceReq.TranscodeOptions getTranscodeOptions() { - return transcodeOptions; - } - - public void setTranscodeOptions(StartResourceReq.TranscodeOptions transcodeOptions) { - this.transcodeOptions = transcodeOptions; - } - public StartResourceReq.RecordingFileConfig getRecordingFileConfig() { return recordingFileConfig; } @@ -123,9 +93,7 @@ public void setStorageConfig(StartResourceReq.StorageConfig storageConfig) { public String toString() { return "StartIndividualRecordingClientReq{" + "token='" + token + '\'' + - ", appsCollection=" + appsCollection + ", recordingConfig=" + recordingConfig + - ", transcodeOptions=" + transcodeOptions + ", recordingFileConfig=" + recordingFileConfig + ", snapshotConfig=" + snapshotConfig + ", storageConfig=" + storageConfig + @@ -134,9 +102,7 @@ public String toString() { public static final class Builder { private String token; - private StartResourceReq.AppsCollection appsCollection; private StartResourceReq.RecordingConfig recordingConfig; - private StartResourceReq.TranscodeOptions transcodeOptions; private StartResourceReq.RecordingFileConfig recordingFileConfig; private StartResourceReq.SnapshotConfig snapshotConfig; private StartResourceReq.StorageConfig storageConfig; @@ -149,21 +115,11 @@ public Builder token(String val) { return this; } - public Builder appsCollection(StartResourceReq.AppsCollection val) { - appsCollection = val; - return this; - } - public Builder recordingConfig(StartResourceReq.RecordingConfig val) { recordingConfig = val; return this; } - public Builder transcodeOptions(StartResourceReq.TranscodeOptions val) { - transcodeOptions = val; - return this; - } - public Builder recordingFileConfig(StartResourceReq.RecordingFileConfig val) { recordingFileConfig = val; return this; diff --git a/examples/cloudrecording/README.md b/examples/cloudrecording/README.md index fbeb014..eb31b67 100644 --- a/examples/cloudrecording/README.md +++ b/examples/cloudrecording/README.md @@ -58,8 +58,6 @@ Where `individual_scene` represents the individual recording scenario: * recording: Recording only * snapshot: Snapshot only * recording_and_snapshot: Recording and snapshot -* recording_and_postpone_transcoding: Recording with delayed transcoding -* recording_and_audio_mix: Recording with delayed audio mixing Where `web_scene` represents the web page recording scenario: diff --git a/examples/cloudrecording/README_ZH.md b/examples/cloudrecording/README_ZH.md index c61b82c..282dae4 100644 --- a/examples/cloudrecording/README_ZH.md +++ b/examples/cloudrecording/README_ZH.md @@ -58,8 +58,6 @@ mvn exec:java -Dexec.mainClass="io.agora.rest.examples.cloudrecording.Main" -Dex * recording: 仅录制 * snapshot: 仅截图 * recording_and_snapshot: 录制+截图 -* recording_and_postpone_transcoding: 录制+延时转码 -* recording_and_audio_mix: 录制+延时混音 其中 `web_scene` 表示页面录制场景: diff --git a/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/Main.java b/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/Main.java index 32e8619..441624e 100644 --- a/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/Main.java +++ b/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/Main.java @@ -14,8 +14,7 @@ import java.util.concurrent.Callable; -@Command(name = "Main", mixinStandardHelpOptions = true, version = "0.1.0", - description = "Agora Recording Service") +@Command(name = "Main", mixinStandardHelpOptions = true, version = "0.1.0", description = "Agora Recording Service") public class Main implements Callable { private static final Logger logger = LoggerFactory.getLogger(Main.class); @@ -35,16 +34,16 @@ public class Main implements Callable { private StartResourceReq.StorageConfig storageConfig; - @Option(names = {"-m", "--mode"}, description = "mix, web, individual") + @Option(names = { "-m", "--mode" }, description = "mix, web, individual") private String mode = ""; - @Option(names = {"-ms", "--mix_scene"}, description = "hls, hls_and_mp4") + @Option(names = { "-ms", "--mix_scene" }, description = "hls, hls_and_mp4") private String mixScene = ""; - @Option(names = {"-is", "--individual_scene"}, description = "recording, snapshot, recording_and_snapshot, recording_and_postpone_transcoding, recording_and_audio_mix") + @Option(names = { "-is", "--individual_scene" }, description = "recording, snapshot, recording_and_snapshot") private String individualScene = ""; - @Option(names = {"-ws", "--web_scene"}, description = "web_recorder, web_recorder_and_rtmp_publish") + @Option(names = { "-ws", "--web_scene" }, description = "web_recorder, web_recorder_and_rtmp_publish") private String webScene = ""; public static void main(String[] args) { @@ -70,7 +69,8 @@ private void loadEnv() { } private void handleMixMode() { - MixRecordingScenario mixScenario = new MixRecordingScenario(region, appId, cname, uid, new BasicAuthCredential(username, password)); + MixRecordingScenario mixScenario = new MixRecordingScenario(region, appId, cname, uid, + new BasicAuthCredential(username, password)); switch (mixScene) { case "hls": @@ -85,7 +85,8 @@ private void handleMixMode() { } private void handleIndividualMode() { - IndividualRecordingScenario individualScenario = new IndividualRecordingScenario(region, appId, cname, uid, new BasicAuthCredential(username, password)); + IndividualRecordingScenario individualScenario = new IndividualRecordingScenario(region, appId, cname, uid, + new BasicAuthCredential(username, password)); switch (individualScene) { case "recording": @@ -97,19 +98,14 @@ private void handleIndividualMode() { case "recording_and_snapshot": individualScenario.runRecordingAndSnapshot(token, storageConfig); break; - case "recording_and_postpone_transcoding": - individualScenario.runRecordingAndPostponeTranscoding(token, storageConfig); - break; - case "recording_and_audio_mix": - individualScenario.runRecordingAndAudioMix(token, storageConfig); - break; default: throw new IllegalArgumentException("invalid individual_scene: " + individualScene); } } private void handleWebMode() { - WebRecordingScenario webScenario = new WebRecordingScenario(region, appId, cname, uid, new BasicAuthCredential(username, password)); + WebRecordingScenario webScenario = new WebRecordingScenario(region, appId, cname, uid, + new BasicAuthCredential(username, password)); switch (webScene) { case "web_recorder": @@ -127,7 +123,8 @@ private void handleWebMode() { public Integer call() throws Exception { loadEnv(); - logger.info("appId: {}, cname: {}, uid: {}, username: {}, password: {}, token: {}, region: {}, storageConfig: {}", + logger.info( + "appId: {}, cname: {}, uid: {}, username: {}, password: {}, token: {}, region: {}, storageConfig: {}", appId, cname, uid, username, password, token, region, storageConfig); switch (mode) { diff --git a/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/scenario/IndividualRecordingScenario.java b/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/scenario/IndividualRecordingScenario.java index 6f1884c..e091aba 100644 --- a/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/scenario/IndividualRecordingScenario.java +++ b/examples/cloudrecording/src/main/java/io/agora/rest/examples/cloudrecording/scenario/IndividualRecordingScenario.java @@ -22,7 +22,8 @@ public class IndividualRecordingScenario extends BaseScenario { private static final Logger logger = LoggerFactory.getLogger(IndividualRecordingScenario.class); - public IndividualRecordingScenario(DomainArea domainArea, String appId, String cname, String uid, Credential credential) { + public IndividualRecordingScenario(DomainArea domainArea, String appId, String cname, String uid, + Credential credential) { super(domainArea, appId, cname, uid, credential); } @@ -32,9 +33,10 @@ public void runRecording(String token, StartResourceReq.StorageConfig storageCon try { acquireResourceRes = this.cloudRecordingClient .individualScenario() - .acquire(cname, uid, false, AcquireIndividualResourceClientReq.builder() + .acquire(cname, uid, AcquireIndividualResourceClientReq.builder() .resourceExpiredHour(1) - .build()).block(); + .build()) + .block(); } catch (AgoraException e) { logger.error("Failed to acquire resource,err:{}", e.getMessage()); return; @@ -71,7 +73,8 @@ public void runRecording(String token, StartResourceReq.StorageConfig storageCon .avFileType(Collections.singletonList("hls")) .build()) .storageConfig(storageConfig) - .build()).block(); + .build()) + .block(); } catch (AgoraException e) { logger.error("Failed to start resource,err:{}", e.getMessage()); return; @@ -87,7 +90,6 @@ public void runRecording(String token, StartResourceReq.StorageConfig storageCon logger.info("Start resource successfully,startResourceResp:{}", startResourceRes); - // query resource detail for (int i = 0; i < 3; i++) { QueryIndividualRecordingResourceRes queryIndividualRecordingResourceRes; @@ -108,7 +110,8 @@ public void runRecording(String token, StartResourceReq.StorageConfig storageCon return; } - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); + logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", + queryIndividualRecordingResourceRes); try { Thread.sleep(3000); } catch (InterruptedException e) { @@ -122,17 +125,19 @@ public void runRecording(String token, StartResourceReq.StorageConfig storageCon try { updateResourceRes = this.cloudRecordingClient .individualScenario() - .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), UpdateIndividualRecordingResourceClientReq.builder() - .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() - .audioUidList(UpdateResourceReq.AudioUIDList.builder() - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .build()) - - .videoUidList(UpdateResourceReq.VideoUIDList.builder() - .subscribeVideoUIDs(Collections.singletonList("#allstream#")) + .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), + UpdateIndividualRecordingResourceClientReq.builder() + .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() + .audioUidList(UpdateResourceReq.AudioUIDList.builder() + .subscribeAudioUIDs(Collections.singletonList("#allstream#")) + .build()) + + .videoUidList(UpdateResourceReq.VideoUIDList.builder() + .subscribeVideoUIDs(Collections.singletonList("#allstream#")) + .build()) .build()) .build()) - .build()).block(); + .block(); } catch (AgoraException e) { logger.error("Failed to update resource,err:{}", e.getMessage()); @@ -169,7 +174,8 @@ public void runRecording(String token, StartResourceReq.StorageConfig storageCon return; } - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); + logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", + queryIndividualRecordingResourceRes); try { Thread.sleep(3000); } catch (InterruptedException e) { @@ -207,9 +213,10 @@ public void runSnapshot(String token, StartResourceReq.StorageConfig storageConf try { acquireResourceRes = this.cloudRecordingClient .individualScenario() - .acquire(cname, uid, false, AcquireIndividualResourceClientReq.builder() + .acquire(cname, uid, AcquireIndividualResourceClientReq.builder() .resourceExpiredHour(1) - .build()).block(); + .build()) + .block(); } catch (AgoraException e) { logger.error("Failed to acquire resource,err:{}", e.getMessage()); return; @@ -246,7 +253,8 @@ public void runSnapshot(String token, StartResourceReq.StorageConfig storageConf .fileType(Collections.singletonList("jpg")) .build()) .storageConfig(storageConfig) - .build()).block(); + .build()) + .block(); } catch (AgoraException e) { logger.error("Failed to start resource,err:{}", e.getMessage()); return; @@ -262,7 +270,6 @@ public void runSnapshot(String token, StartResourceReq.StorageConfig storageConf logger.info("Start resource successfully,startResourceResp:{}", startResourceRes); - // query resource detail for (int i = 0; i < 3; i++) { QueryIndividualRecordingVideoScreenshotResourceRes queryIndividualRecordingVideoScreenshotResourceRes; @@ -283,7 +290,8 @@ public void runSnapshot(String token, StartResourceReq.StorageConfig storageConf return; } - logger.info("Query resource successfully,queryIndividualRecordingVideoScreenshotResourceResp:{}", queryIndividualRecordingVideoScreenshotResourceRes); + logger.info("Query resource successfully,queryIndividualRecordingVideoScreenshotResourceResp:{}", + queryIndividualRecordingVideoScreenshotResourceRes); try { Thread.sleep(3000); } catch (InterruptedException e) { @@ -297,17 +305,19 @@ public void runSnapshot(String token, StartResourceReq.StorageConfig storageConf try { updateResourceRes = this.cloudRecordingClient .individualScenario() - .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), UpdateIndividualRecordingResourceClientReq.builder() - .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() - .audioUidList(UpdateResourceReq.AudioUIDList.builder() - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .build()) - - .videoUidList(UpdateResourceReq.VideoUIDList.builder() - .subscribeVideoUIDs(Collections.singletonList("#allstream#")) + .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), + UpdateIndividualRecordingResourceClientReq.builder() + .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() + .audioUidList(UpdateResourceReq.AudioUIDList.builder() + .subscribeAudioUIDs(Collections.singletonList("#allstream#")) + .build()) + + .videoUidList(UpdateResourceReq.VideoUIDList.builder() + .subscribeVideoUIDs(Collections.singletonList("#allstream#")) + .build()) .build()) .build()) - .build()).block(); + .block(); } catch (AgoraException e) { logger.error("Failed to update resource,err:{}", e.getMessage()); @@ -344,7 +354,8 @@ public void runSnapshot(String token, StartResourceReq.StorageConfig storageConf return; } - logger.info("Query resource successfully,queryIndividualRecordingVideoScreenshotResourceResp:{}", queryIndividualRecordingVideoScreenshotResourceRes); + logger.info("Query resource successfully,queryIndividualRecordingVideoScreenshotResourceResp:{}", + queryIndividualRecordingVideoScreenshotResourceRes); try { Thread.sleep(3000); } catch (InterruptedException e) { @@ -382,9 +393,10 @@ public void runRecordingAndSnapshot(String token, StartResourceReq.StorageConfig try { acquireResourceRes = this.cloudRecordingClient .individualScenario() - .acquire(cname, uid, false, AcquireIndividualResourceClientReq.builder() + .acquire(cname, uid, AcquireIndividualResourceClientReq.builder() .resourceExpiredHour(1) - .build()).block(); + .build()) + .block(); } catch (AgoraException e) { logger.error("Failed to acquire resource,err:{}", e.getMessage()); return; @@ -424,192 +436,8 @@ public void runRecordingAndSnapshot(String token, StartResourceReq.StorageConfig .fileType(Collections.singletonList("jpg")) .build()) .storageConfig(storageConfig) - .build()).block(); - } catch (AgoraException e) { - logger.error("Failed to start resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - if (startResourceRes == null) { - logger.error("Failed to start resource, startResourceRes is null"); - return; - } - - logger.info("Start resource successfully,startResourceResp:{}", startResourceRes); - - - // query resource detail - for (int i = 0; i < 3; i++) { - QueryIndividualRecordingResourceRes queryIndividualRecordingResourceRes; - try { - queryIndividualRecordingResourceRes = this.cloudRecordingClient - .individualScenario() - .query(acquireResourceRes.getResourceId(), startResourceRes.getSid()) - .block(); - } catch (AgoraException e) { - logger.error("Failed to query resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - if (queryIndividualRecordingResourceRes == null) { - logger.error("Failed to query resource, queryIndividualRecordingResourceRes is null"); - return; - } - - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - // update - UpdateResourceRes updateResourceRes; - - try { - updateResourceRes = this.cloudRecordingClient - .individualScenario() - .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), UpdateIndividualRecordingResourceClientReq.builder() - .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() - .audioUidList(UpdateResourceReq.AudioUIDList.builder() - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .build()) - - .videoUidList(UpdateResourceReq.VideoUIDList.builder() - .subscribeVideoUIDs(Collections.singletonList("#allstream#")) - .build()) - .build()) - .build()).block(); - - } catch (AgoraException e) { - logger.error("Failed to update resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - if (updateResourceRes == null) { - logger.error("Failed to update resource, updateResourceRes is null"); - return; - } - - logger.info("Update resource successfully,updateResourceResp:{}", updateResourceRes); - - // query resource detail - for (int i = 0; i < 3; i++) { - QueryIndividualRecordingResourceRes queryIndividualRecordingResourceRes; - try { - queryIndividualRecordingResourceRes = this.cloudRecordingClient - .individualScenario() - .query(acquireResourceRes.getResourceId(), startResourceRes.getSid()) - .block(); - } catch (AgoraException e) { - logger.error("Failed to query resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - if (queryIndividualRecordingResourceRes == null) { - logger.error("Failed to query resource, queryIndividualRecordingResourceRes is null"); - return; - } - - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - StopResourceRes stopResourceRes; - try { - stopResourceRes = this.cloudRecordingClient - .individualScenario() - .stop(cname, uid, startResourceRes.getResourceId(), startResourceRes.getSid(), false) + .build()) .block(); - } catch (AgoraException e) { - logger.error("Failed to stop resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - if (stopResourceRes == null) { - logger.error("Failed to stop resource, stopResourceRes is null"); - return; - } - - logger.info("Stop resource successfully,stopResourceResp:{}", stopResourceRes); - } - - public void runRecordingAndPostponeTranscoding(String token, StartResourceReq.StorageConfig storageConfig) { - // Run recording and postpone transcoding implementation - - // acquire - AcquireResourceRes acquireResourceRes; - try { - acquireResourceRes = this.cloudRecordingClient - .individualScenario() - .acquire(cname, uid, true, AcquireIndividualResourceClientReq.builder() - .resourceExpiredHour(1) - .build()).block(); - } catch (AgoraException e) { - logger.error("Failed to acquire resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - logger.info("Acquire resource successfully,acquireResourceResp:{}", acquireResourceRes); - - if (acquireResourceRes == null) { - logger.error("Failed to acquire resource, acquireResourceRes is null"); - return; - } - - // start - StartResourceRes startResourceRes; - - try { - startResourceRes = this.cloudRecordingClient - .individualScenario() - .start(cname, uid, acquireResourceRes.getResourceId(), StartIndividualRecordingClientReq.builder() - .token(token) - .recordingConfig(StartResourceReq.RecordingConfig.builder() - .channelType(1) - .streamTypes(2) - .maxIdleTime(30) - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .subscribeVideoUIDs(Collections.singletonList("#allstream#")) - .subscribeUidGroup(0) - .build()) - .recordingFileConfig(StartResourceReq.RecordingFileConfig.builder() - .avFileType(Collections.singletonList("hls")) - .build()) - .appsCollection(StartResourceReq.AppsCollection.builder() - .combinationPolicy("postpone_transcoding") - .build()) - .transcodeOptions(StartResourceReq.TranscodeOptions.builder() - .container(StartResourceReq.Container.builder() - .format("mp4") - .build()) - .transConfig(StartResourceReq.TransConfig.builder() - .transMode("postponeTranscoding") - .build()) - .build()) - .storageConfig(storageConfig) - .build()).block(); } catch (AgoraException e) { logger.error("Failed to start resource,err:{}", e.getMessage()); return; @@ -625,7 +453,6 @@ public void runRecordingAndPostponeTranscoding(String token, StartResourceReq.St logger.info("Start resource successfully,startResourceResp:{}", startResourceRes); - // query resource detail for (int i = 0; i < 3; i++) { QueryIndividualRecordingResourceRes queryIndividualRecordingResourceRes; @@ -646,7 +473,8 @@ public void runRecordingAndPostponeTranscoding(String token, StartResourceReq.St return; } - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); + logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", + queryIndividualRecordingResourceRes); try { Thread.sleep(3000); } catch (InterruptedException e) { @@ -660,203 +488,19 @@ public void runRecordingAndPostponeTranscoding(String token, StartResourceReq.St try { updateResourceRes = this.cloudRecordingClient .individualScenario() - .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), UpdateIndividualRecordingResourceClientReq.builder() - .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() - .audioUidList(UpdateResourceReq.AudioUIDList.builder() - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .build()) - - .videoUidList(UpdateResourceReq.VideoUIDList.builder() - .subscribeVideoUIDs(Collections.singletonList("#allstream#")) + .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), + UpdateIndividualRecordingResourceClientReq.builder() + .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() + .audioUidList(UpdateResourceReq.AudioUIDList.builder() + .subscribeAudioUIDs(Collections.singletonList("#allstream#")) + .build()) + + .videoUidList(UpdateResourceReq.VideoUIDList.builder() + .subscribeVideoUIDs(Collections.singletonList("#allstream#")) + .build()) .build()) .build()) - .build()).block(); - - } catch (AgoraException e) { - logger.error("Failed to update resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - if (updateResourceRes == null) { - logger.error("Failed to update resource, updateResourceRes is null"); - return; - } - - logger.info("Update resource successfully,updateResourceResp:{}", updateResourceRes); - - // query resource detail - for (int i = 0; i < 3; i++) { - QueryIndividualRecordingResourceRes queryIndividualRecordingResourceRes; - try { - queryIndividualRecordingResourceRes = this.cloudRecordingClient - .individualScenario() - .query(acquireResourceRes.getResourceId(), startResourceRes.getSid()) - .block(); - } catch (AgoraException e) { - logger.error("Failed to query resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - if (queryIndividualRecordingResourceRes == null) { - logger.error("Failed to query resource, queryIndividualRecordingResourceRes is null"); - return; - } - - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - StopResourceRes stopResourceRes; - try { - stopResourceRes = this.cloudRecordingClient - .individualScenario() - .stop(cname, uid, startResourceRes.getResourceId(), startResourceRes.getSid(), false) .block(); - } catch (AgoraException e) { - logger.error("Failed to stop resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - if (stopResourceRes == null) { - logger.error("Failed to stop resource, stopResourceRes is null"); - return; - } - - logger.info("Stop resource successfully,stopResourceResp:{}", stopResourceRes); - } - - public void runRecordingAndAudioMix(String token, StartResourceReq.StorageConfig storageConfig) { - // Run recording and audio mix implementation - - // acquire - AcquireResourceRes acquireResourceRes; - try { - acquireResourceRes = this.cloudRecordingClient - .individualScenario() - .acquire(cname, uid, true, AcquireIndividualResourceClientReq.builder() - .resourceExpiredHour(1) - .build()).block(); - } catch (AgoraException e) { - logger.error("Failed to acquire resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - logger.info("Acquire resource successfully,acquireResourceResp:{}", acquireResourceRes); - - if (acquireResourceRes == null) { - logger.error("Failed to acquire resource, acquireResourceRes is null"); - return; - } - - // start - StartResourceRes startResourceRes; - - try { - startResourceRes = this.cloudRecordingClient - .individualScenario() - .start(cname, uid, acquireResourceRes.getResourceId(), StartIndividualRecordingClientReq.builder() - .token(token) - .recordingConfig(StartResourceReq.RecordingConfig.builder() - .channelType(1) - .streamTypes(0) - .streamMode("original") - .maxIdleTime(30) - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .subscribeUidGroup(0) - .build()) - .recordingFileConfig(StartResourceReq.RecordingFileConfig.builder() - .avFileType(Collections.singletonList("hls")) - .build()) - .appsCollection(StartResourceReq.AppsCollection.builder() - .combinationPolicy("postpone_transcoding") - .build()) - .transcodeOptions(StartResourceReq.TranscodeOptions.builder() - .container(StartResourceReq.Container.builder() - .format("mp3") - .build()) - .transConfig(StartResourceReq.TransConfig.builder() - .transMode("audioMix") - .build()) - .audio(StartResourceReq.Audio.builder() - .sampleRate("48000") - .bitRate("48000") - .channels("2") - .build()) - .build()) - .storageConfig(storageConfig) - .build()).block(); - } catch (AgoraException e) { - logger.error("Failed to start resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - - if (startResourceRes == null) { - logger.error("Failed to start resource, startResourceRes is null"); - return; - } - - logger.info("Start resource successfully,startResourceResp:{}", startResourceRes); - - - // query resource detail - for (int i = 0; i < 3; i++) { - QueryIndividualRecordingResourceRes queryIndividualRecordingResourceRes; - try { - queryIndividualRecordingResourceRes = this.cloudRecordingClient - .individualScenario() - .query(acquireResourceRes.getResourceId(), startResourceRes.getSid()) - .block(); - } catch (AgoraException e) { - logger.error("Failed to query resource,err:{}", e.getMessage()); - return; - } catch (Exception e) { - logger.error("Unknown exception,err:{}", e.getMessage()); - return; - } - if (queryIndividualRecordingResourceRes == null) { - logger.error("Failed to query resource, queryIndividualRecordingResourceRes is null"); - return; - } - - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - // update - UpdateResourceRes updateResourceRes; - - try { - updateResourceRes = this.cloudRecordingClient - .individualScenario() - .update(cname, uid, acquireResourceRes.getResourceId(), startResourceRes.getSid(), UpdateIndividualRecordingResourceClientReq.builder() - .streamSubscribe(UpdateResourceReq.StreamSubscribe.builder() - .audioUidList(UpdateResourceReq.AudioUIDList.builder() - .subscribeAudioUIDs(Collections.singletonList("#allstream#")) - .build()) - .build()) - .build()).block(); } catch (AgoraException e) { logger.error("Failed to update resource,err:{}", e.getMessage()); @@ -893,7 +537,8 @@ public void runRecordingAndAudioMix(String token, StartResourceReq.StorageConfig return; } - logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", queryIndividualRecordingResourceRes); + logger.info("Query resource successfully,queryIndividualRecordingResourceResp:{}", + queryIndividualRecordingResourceRes); try { Thread.sleep(3000); } catch (InterruptedException e) {