stay hungry stay foolish

基于MP3加密音频文件的在线H5播放器的实现

引言:随着知识付费项目的市场份额逐渐扩大,对于音频产品的在线播放需求也在提升,怎么做到既能支持独家音频的web在线播放又能防止音频被盗链、被下载成了音频相关类产品web端的核心技术。

目前,纵观市面上的音频产品的web端鲜有做到对音频加密的地步,为了防止音频被盗用,对于付费内的资源,大多数是引导用于去APP里付费和使用。而很多产品的推广其实是通过微信公众号的形式进行的,如果能够直接在微信H5端进行一些常用的产品流程(加密音频的付费、播放),可增加更好的用户体验。

在web端,传统的Audio对象提供的API功能有限,并不能满足对于高要求的音频播放功能。鉴于此,经过探索和技术调研,我们团队独立研发了可用于线上产品的基于H5的加密音频文件的在线播放器。该技术的核心功能是基于H5的核心API:AudioContext。AudioContext是H5提供的对于音频数据直接进行操作的一套API,通过这一套API可以对音频数据进行修改和解码等操作。因为可以接触到音频数据的底层,因此我们可以在后台对音频数据进行加密,在前端先解密字节流,然后再调用AudioContext去进行解码等操作。

我们已经知道了用AudioContext能够进行解码工作,但是要做到在线播放功能还有很长一段路要走。因为AudioContext不支持自动拉取数据,因此要做到在线播放的功能,只能我们自己去实现数据的拉取,在这里可以使用ajax配合range分段加载音频数据,再配合后台的动态key,对拉取的进行对称解密。

一个完整的播放器应该是能够拖动播放的,这是播放器的核心功能,也是技术的难点,因为不同音频的格式是不一样,要做到定点播放,需要对音频的元数据进行解析,获取音频的总时长,比特率等,利用这些元数据,再根据拖动的百分比就可以计算出应该加载哪一段数据。当然对于不同的音频格式,需要解析的元数据是不一样,目前,我们只是针对MP3文件进行了元数据的解析。

用AudioContext除了可以解码音频数据外,甚至可以更改音频的音色,音调,也就是说你可以用它开发一个在线的音频工作室。更甚至,你可以无中生有,创造声音(前提是你对音调,波形有较好的理解)。基本上你可以想到的对音频的处理,它都可以解决,虽然目前只有移动端和PC端高级浏览器支持AudioContext,但随着低版本浏览器的淘汰,其运用的场景将越来越广,目前很多手机游戏都是用它来实现音效的播放,我们有理由相信,其将成为音视频的主流技术。