H5页面实现一个Audio标签加载多个音频文件,并进行播放和展示音频长度
最近微信项目中有需求,要将微信端发送过来的amr格式的语音文件,在项目中的页面上进行展示和播放,实现方式如下:
1.首先java后台收到微信端的消息推送的时候,使用 ffmpeg将amr格式的音频文件,转码为MP3
格式的音频文件进行存储,然后使用httpd进行文件映射,将访问路径再传到后台,存储数据库,并通过websocket通知页面;
2.页面读取数据库中存储的消息信息,进行遍历展示
2.1 首先页面中定义个全局唯一的一个audio标签,进行音频文件的播放,定义一个可以防止页面上存在多个播放器的时候都进行播放,会造成声音混乱的情况,而且还有资源浪费等问题
2.2 然后页面上使用js 画出和微信上一样的页面格式【小喇叭,未读红点】
2.3 将后台到页面上的音频url进行加载,并获取到音频的长度,在页面中展示出来,代码如下:
function showVoiceLength(msglogid,voiceurl){ //arg1:消息的id,are2:音频的url
var voicePath = window.parent.getDisPlayUrl(voiceurl);
3
var voice = $('#voice')[0]; //获取页面的audio标签
voice.src = voicePath; //设置audio的播放路径
voice.preload="metadata"; //设置页面加载音频的时候先加载元数据(时长、尺寸(仅视频)以及文本轨道。)
voice.load(); //音频加载
//这里的监听事件,表示音频开始加载的时候触发
voice.addEventListener("loadstart", function() {
var audio = new Audio(); //重新创建一个新的audio对象,为了下面获取长度的时候避免每次都获取同一个audio的长度
audio.src = voicePath; //重新设置新的audio对象的音频url
audio.preload="metadata"; //设置新的audio对象加载音频元数据
audio.load(); //新的audio对象开始加载
//新的audio对象元数据加载成功之后的回调 audio.duration 获取音频的时长,需要音频元数据加载完成之后才会有,否则就是NaN
audio.onloadedmetadata=function(){
console.log("src="+audio.currentSrc+"|||||||||||||||"+msglogid+"<><><><><><><><><><><><><>"+audio.duration);
//这里获取到不同的消息对应的时长之后就可以将时长渲染到页面咯
}
});
}
3.页面上的喇叭图片,音频时长,等展示完毕之后就是用户点击的时候进行播放了,调用的方式都和上面的差不多,不过是将load方法换成play()就可以播放了
附上audio标签的一些属性和API查询页面:
http://www.runoob.com/tags/ref-av-dom.html
H5页面实现一个Audio标签加载多个音频文件,并进行播放和展示音频长度的更多相关文章
- 【转载】H5页面列表的无线滚动加载(前端分页)
本代码基于Vue的架构 1.首先,要滚动的内容放在一个‘id=box’ 的div里,对div进行scroll事件的监听 <div id="box" class="m ...
- 一个页面从输入URL到加载显示完成,发生了什么?
面试经典题--URL加载 一.涉及基本知识点: 1. 计算机网络 五层因特尔协议栈: 应用层(dns.http):DNS解析成IP并完成http请求发送: 传输层(tcp.udp):三次握手四次挥手模 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载
为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...
- script标签加载顺序(defer & async)
script 拥有的属性 async:可选,表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效. charset:可选.表示通过 src 属性指 ...
- 移动设备的HTML页面中图片实现滚动加载
如今移动互联网风靡全球,移动页面的元素也是丰富多彩,一个移动页面的图片超过10张已经是再正常不过的事情了.但是相对,很多移动用户还停留在2G,3G这样的网络中.那么这样带宽的用户,在浏览这样的页面时, ...
- EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载 - 副本
为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...
- [jQuery插件]手写一个图片懒加载实现
教你做图片懒加载插件 那一年 那一年,我还年轻 刚接手一个ASP.NET MVC 的 web 项目, (C#/jQuery/Bootstrap) 并没有做 web 的经验,没有预留学习时间, (作为项 ...
- RequireJS 是一个JavaScript模块加载器
RequireJS 是一个JavaScript模块加载器.它非常适合在浏览器中使用, 它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino and Node. 使用RequireJ ...
- 一个link加载多个css文件
细看正则时匹配慕课网链接时发现的,一个link加载多个css文件 http://static.mukewang.com/static/css/??base.css,common/common-less ...
随机推荐
- Java NIO之缓冲区Buffer
Java NIO的核心部件: Buffer Channel Selector Buffer 是一个数组,但具有内部状态.如下4个索引: capacity:总容量 position:下一个要读取/写入的 ...
- 串 & 容斥原理
题意: 给出n (n<=50000) 个长度为4的字符串,问有且仅有d(1<=d<=4)处不相同的字符串有几对. SOL: 一直对着4发呆,这么小的字符串背后有什么玄学呢= =... ...
- Android -- 闹钟服务的使用(启动与停止)
1. 效果图
- codeforces 349B Color the Fence 贪心,思维
1.codeforces 349B Color the Fence 2.链接:http://codeforces.com/problemset/problem/349/B 3.总结: 刷栅栏.1 ...
- Linux 获取设备树源文件(DTS)里描述的资源
Linux 获取设备树源文件(DTS)里的资源 韩大卫@吉林师范大学 在linux使用platform_driver_register() 注册 platform_driver 时, 需要在 plat ...
- FLEX监视浏览器关闭事件
在最近开发的一个FLEX项目中对于浏览器关闭时,需要做一些清理工作,该清理工作在正常情况下保证能运行就行了,要求不是太高. 因此在网上找了一些方法,经过实际测试确实可行,记录下来备查. 该方法可以完全 ...
- 六、雪花《苹果iOS实例编程入门教程》
该app为应用的功能为制作一场雪景 现版本 SDK 8.4 Xcode 纲要:- UIImageView 的运用- onTimer 代码运用- onAnimation 代码运用 运行Xcode 选择 ...
- iis中MIME类型的介绍与使用
今天在服务器上碰到由.mp3格式转化生成的.m4r格式不能被浏览器访问(MP3与m4r在同个域名目录下eg:www.abc.com/1.m4r) 解决办法: 1.选中文件所在的站点: 2.找到MIME ...
- [CareerCup] 15.1 Renting Apartment 租房
Write a SQL query to get a list of tenants who are renting more than one apartment. -- TABLE Apartme ...
- ajax异步验证用户名密码,提示路径错误
使用thinkphp框架异步验证用户名和密码的时候,ajax路径错误可能有多重情况.我遇到的是,我自感路径没问题,且先前使用无错.由于多人合作使用svn,所以在更新代码后,使用firebug显示一直是 ...