uni-app 集成腾讯即时通信IM音频时长无法正常获取

uni-app 集成腾讯即时通信IM音频时长无法正常获取

信息类别 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 windwo 10
HBuilderX类型 正式
HBuilderX版本号 2.9.8
手机系统 Android
手机系统版本号 Android 10
手机厂商 小米
手机机型 RedMi K30U
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

SDK使用腾讯即时通信IM 的 客户端SDK-> Web & 小程序
录音结束事件 onStop的回调 'e' 为 onstop的回调参数

const message = that.tim.createAudioMessage({  
  to: 到用户,  
  conversationType: 'C2C',  
  payload: {  
    file: e  
  },  
});  
console.log(message)   
let pomise = this.tim.sendMessage(message);  
pomise.then(res => {  
  console.log(res);  
});

上传成功后可直接 console.log(message) 可查看消息体

预期结果:

成功的话 消息体中的payload.second应该为音频的时长并且 音频在腾讯那边上传成功之后返回的second是正确的时长 PS: 我没有试过直接开发微信小程序, 但是腾讯工作人员用微信小程序是可以正常获取的

实际结果:

在没上传之前查看的消息体里面payload.second的值为null, 上传成功之后second的值是一个10位数的值

bug描述:

集成腾讯即时通信IM时发送音频消息timSDK无法获取到音频时长, 正常的应该是second是音频的时长


更多关于uni-app 集成腾讯即时通信IM音频时长无法正常获取的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

遇到了和你这一样的问题,不知你是否已经解决了?

更多关于uni-app 集成腾讯即时通信IM音频时长无法正常获取的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我也遇到了,请问你解决了吗

我也遇到了 而且语音在ios上不能播放

最后自己计算时长,然后上传获取了

自己计算的时长 在渲染的时候怎么展示啊 IM好像不能通过咱们自己传时长来改变IM云服务器的second字段吧,我也只是猜测 望指教

回复 2***@qq.com: AudioMessage里有个cloudCustomData参数,把时长放这里了,收到语音消息,时长使用这个参数

我也遇到了呀 ios不能播放 请问有人解决了吗

十位数我以为是时间戳 转换下来的数字和实际录音的数字是不一样的

在uni-app中集成腾讯IM SDK时,音频时长获取异常通常是由于音频文件处理流程与Web环境存在差异导致的。根据您提供的代码和现象分析,问题可能出现在以下方面:

  1. 音频文件参数传递问题:在uni-app环境中,录音返回的e参数可能不包含完整的音频元数据,导致SDK无法在创建消息时解析出时长信息。

  2. 文件上传时机createAudioMessage阶段尚未完成音频文件解析,时长字段second显示为null是正常现象。但上传成功后返回的10位数值明显不是以秒为单位的音频时长,可能是时间戳或其他标识符。

解决方案

  1. 手动设置音频时长: 在调用createAudioMessage前,通过uni-app的音频API获取时长:
    const audioContext = uni.createInnerAudioContext();
    audioContext.src = e.tempFilePath;
    audioContext.onCanplay(() => {
      const duration = audioContext.duration;
      const message = that.tim.createAudioMessage({
        to: '目标用户',
        conversationType: 'C2C',
        payload: {
          file: e,
          duration: Math.round(duration) // 手动设置时长
        }
      });
      // 发送消息...
    });
回到顶部