当前位置:   article > 正文

后台语言返回的二进制流音频文件在微信浏览器兼容性问题_html5的audio标签播放二进制文件流

html5的audio标签播放二进制文件流

最近开发音频在移动端播放功能,使用HTML5 audio标签,没有采用微信的jssdk

对于直接指向录音文件的url 直接使用src=url 是没有问题,但是当返回的是二进制流音频文件就会有一系列兼容性问题。

对于Android手机:

直接使用标签<audio controls src="url"></audio> 在一些手机(比如荣耀8 9,vivo21)微信中将不能正常播放,考虑是没有预加载导致。通过js audio.oncanplaythrough属性将音频全部加载到缓存中,以上手机可以正常播放录音,但出现新问题,所以录音都不能完成播放,只能播放十多秒,考虑是不是有限制缓存区大小后,改为audio.onloadedmetadata属性播放是在加载,问题得到解决。

对于iOS手机:

处理Android手机的方法使用在ISO微信浏览器中都不能完美解决问题,后面采用XMLHttpRequestd对象的响应数据的blob类型,解决该问题

下面贴出代码

  1. //Android
  2. function loadAudio(src, callback) {
  3. var audio = new Audio(src);
  4. audio.onloadedmetadata = callback;
  5. audio.src = src;
  6. }
  7. loadAudio(url,function(){
  8. var html = '<audio controls style="width:100%">'+
  9. '<source src="'+url+'" type="audio/ogg">'+
  10. '<source src="'+url+'" type="audio/mpeg">'+
  11. '您的浏览器不支持 audio 元素。'+
  12. '</audio>';
  13. //插入到页面
  14. });
  15. //ios
  16. function iosRunMain(url){
  17. var xhr = new XMLHttpRequest();
  18. xhr.open("get", url, true);
  19. xhr.responseType = "blob";
  20. xhr.onload = function() {
  21. if (this.status == 200) {
  22. var blob = this.response
  23. ,ado = document.createElement("audio");
  24. ado.style.width = '100%';
  25. ado.onload = function(e) {
  26. window.URL.revokeObjectURL(ado.src);
  27. };
  28. ado.src = window.URL.createObjectURL(blob);
  29. ado.controls = 'controls';
  30.        //将节点插入HTML
  31. }
  32. }
  33. xhr.send();
  34. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/500797
推荐阅读
相关标签
  

闽ICP备14008679号