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

最近开发音频在移动端播放功能,使用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类型,解决该问题

下面贴出代码

//Android
function loadAudio(src, callback) {
    var audio = new Audio(src);
    audio.onloadedmetadata = callback;
    audio.src = src;
}
loadAudio(url,function(){
    var html = '<audio controls style="width:100%">'+
						'<source src="'+url+'" type="audio/ogg">'+
						'<source src="'+url+'" type="audio/mpeg">'+
					  	'您的浏览器不支持 audio 元素。'+
					'</audio>'; 
    //插入到页面
});

//ios
function iosRunMain(url){
	var xhr = new XMLHttpRequest();
	xhr.open("get", url, true);
	xhr.responseType = "blob";
	xhr.onload = function() {
	    if (this.status == 200) {
	        var blob = this.response
            ,ado = document.createElement("audio");
	        ado.style.width = '100%';
	        ado.onload = function(e) {
	          window.URL.revokeObjectURL(ado.src);
	        };
	        ado.src = window.URL.createObjectURL(blob);
	        ado.controls = 'controls';
       //将节点插入HTML

		}
	}
	xhr.send();
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过以下步骤实现: 1. 在后台接收到pdf二进制文件后,将其保存为byte[]数组。 2. 将byte[]数组转换为InputStream对象。 3. 使用PdfBox库(或其他pdf处理库)将InputStream对象转换为PDF文档对象(PDDocument)。 4. 根据需要,对PDF文档进行修改(例如添加水印、修改内容等)。 5. 将修改后的PDF文档保存到本地文件系统。 下面是一个简单的Java代码示例,演示如何将接收到的pdf二进制文件保存到本地: ```java import org.apache.pdfbox.pdmodel.PDDocument; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class PdfFileHandler { public void savePdf(byte[] pdfBytes, String savePath) throws IOException { // 将byte[]数组转换为InputStream对象 InputStream inputStream = new ByteArrayInputStream(pdfBytes); // 使用PdfBox库将InputStream对象转换为PDDocument对象 PDDocument document = PDDocument.load(inputStream); // 将PDDocument对象保存为本地文件 document.save(new File(savePath)); // 关闭PDDocument对象 document.close(); } public static void main(String[] args) throws IOException { byte[] pdfBytes = // 从请求中获取pdf二进制文件 String savePath = "C:/temp/test.pdf"; // 保存路径 PdfFileHandler handler = new PdfFileHandler(); handler.savePdf(pdfBytes, savePath); } } ``` 请注意,本示例仅演示了最基本的保存操作。在实际使用中,您可能需要根据具体的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值