多设备聊天室实战(三):语音消息 + TV 展示 + 图片传输与结构优化 HarmonyOS 5.0.0 或以上

多设备聊天室实战(三):语音消息 + TV 展示 + 图片传输与结构优化

适配版本:HarmonyOS 5.0.0 或以上
阅读目标:掌握分布式语音和图片消息的录制、上传、同步与 TV 展示方式,实现多媒体通信能力在多设备上的协同传输与渲染


🧠 一、核心能力列表

模块实现目标
语音消息支持录音、播放、分布式路径广播
图片传输图片选择、压缩、本地存储路径同步
TV 渲染适配语音消息 + 图片在 TV 上清晰展示
文件统一结构设计图片/语音/文本消息统一结构,便于扩展与渲染

📦 二、消息结构扩展

interface ChatMessage {
  id: string
  groupId: string
  type: 'text' | 'image' | 'voice'
  content: string // 文本 or 文件路径
  mediaDuration?: number // 语音时长
  timestamp: number
  fromUser: string
  status: 'sent' | 'revoked'
}

🎤 三、语音消息录制与发送

使用 mediarecorder 模块录制音频

import mediarecorder from '@ohos.multimedia.mediarecorder'

const recorder = mediarecorder.getMediaRecorder()
await recorder.prepare({ audioSourceType: 1 })
await recorder.start()
// ... 停止录音
await recorder.stop()

const filePath = '/data/user/record/audio001.mp3'
kvStore.put(`group_${groupId}_msg_${msgId}`, JSON.stringify({
  id: msgId,
  type: 'voice',
  content: filePath,
  mediaDuration: 8,
  ...
}))

🖼️ 四、图片消息发送

  1. 从本地选择图片
  2. 压缩 + 存储至 /data/user/images
  3. 发送同步路径至其他设备:
{
  id: 'img_001',
  type: 'image',
  content: '/data/user/images/img001.jpg',
  ...
}

📺 五、TV 大屏渲染逻辑建议

消息类型展示方式
文本字号放大,居中显示
图片使用 <Image src> 原图展示,适配 TV 宽高
语音显示带 icon 和时长的播放器 UI,支持点击播放
if (msg.type === 'voice') {
  AudioPlayer({ src: `distributed://${msg.deviceId}${msg.content}` })
}

🧩 六、统一渲染组件建议(多态渲染)

function renderMessage(msg: ChatMessage) {
  switch (msg.type) {
    case 'text':
      return Text(msg.content)
    case 'image':
      return Image({ src: `distributed://${msg.deviceId}${msg.content}` })
    case 'voice':
      return VoiceBubble({ path: msg.content, duration: msg.mediaDuration })
  }
}

📌 VoiceBubble 为自定义语音气泡组件,支持播放状态控制


🧠 七、语音/图片跨端同步说明

  • 路径以 distributed://deviceId/xxx 拼接形式传输
  • 接收端可直接使用系统支持的 distributed URI 加载
  • 文件无需手动上传,HarmonyOS 会自动通过分布式 FS 拉取

✅ 八、小结

功能模块实现说明
多媒体消息结构化设计统一使用 type + content 字段支持文本/图片/音频
语音消息录制与发送使用 mediarecorder 采集音频,路径同步 KVStore
图片选择与分发图片压缩+路径同步,接收端使用分布式路径加载
TV 大屏展示优化自适应分辨率与播放体验,语音/图片格式兼容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值