全部產品
Search
文件中心

ApsaraVideo Live:用戶端本地錄製

更新時間:Mar 21, 2026

在進行視訊通話、直播、線上教學時,使用者經常需要將視頻錄製儲存下來,方便後續觀看。本文將介紹如何通過用戶端 SDK 錄製音視頻並儲存為本地檔案。

功能介紹

通話過程中,可以錄製本地的音視頻流。相關實現主要涉及兩個 API:

介面

功能描述

參數說明

startRecord

啟動本地錄製功能,配置錄製參數並開始錄製。

  • recordType:錄製類型,可選擇純音頻或者音視頻錄製。

  • recordFormat:錄製檔案的格式。純音頻支援 AAC 和 WAV 格式;視頻支援 MP4 格式。

  • filePath:錄製檔案儲存路徑。

  • audioConfig:錄製音訊配置,包括採樣率、錄製品質、是否允許錄製外部採集或外部播放的音頻。

  • videoConfig:錄製視頻配置,包括視頻的品質、編碼模式。

  • maxSize:最大允許錄製的檔案大小,單位為位元組。當錄製的檔案超過此大小後自動停止錄製。

  • maxDuration:最大允許錄製的檔案時間長度,單位為秒。當錄製的檔案時間長度超過這個時間後自動停止錄製。

stopRecord

停止進行中的本地錄製,並儲存錄製檔案。

無。

範例程式碼

Android端本地錄製Android/ARTCExample/AdvancedUsage/src/main/java/com/aliyun/artc/api/advancedusage/LocalRecord/RecordingActivity.java

iOS端本地錄製iOS/ARTCExample/AdvancedUsage/LocalRecording/RecordingVC.swift

前提條件

在實現相關功能前,請確保滿足以下條件:

功能實現

image

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,                    // 採樣率48k
    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 // 單位: 秒

Mac

  
/*
   設定音頻設定
*/
    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. 開始錄製

使用配置好的 recordConfig 對象啟動錄製功能。介面調用成功後,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
        )
    })
})

Mac

 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()

Mac

[self.engine stopRecord];

Windows

mAliRtcEngine->StopRecord();

4. 擷取錄製檔案

錄製完成後,可在指定路徑下找到產生的錄製檔案。開發人員可根據業務需求進一步處理該檔案,例如上傳到伺服器、播放回放或刪除臨時檔案。

說明
  • 確保應用具備訪問儲存空間的許可權(如 Android 上的 WRITE_EXTERNAL_STORAGE)。

  • 在低效能裝置上應適當降低錄製品質以避免影響通話體驗。