鴻蒙OS 視頻錄制開發(fā)指導(dǎo)

2020-09-18 14:12 更新

場景介紹

視頻錄制的主要工作是選擇視頻/音頻來源后,錄制并生成視頻/音頻文件。

接口說明

接口名 功能描述
Recorder() 創(chuàng)建 Recorder 實(shí)例。
setSource(Source source) 設(shè)置音視頻源。
setAudioProperty(AudioProperty property) 設(shè)置音頻屬性。
setVideoProperty(VideoProperty property) 設(shè)置視頻屬性。
setStorageProperty(StorageProperty property) 設(shè)置音視頻存儲(chǔ)屬性。
prepare() 準(zhǔn)備錄制資源。
start() 開始錄制。
stop() 停止錄制。
pause() 暫停錄制。
resume() 恢復(fù)錄制。
reset() 重置錄制。
setRecorderLocation(float latitude, float longitude) 設(shè)置視頻的經(jīng)緯度。
setOutputFormat(int outputFormat) 設(shè)置輸出文件格式。
getVideoSurface() 獲取視頻窗口。
setRecorderProfile(RecorderProfile profile) 設(shè)置媒體錄制配置信息。
registerRecorderListener(IRecorderListener listener) 注冊(cè)媒體錄制回調(diào)。
release() 釋放媒體錄制資源。

開發(fā)步驟

  1. 調(diào)用 Recorder() 方法,創(chuàng)建 Recorder 實(shí)例。

  1. 調(diào)用 setOutputFormat(int outputFormat) 方法,設(shè)置錄制文件存儲(chǔ)格式。

  1. 構(gòu)造數(shù)據(jù)源對(duì)象,并調(diào)用 Recorder 實(shí)例的 setSource(Source source) 方法,設(shè)置媒體源,代碼示例如下:

   Recorder recorder = new Recorder();
   FileDescriptor fd = in.getFD();
   Source source = new Source(fd);
   source.setRecorderAudioSource(Recorder.AudioSource.DEFAULT);
   recorder.setSource(source);

  1. (可選)構(gòu)造音頻屬性 AudioProperty 對(duì)象(不設(shè)置音頻則是只錄視頻),并調(diào)用 Recorder 實(shí)例的 setAudioProperty(AudioProperty property) 方法,設(shè)置錄制的音頻屬性,代碼示例如下:

   final int AUDIO_NUM_CHANNELS_STEREO = 2;
   final int AUDIO_SAMPLE_RATE_HZ = 8000;
   AudioProperty audioProperty = new AudioProperty.Builder()
                       .setRecorderNumChannels(AUDIO_NUM_CHANNELS_STEREO)
                       .setRecorderSamplingRate(AUDIO_SAMPLE_RATE_HZ)
                       .setRecorderAudioEncoder(Recorder.AudioEncoder.DEFAULT)
                       .build();
   recorder.setAudioProperty(audioProperty);

  1. 構(gòu)造存儲(chǔ)屬性 StorageProperty 對(duì)象,并調(diào)用 Recorder 實(shí)例的 setStorageProperty(StorageProperty property) 方法,設(shè)置錄制的存儲(chǔ)屬性,代碼示例如下:

   String path = "/path/audiotestRecord.mp4";
   StorageProperty storageProperty = new StorageProperty.Builder()
                       .setRecorderPath(path)
                       .setRecorderMaxDurationMs(-1) 
                       .setRecorderMaxFileSizeBytes(-1)
                       .build();
   recorder.setStorageProperty(storageProperty);

  1. (可選)構(gòu)造視頻屬性 VideoProperty 對(duì)象,并調(diào)用 Recorder 實(shí)例的 setVideoProperty(VideoProperty property) 方法,設(shè)置錄制的視頻屬性,代碼示例如下:

   VideoProperty videoProperty = new VideoProperty.Builder()
                       .setRecorderVideoEncoder(Recorder.VideoEncoder.DEFAULT)
                       .setRecorderWidth(1080)
                       .setRecorderDegrees(0)
                       .setRecorderHeight(800)
                       .setRecorderBitRate(10000000)
                       .setRecorderRate(30)
                       .build();
   recorder.setVideoProperty(videoProperty);

  1. 調(diào)用 prepare(),準(zhǔn)備錄制。

  1. (可選)構(gòu)造錄制回調(diào),首先構(gòu)造對(duì)象 IRecorderListener,IRecorderListener 需要實(shí)現(xiàn) onError(int what, int extra),實(shí)現(xiàn)錄制過程收到錯(cuò)誤信息時(shí)做相應(yīng)的操作。下面的代碼例子中錄制異常時(shí),打印了相關(guān)的日志信息,代碼示例如下:

   IRecorderListener listener = new RecorderErrorAndInfoListener() {
       @Override
       public void onError(int what, int extra) {
           HiLog.error("EncodeWriteFileListener onError what:%{public}d, extra:%{public}d", what, extra);
       }
   }

  1. 調(diào)用 start() 方法,開始錄制。

  1. (可選)調(diào)用 pause() 方法和 resume() 方法,可以實(shí)現(xiàn)暫停和恢復(fù)錄制。

  1. 調(diào)用 stop() 方法停止錄制。

  1. 錄制結(jié)束后,調(diào)用 release() 釋放資源。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)