钉钉小程序中苹果手机/iphone/IOS端音频无法播放和音频每次播放速度都加快的原因及解决方法
<p><strong>问题:</strong></p><ol>
<li>
<p>钉钉小程序的IOS端无法播放后台接口返回来的音频文件,但是文件在安卓端和模拟器端均可播放;</p>
</li>
<li>
<p>每次点击播放,音频播放速度加快一倍,导致音频无法听清;</p>
</li>
</ol>
<p><strong>原因:</strong></p>
<ol>
<li>
<p>IOS端的dd.getBackgroundAudioManager()接口创建的音频管理器,manager.play()方法只能播放钉钉返回的临时的临时文件路径;</p>
</li>
<li>
<p>没有实例化音频的title和播放速度playbackRate。</p>
</li>
</ol>
<p><strong>解决方法:</strong><br>
第一个问题提交了工单询问客服,客服的回答是这样的:<br>
<img src="https://img2020.cnblogs.com/blog/925370/202008/925370-20200820144421363-1201611562.png" alt="" loading="lazy"></p>
<p>方法是在播放之前,需要先将接口返回的文件下载,然后传入播放接口才能播放。</p>
<p>第二个问题在客服给我回复之前就解决了:</p>
<p>方法是实例化音频的title和播放速度playbackRate,最好也每次播放都重新实例化manager对象(记得手机端测试的时候一定要清除缓存关闭钉钉APP再重新启动!!!!);</p>
<p>附上代码片段:</p>
<pre><code> // 点击播放
onInternalAudioTap() {
dd.downloadFile({ // 走dd下载接口
url: detail.cYyms, // 参数url是从接口返回的音频链接detail.cYyms
success: ({ filePath }) => { // 下载成功后返回音频文件的临时路径filePath
let manager = dd.getBackgroundAudioManager(); 、// 重新实例化manager对象
manager.src = filePath; // 将临时路径的值赋给manager的src
manager.playbackRate = 1; // 指定播放速度为 1
manager.title = ''; // 给每个音频重新赋值title, 防止IOS端重复调用play()使播放速度累加
manager.play(); // 播放
},
fail: (res) => {
dd.showToast({
content: res.errorMessage || res.error,
type: "fail",
duration: 3000
})
}
})
}
</code></pre>
<p><strong>后记</strong></p>
<p>小程序的文档到底能不能写完整一点.......</p>
<p>播放速度playbackRate这个字段完全没有在dd.getBackgroundAudioManager()这个接口的文档里出现过,还是我找微信小程序的文档才找到</p>
<p>而且也没有任何提示说IOS端的语音播放需要下载成临时文件, 麻了</p><br><br>
来源:https://www.cnblogs.com/lzb1234/p/13535094.html
頁:
[1]