
近几年移动端知识付费App,越来越多越来越火爆。例如:网易公开课、网易云课堂、樊登读书、逻辑思维、i春秋,甚至于知乎App都上架付费课程了。
移动端付费课程,基本是以视频+音频形式呈现给大家的。那么对于这些付费课程:如何在保证用户体验的前提下,防止媒体资源被盗播,维护内容生产者的利益,就成为一个急需解决的问题。
如今市面上,移动端加密、防盗播的方式很多。这里只是讨论一种:我认为的用户体验较好,技术实现成熟,又有效防盗播的方式。
注意:防止盗播,并不能100%杜绝盗播。只能不断增加App的破解成本,完全无法破解的App是不存在的。所以,想100%防止盗播也是不可能实现的。
对于m3u8媒体资源,无论是视正规买球的网站频切片加密、ts视频片段解密播放在技术实现上已经非常成熟,不存在技术壁垒,实现已经不是问题。
那么摆在移动端最主要的问题就是:防止媒体资源被盗播,维护内容生产者的利益
注:虽然技术实现已经不是问题,但这里还是会把移动端技术实现的细节和防破解(防盗播)的实现细节进行呈现。
首先通过课程ID 101向服务端发起请求,获取该课程的内容列表。请求方式和返回结果如下:
注:这里服务器要做一个用户权限的校验:未购买用户不返回其 mediaUrl 和 encryptId
正是预防移动端被不良用心的人员,恶意采用Http抓包进行破解。是防止媒体资源被盗播,维护内容生产者的利益的 第一步,也是很重要的一步。 因为:
注:未购买用户,请求某课程列表接口时,不要返回媒体资源的m3u8播放地址和获取媒体资源playKey的encryptId。这很重要
为防止移动端App被Http抓包,mediaUrl与encryptId都不是明文传输的。因此移动端拿到课程的内容列表后,首先需要对mediaUrl与encryptId进行解密。
在第1步中,已成功获取到媒体资源的播放地址与encryptId。为了播放媒体资源,下面来获取到加密m3u8视频的解密playKey
注:playKey是加密m3u8解密的关键,是防止媒体资源被破解的重中之重。
接口时,服务端需对该用户的购买状态进行验证,未购用户不返回其对应的playKey;
3、移动端获取到playKey后,在SO(C层代码达成的)中对playKey进行解密;
4、解密后的playKey存在一定的过期时间;或者使用次数限制(建议服务端限定只能使用一次)
经过以上步骤,购买用户成功获取到播放地址 和解密key I_am_playkey_001。
OK. 这次是线、移动端加固如果仅仅做到上一步就结束了,移动端被破解的概率还是很高。因为SO任然可以被反编译破解,而且SO的反编译技术也已经相当成熟。
因此,以上步骤都完成后,我们仍然要对我们最终生成的APP进行一次加密。Android端推荐采用APP加固处理。
5、SO动态下发,定期更新加密算法以上步骤都做完,如果APP仍然被破解了。我们可以再加一层防破解处理:
这三个关键步骤缺一不可,缺少任何一个移动端的破解难度和成本都将大大降低。
可以极大的降低付费课程被大面积破解的情况出现。因为购买课程亦需要成本。破解的课程越多,那需要购买的课程就越多,破解成本也就越高。
如果以上步骤都做了,付费音视频被盗播的可能性应该不大;但仍然存在Http抓包的可能性: