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的多媒体开发:

图片处理 - 加载、选择、编辑图片

相机功能 - 拍照、录像、预览

音频播放 - 播放、暂停、控制音频

音频录制 - 录制和保存音频

视频播放 - 播放和控制视频

视频录制 - 录制和保存视频

音量控制 - 管理系统音量

音频特效 - 添加均衡器效果

使用建议

  1. 及时释放多媒体资源
  2. 处理权限申请
  3. 考虑不同格式兼容性
  4. 优化大文件处理性能

这样多媒体功能就能让你的应用更加丰富和有趣了。

posted @ 2025-12-23 20:43  奇崽  阅读(0)  评论(0)    收藏  举报