ビデオ通話、ライブ配信、オンライン授業などの場面では、ユーザーが後で視聴できるよう音声および映像ストリームを録画するニーズがよくあります。本ガイドでは、クライアント SDK を使用して音声および映像をローカルファイルとして録画・保存する方法について説明します。
仕組み
通話中には、ご利用の端末上の音声および映像ストリームを録画できます。この機能の実装には、以下の 2 つの主要な API を使用します。
API | 説明 | パラメーター |
| ローカル録画セッションを構成し、開始します。 |
|
| 進行中のローカル録画を停止し、録画ファイルを保存します。 | なし。 |
サンプルコード
Android でのローカル録画:Android/ARTCExample/AdvancedUsage/src/main/java/com/aliyun/artc/api/advancedusage/LocalRecord/RecordingActivity.java
iOS でのローカル録画:iOS/ARTCExample/AdvancedUsage/LocalRecording/RecordingVC.swift
前提条件
開始する前に、以下の前提条件を満たしてください。
Alibaba Cloud コンソールで Real-time Communication (RTC) アプリケーションを作成済みであること。手順については、「アプリケーションの作成」をご参照ください。また、RTC コンソールから取得した App ID および App Key が必要です。
ARTC SDK をプロジェクトに統合し、基本的なリアルタイム音声・映像機能を実装済みであること。手順については、「SDK のダウンロードと統合」および「音声および映像通話の実装」をご参照ください。
実装手順
1. 録画設定の構成
startRecord を呼び出す前に、ストリームを配信(publish)してください。状態変化コールバックにより配信が正常に完了したことを確認した後、録画パラメーターを構成できます。
Android
AliRtcEngine.AliRtcRecordType recordType = AliRtcEngine.AliRtcRecordType.AliRtcRecordTypeVideo; // 録画タイプを設定:音声のみ、または音声と映像の両方。
AliRtcEngine.AliRtcRecordFormat recordFormat = AliRtcEngine.AliRtcRecordFormat.AliRtcRecordFormatMP4; // 録画フォーマットを設定。音声のみ:AAC、WAV;音声と映像:MP4。
String filePath = getApplicationContext().getExternalFilesDir( null) + "/record"; // 保存先パスを指定。
Log.i("startRecord", "filePath:" + filePath);
// 音声録画設定を構成。
AliRtcEngine.AliRtcRecordAudioConfig audioConfig = new AliRtcEngine.AliRtcRecordAudioConfig();
audioConfig.sampleRate = AliRtcEngine.AliRtcAudioSampleRate.AliRtcAudioSampleRate_48000; // サンプルレート。
audioConfig.quality = AliRtcEngine.AliRtcAudioQuality.AliRtcAudioQualityHigh; // 高品質設定はファイルサイズ増加につながります。
audioConfig.externalPcmCaptureRecording = true; // 外部キャプチャソースからの録画を有効化。
audioConfig.externalPcmRenderRecording = true; // 外部レンダリング(再生)ソースからの録画を有効化。
// 映像録画設定を構成。
AliRtcEngine.AliRtcRecordVideoConfig videoConfig = new AliRtcEngine.AliRtcRecordVideoConfig();
videoConfig.quality = AliRtcEngine.AliRtcVideoQuality.AliRtcVideoQualityDefault;
videoConfig.encodeMode = AliRtcEngine.AliRtcRecordVideoEncodeMode.AliRtcRecordReusingEncoderMode; // 配信時に使用するエンコーダーを再利用。
long maxSize = -1; // ファイルサイズの上限(バイト単位)。この制限に達すると、録画は自動的に停止します。
long maxDuration = -1; // 録画時間の上限(秒単位)。この制限に達すると、録画は自動的に停止します。iOS
// 録画タイプを設定。本例では音声と映像の両方を録画します。
let recordType:AliRtcRecordType = .video // 音声と映像を含む MP4 形式をサポート。
// 録画フォーマットを設定。
let recordFormat: AliRtcRecordFormat = .MP4
// 録画ファイルの保存先パス(アプリケーションのサンドボックスディレクトリ)を設定。
let fileDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let filePath = (fileDirectory as NSString).appendingPathComponent("record")
let fm = FileManager.default
if !fm.fileExists(atPath: filePath) {
try? fm.createDirectory(atPath: filePath, withIntermediateDirectories: true, attributes: nil)
}
// 必要に応じて音声録画設定を構成。
var audioConfig = AliRtcRecordAudioConfig(
sampleRate: ._48000, // サンプルレート:48000 Hz。
quality: .high, // 高音質。
enableRecordExternalRenderPCM: true, // カスタムレンダリング(再生)ソースからの音声録画を許可。
enableRecordExternalCapturePCM: true // カスタムキャプチャソースからの音声録画を許可。
)
// 映像録画設定を構成。
var videoConfig = AliRtcRecordVideoConfig(
quality: .default,
sourceType: .video,
canvas: AliRtcRecordVideoCanvasConfig(canvasWidth: 720, canvasHeight: 1280),
fps: 30,
bitrate: 1200
)
// ファイルサイズおよび録画時間の制限を設定。
let maxSize: Int64 = -1 // 単位:バイト。
let maxDuration: Int32 = -1 // 単位:秒。macOS
/*
音声設定を構成
*/
AliRtcRecordAudioConfig AudioConfig ;
AudioConfig.quality = AliRtcAudioQualityMidium ;
AudioConfig.sampleRate = AliRtcAudioSampleRate_48000 ;
AudioConfig.enableRecordExternalCapturePCM = false ;
AudioConfig.enableRecordExternalRenderPCM = false ;
/*
映像設定を構成
*/
AliRtcRecordVideoConfig VideoConfig ;
VideoConfig.sourceType = AliRtcVideosourceCameraType ;
VideoConfig.bitrate = view.bitrate ;
VideoConfig.fps = 20 ;
VideoConfig.quality = AliRtcVideoQualityDefault ;
Windows
AliEngineRecordFormat recordFormat = AliEngineRecordFormatMP4; // 録画フォーマット。音声:AAC、WAV;映像:MP4。
std::string filePath = "D:\\record_tmp\\record_video.mp4"; // 保存先パス。
// 音声録画設定。
AliEngineRecordAudioConfig audioConfig;
audioConfig.sampleRate = AliEngineAudioSampleRate_48000; // サンプルレート。
audioConfig.quality = AliEngineAudioQualityHigh; // 高品質設定はファイルサイズ増加につながります。
audioConfig.externalPcmCaptureRecording = true; // 外部キャプチャソースからの録画を有効化。
audioConfig.externalPcmRenderRecording = true; // 外部レンダリング(再生)ソースからの録画を有効化。
// 映像録画設定。
AliEngineRecordVideoConfig videoConfig;
videoConfig.quality = AliEngineVideoQualityDefault;
// 現在のバージョンでは、配信時に使用するエンコーダーの再利用のみをサポート。
videoConfig.encodeMode = AliEngineRecordVideoReusingEncoderMode;
AliEngineRecordType recordType = AliEngineRecordTypeVideo;
2. 録画の開始
構成済みの設定を引数として startRecord を呼び出して録画を開始します。成功すると、SDK が音声および映像ストリームの録画を開始します。
Android
mAliRtcEngine.startRecord(recordType, recordFormat, filePath, audioConfig, videoConfig, maxSize, maxDuration);iOS
let result = withUnsafeMutablePointer(to: &audioConfig, { audioPtr in
withUnsafeMutablePointer(to: &videoConfig, { videoPtr in
engine.start(
recordType,
recordFormat: recordFormat,
filePath: filePath,
audioConfig: audioPtr,
videoConfig: videoPtr
)
})
})macOS
BOOL ret = [self.engine startRecord:AliRtcRecordTypeVideo recordFormat:AliRtcRecordFormatMP4
filePath:view.recordFilePath audioConfig:&AudioConfig videoConfig:&VideoConfig isFragment:FALSE] ;
Windows
mAliRtcEngine->StartRecord(recordType, recordFormat, filePath.c_str(), audioConfig, videoConfig, false);3. 録画の停止
手動で録画を停止するには、stopRecord メソッドを呼び出します。
Android
mAliRtcEngine.stopRecord();iOS
rtcEngine?.stopRecord()macOS
[self.engine stopRecord];Windows
mAliRtcEngine->StopRecord();4. 録画ファイルの取得
録画が完了すると、ファイルは指定されたパスに保存されます。その後、サーバーへのアップロード、再生、削除など、必要に応じてこのファイルを処理できます。
アプリケーションが適切なストレージ権限(例:Android の
WRITE_EXTERNAL_STORAGE)を有していることを確認してください。低性能デバイスでは、通話体験の滑らかさを維持するために録画品質を低下させることを検討してください。