privatetestFdNumber;// Used to save the FD address.
functionSetCallBack(audioRecorder){
// Set the callbacks related to audio recording.
audioRecorder.on('prepare',()=>{// Set the 'prepare' event callback.
setCallBack(audioRecorder){
console.log('prepare success');
audioRecorder.on('prepare',()=>{// Set the 'prepare' event callback.
// The recording page is ready. You can click the Record button to start recording.
console.log('prepare success');
audioRecorder.start();// Call the start API to start recording and trigger the 'start' event callback.
});
});
audioRecorder.on('start',()=>{// Set the 'start' event callback.
audioRecorder.on('start',()=>{// Set the 'start' event callback.
console.log('audio recorder start success');
console.log('audio recorder start success');
// The Record button is changed to the pausable state.
audioRecorder.pause();// Call the pause API to pause recording and trigger the 'pause' event callback.
});
});
audioRecorder.on('pause',()=>{// Set the 'pause' event callback.
audioRecorder.on('pause',()=>{// Set the 'pause' event callback.
console.log('audio recorder pause success');
console.log('audio recorder pause success');
// The Record button is changed to the recordable state.
audioRecorder.resume();// Call the resume API to resume recording and trigger the 'resume' event callback.
});
});
audioRecorder.on('resume',()=>{// Set the 'resume' event callback.
audioRecorder.on('resume',()=>{// Set the 'resume' event callback.
console.log('audio recorder resume success');
console.log('audio recorder resume success');
// The Record button is changed to the pausable state.
audioRecorder.stop();// Call the stop API to stop recording and trigger the 'stop' event callback.
});
});
audioRecorder.on('stop',()=>{// Set the 'stop' event callback.
audioRecorder.on('stop',()=>{// Set the 'stop' event callback.
console.log('audio recorder stop success');
console.log('audio recorder stop success');
audioRecorder.reset();// Call the reset API to reset the recorder and trigger the 'reset' event callback.
});
});
audioRecorder.on('release',()=>{// Set the 'release' event callback.
audioRecorder.on('reset',()=>{// Set the 'reset' event callback.
console.log('audio recorder release success');
console.log('audio recorder reset success');
audioRecorder.release();// Call the release API to release resources and trigger the 'release' event callback.
});
});
audioRecorder.on('reset',()=>{// Set the 'reset' event callback.
audioRecorder.on('release',()=>{// Set the 'release' event callback.
console.log('audio recorder reset success');
console.log('audio recorder release success');
// You need to reset the recording parameters for another recording.
audioRecorder=undefined;
});
});
audioRecorder.on('error',(error)=>{// Set the 'error' event callback.
audioRecorder.on('error',(error)=>{// Set the 'error' event callback.
console.info(`audio error called, errName is ${error.name}`);
console.info(`audio error called, errName is ${error.name}`);
console.info(`audio error called, errCode is ${error.code}`);
console.info(`audio error called, errCode is ${error.code}`);
console.info(`audio error called, errMessage is ${error.message}`);
console.info(`audio error called, errMessage is ${error.message}`);
});
});
}
}
// pathName indicates the passed recording file name, for example, 01.mp3. The generated file address is /storage/media/100/local/files/Movies/01.mp3.
// pathName indicates the passed recording file name, for example, 01.mp3. The generated file address is /storage/media/100/local/files/Video/01.mp3.
// To use the media library, declare the following permissions: ohos.permission.MEDIA_LOCATION, ohos.permission.WRITE_MEDIA, and ohos.permission.READ_MEDIA.
// To use the media library, declare the following permissions: ohos.permission.MEDIA_LOCATION, ohos.permission.WRITE_MEDIA, and ohos.permission.READ_MEDIA.
asyncfunctiongetFd(pathName){
asyncgetFd(pathName){
letdisplayName=pathName;
letdisplayName=pathName;
constmediaTest=mediaLibrary.getMediaLibrary();
constmediaTest=mediaLibrary.getMediaLibrary();
letfileKeyObj=mediaLibrary.FileKey;
letfileKeyObj=mediaLibrary.FileKey;
...
@@ -72,49 +75,37 @@ async function getFd(pathName) {
...
@@ -72,49 +75,37 @@ async function getFd(pathName) {
privatetestFdNumber;// Used to save the FD address.
functionSetCallBack(audioRecorder){
// Set the callbacks related to audio recording.
audioRecorder.on('prepare',()=>{// Set the 'prepare' event callback.
setCallBack(audioRecorder){
console.log('prepare success');
audioRecorder.on('prepare',()=>{// Set the 'prepare' event callback.
// The recording page is ready. You can click the Record button to start recording.
console.log('prepare success');
audioRecorder.start();// Call the start API to start recording and trigger the 'start' event callback.
});
});
audioRecorder.on('start',()=>{// Set the 'start' event callback.
audioRecorder.on('start',()=>{// Set the 'start' event callback.
console.log('audio recorder start success');
console.log('audio recorder start success');
// The Record button is changed to the pausable state.
audioRecorder.stop();// Call the stop API to stop recording and trigger the 'stop' event callback.
});
});
audioRecorder.on('stop',()=>{// Set the 'stop' event callback.
audioRecorder.on('stop',()=>{// Set the 'stop' event callback.
console.log('audio recorder stop success');
console.log('audio recorder stop success');
});
audioRecorder.release();// Call the release API to release resources and trigger the 'release' event callback.
audioRecorder.on('release',()=>{// Set the 'release' event callback.
});
console.log('audio recorder release success');
audioRecorder.on('release',()=>{// Set the 'release' event callback.
});
console.log('audio recorder release success');
}
audioRecorder=undefined;
});
audioRecorder.on('error',(error)=>{// Set the 'error' event callback.
console.info(`audio error called, errName is ${error.name}`);
console.info(`audio error called, errCode is ${error.code}`);
console.info(`audio error called, errMessage is ${error.message}`);
});
}
// pathName indicates the passed recording file name, for example, 01.mp3. The generated file address is /storage/media/100/local/files/Movies/01.mp3.
// pathName indicates the passed recording file name, for example, 01.mp3. The generated file address is /storage/media/100/local/files/Video/01.mp3.
// To use the media library, declare the following permissions: ohos.permission.MEDIA_LOCATION, ohos.permission.WRITE_MEDIA, and ohos.permission.READ_MEDIA.
// To use the media library, declare the following permissions: ohos.permission.MEDIA_LOCATION, ohos.permission.WRITE_MEDIA, and ohos.permission.READ_MEDIA.
asyncfunctiongetFd(pathName){
asyncgetFd(pathName){
letdisplayName=pathName;
letdisplayName=pathName;
constmediaTest=mediaLibrary.getMediaLibrary();
constmediaTest=mediaLibrary.getMediaLibrary();
letfileKeyObj=mediaLibrary.FileKey;
letfileKeyObj=mediaLibrary.FileKey;
...
@@ -154,41 +153,43 @@ async function getFd(pathName) {
...
@@ -154,41 +153,43 @@ async function getFd(pathName) {
awaitthis.getFd('01.mp3');// Call the getFd method to obtain the FD address of the file to be recorded.
// 3. Set the recording parameters.
letaudioRecorderConfig={
audioEncodeBitRate:22050,
audioSampleRate:22050,
numberOfChannels:2,
uri:this.testFdNumber,// testFdNumber is generated by getFd.
location:{latitude:30,longitude:130},
audioEncoderMime:media.CodecMimeType.AUDIO_AAC,
fileFormat:media.ContainerFormatType.CFT_MPEG_4A,
}
audioRecorder.prepare(audioRecorderConfig);// Call the prepare method to trigger the 'prepare' event callback.
}
}
}
awaitgetFd('01.mp3');
// 1. Create an AudioRecorder instance.
letaudioRecorder=media.createAudioRecorder();
// 2. Set the callbacks.
SetCallBack(audioRecorder);
// 3. Set the recording parameters.
letaudioRecorderConfig={
audioEncoder:media.AudioEncoder.AAC_LC,
audioEncodeBitRate:22050,
audioSampleRate:22050,
numberOfChannels:2,
format:media.AudioOutputFormat.AAC_ADTS,
uri:testFdNumber,// testFdNumber is generated by getFd.
location:{latitude:30,longitude:130},
}
audioRecorder.prepare(audioRecorderConfig)
// 4. Start recording.
audioRecorder.start();// The start API can be called to trigger the 'start' event callback only after the 'prepare' event callback is complete.
// 5. Stop recording.
audioRecorder.stop();// The stop API can be called to trigger the 'stop' event callback only after the 'start' or 'resume' event callback is complete.
// 6. Release resources.
audioRecorder.release();// The AudioRecorder resource is destroyed.
audioRecorder=undefined;
```
```
## Samples
The following samples are provided to help you better understand how to develop audio recording:
-[`Recorder`: Recorder (eTS, API 8)](https://gitee.com/openharmony/app_samples/tree/master/media/Recorder)
-[`eTsAudioPlayer`: Audio Player (eTS)](https://gitee.com/openharmony/app_samples/blob/master/media/Recorder/entry/src/main/ets/MainAbility/pages/Play.ets)
@@ -16,21 +16,20 @@ During video recording, audio and video signals are captured, encoded, and saved
...
@@ -16,21 +16,20 @@ During video recording, audio and video signals are captured, encoded, and saved
## How to Develop
## How to Develop
For details about the APIs used for video recording, see [VideoRecorder in the Media API](../reference/apis/js-apis-media.md).
For details about the APIs, see [VideoRecorder in the Media API](../reference/apis/js-apis-media.md).
### Full-Process Scenario
### Full-Process Scenario
The full video recording process includes creating an instance, setting recording parameters, recording video, pausing, resuming, and stopping recording, and releasing resources.
The full video recording process includes creating an instance, setting recording parameters, starting, pausing, resuming, and stopping recording, and releasing resources.
privatetestFdNumber;// Used to save the FD address.
// pathName indicates the passed recording file name, for example, 01.mp4. The generated file address is /storage/media/100/local/files/Video/01.mp4.
// pathName indicates the passed recording file name, for example, 01.mp4. The generated file address is /storage/media/100/local/files/Movies/01.mp4.
// To use the media library, declare the following permissions: ohos.permission.MEDIA_LOCATION, ohos.permission.WRITE_MEDIA, and ohos.permission.READ_MEDIA.
// To use the media library, declare the following permissions: ohos.permission.MEDIA_LOCATION, ohos.permission.WRITE_MEDIA, and ohos.permission.READ_MEDIA.
asyncgetFd(pathName){
asyncfunctiongetFd(pathName){
letdisplayName=pathName;
letdisplayName=pathName;
constmediaTest=mediaLibrary.getMediaLibrary();
constmediaTest=mediaLibrary.getMediaLibrary();
letfileKeyObj=mediaLibrary.FileKey;
letfileKeyObj=mediaLibrary.FileKey;
...
@@ -38,110 +37,115 @@ async function getFd(pathName) {
...
@@ -38,110 +37,115 @@ async function getFd(pathName) {
// Obtain the surface ID, save it, and pass it to camera-related APIs.
// Video recording depends on camera-related interfaces. The following operations can be performed only after the video output start interface is invoked.
// Video recording depends on camera-related APIs. The following operations can be performed only after the video output start API is invoked. For details about how to call the camera APIs, see the samples.
// Start video recording.
// Pause video playback before the video output stop interface is invoked.