HarmonyOS 5开发从入门到精通(十):多媒体开发
HarmonyOS 5开发从入门到精通(十):多媒体开发
多媒体功能让应用能处理图片、音频、视频等内容。本章介绍HarmonyOS的多媒体开发。
一、图片处理
1.1 加载和显示图片
// 加载本地图片
Image($r('app.media.icon'))
.width(100)
.height(100)
// 加载网络图片
Image('https://example.com/image.jpg')
.width(200)
.height(200)
1.2 图片选择器
import picker from '@ohos.file.picker';
async function pickImage() {
let photoPicker = new picker.PhotoViewPicker();
let result = await photoPicker.select();
return result.photoUris[0];
}
二、相机功能
2.1 权限配置
{
"requestPermissions": [
{
"name": "ohos.permission.CAMERA"
}
]
}
2.2 拍照功能
import camera from '@ohos.multimedia.camera';
async function takePhoto() {
let cameraManager = camera.getCameraManager(getContext());
let cameras = await cameraManager.getSupportedCameras();
let cameraDevice = await cameraManager.createCamera(cameras[0]);
// 创建拍照会话
let session = await cameraDevice.createCaptureSession();
// 拍照逻辑...
}
三、音频播放
3.1 播放本地音频
import media from '@ohos.multimedia.media';
async function playAudio() {
let audioPlayer = await media.createAudioPlayer();
audioPlayer.src = 'file:///data/storage/audio.mp3';
await audioPlayer.prepare();
audioPlayer.play();
}
3.2 控制播放
// 暂停播放
audioPlayer.pause();
// 继续播放
audioPlayer.play();
// 停止播放
audioPlayer.stop();
// 跳转到指定位置
audioPlayer.seek(30000); // 30秒
四、音频录制
4.1 录制音频
import media from '@ohos.multimedia.media';
async function startRecording() {
let audioRecorder = await media.createAudioRecorder();
let config = {
audioEncoder: media.AudioEncoder.AAC,
audioSampleRate: 44100,
numberOfChannels: 2
};
await audioRecorder.prepare(config);
audioRecorder.start();
}
五、视频播放
5.1 播放视频
async function playVideo() {
let videoPlayer = await media.createVideoPlayer();
videoPlayer.src = 'file:///data/storage/video.mp4';
await videoPlayer.prepare();
videoPlayer.play();
}
5.2 视频控制器
// 获取视频时长
let duration = videoPlayer.duration;
// 获取当前播放位置
let currentTime = videoPlayer.currentTime;
// 设置循环播放
videoPlayer.loop = true;
六、视频录制
6.1 录制视频
async function startVideoRecording() {
let videoRecorder = await media.createVideoRecorder();
let config = {
audioSourceType: media.AudioSource.AUDIO_SOURCE_MIC,
videoSourceType: media.VideoSource.VIDEO_SOURCE_SURFACE,
profile: {
audioBitrate: 128000,
videoFrameRate: 30
}
};
await videoRecorder.prepare(config);
videoRecorder.start();
}
七、图片编辑
7.1 图片缩放
import image from '@ohos.multimedia.image';
async function resizeImage(uri: string) {
let imageSource = image.createImageSource(uri);
let pixelMap = await imageSource.createPixelMap();
let resized = await pixelMap.scale(0.5, 0.5);
return resized;
}
7.2 图片旋转
async function rotateImage(uri: string) {
let imageSource = image.createImageSource(uri);
let pixelMap = await imageSource.createPixelMap();
let rotated = await pixelMap.rotate(90);
return rotated;
}
八、音频特效
8.1 音频均衡器
import audio from '@ohos.multimedia.audio';
async function setupEqualizer() {
let audioManager = audio.getAudioManager();
let equalizer = await audioManager.getEqualizer();
// 设置低音增强
await equalizer.setBandLevel(0, 10);
// 设置高音增强
await equalizer.setBandLevel(4, 8);
}
九、音量控制
9.1 获取音量
let audioManager = audio.getAudioManager();
// 获取媒体音量
let mediaVolume = audioManager.getVolume(audio.AudioVolumeType.MEDIA);
// 获取铃声音量
let ringVolume = audioManager.getVolume(audio.AudioVolumeType.RINGTONE);
9.2 设置音量
// 设置媒体音量
audioManager.setVolume(audio.AudioVolumeType.MEDIA, 50);
// 静音
audioManager.mute(audio.AudioVolumeType.MEDIA, true);
十、实战案例:简易音乐播放器
@Component
struct MusicPlayer {
@State isPlaying: boolean = false
@State currentTime: number = 0
@State totalTime: number = 0
private audioPlayer: media.AudioPlayer | null = null
async playMusic() {
if (!this.audioPlayer) {
this.audioPlayer = await media.createAudioPlayer();
this.audioPlayer.src = 'file:///data/music.mp3';
await this.audioPlayer.prepare();
this.totalTime = this.audioPlayer.duration;
}
if (this.isPlaying) {
this.audioPlayer.pause();
} else {
this.audioPlayer.play();
this.startTimeUpdate();
}
this.isPlaying = !this.isPlaying;
}
startTimeUpdate() {
setInterval(() => {
if (this.audioPlayer) {
this.currentTime = this.audioPlayer.currentTime;
}
}, 1000);
}
formatTime(seconds: number): string {
let mins = Math.floor(seconds / 60);
let secs = Math.floor(seconds % 60);
return `${mins}:${secs.toString().padStart(2, '0')}`;
}
build() {
Column({ space: 20 }) {
Text('音乐播放器')
.fontSize(20)
.fontWeight(FontWeight.Bold)
Text(`进度: ${this.formatTime(this.currentTime)} / ${this.formatTime(this.totalTime)}`)
Button(this.isPlaying ? '暂停' : '播放')
.onClick(() => this.playMusic())
.width(150)
}
}
}
总结
本章学习了HarmonyOS的多媒体开发:
✅ 图片处理 - 加载、选择、编辑图片
✅ 相机功能 - 拍照、录像、预览
✅ 音频播放 - 播放、暂停、控制音频
✅ 音频录制 - 录制和保存音频
✅ 视频播放 - 播放和控制视频
✅ 视频录制 - 录制和保存视频
✅ 音量控制 - 管理系统音量
✅ 音频特效 - 添加均衡器效果
使用建议:
- 及时释放多媒体资源
- 处理权限申请
- 考虑不同格式兼容性
- 优化大文件处理性能
这样多媒体功能就能让你的应用更加丰富和有趣了。
浙公网安备 33010602011771号