如何下载小鹅通视频

远子 â€¢  2021å¹´07月02日

事情是这样的,最新在考驾照,教练让去一个店铺买个视频事先学习一下:

image-20210702104651994

这个店铺叫【知了店铺】,主要卖科目三的实景教学视频,按照城市 + 区域 + 考场的维度,每个考场都有教学视频。

我进到我们考场一看,40块钱。如果下图里的订阅数据准确的话,这几个视频卖了 620 * 40 = 24800 快两万五了~

image-20210702104908126

这么多考场,每个学员 40 块钱,加起来真心不是个小数目:

image-20210702110746361

我买了以后发现一个问题,知了店铺用的小鹅通,而小鹅通是 Saas 服务,所有这些视频一定存储在小鹅通的资源服务器上,只要用户买了视频以后,理论上一定能下载下来。(当然,通过录屏最简单了)

于是,打开 Charles 抓个包试试:

image-20210702105457368

找到了一堆 .ts 后缀的视频文件。这里的 .ts 不是前端的 TypeScript 文件,查了百度百科发现 TS 流是一种视频的片段,我猜测这些教学视频本身是 .mp4 格式的,为了防止视频泄露、或者为了加载速度故意切割成多个 TS 文件。

可以这样理解,一个 .mp4 的文件被切割成多个 .ts 文件,每个 .ts 文件可以单独播放,就像前端领域里把JS 文件拆分成多个 chunk 一样,.mp4 和 .ts 之间一定有一个映射表,用来存储一对多的映射关系,又查了一下,发现这个映射表是一个单独的文件,后缀名是 .m3u8。

.m3u8 文件是普通的文本格式,下边是个例子:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:1.416667,
v.f230.ts?start=0&end=282375&type=mpegts
#EXTINF:2.875000,
v.f230.ts?start=282376&end=675671&type=mpegts
#EXTINF:1.708333,
v.f230.ts?start=675672&end=905595&type=mpegts
#EXTINF:3.208333,
v.f230.ts?start=905596&end=1271255&type=mpegts
#EXTINF:2.000000,
v.f230.ts?start=1271256&end=1441395&type=mpegts
#EXTINF:2.000000,
v.f230.ts?start=1441396&end=1843151&type=mpegts
#EXTINF:2.000000,
v.f230.ts?start=1843152&end=2221031&type=mpegts
#EXTINF:2.000000,
v.f230.ts?start=2221032&end=2519199&type=mpegts
#EXTINF:3.708333,
v.f230.ts?start=2519200&end=3327035&type=mpegts
#EXTINF:5.791667,
v.f230.ts?start=3327036&end=4192587&type=mpegts
#EXTINF:3.375000,
v.f230.ts?start=4192588&end=4612015&type=mpegts
#EXT-X-ENDLIST

在 Charles 里翻了半天没有找到 .m3u8 的文件,肯定是藏在某个地方了,然而代码是混淆过的,很难阅读。

在网上随便翻了翻,发现小鹅通的 .m3u8 文件的 URL 长这个样子:

https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/ba9798785285890803168368379/drm/v.f230.m3u8

来分析一下,域名里 https://1252524126.vod2.myqcloud.com 的 1252524126 推测应该是租户ID,9764a7a5vodtransgzp1252524126 看起来是专辑的ID,ba9798785285890803168368379 应该是视频的ID,也就是说,如果我找到这三个字段的话,理论上可以直接拼凑出 .m3u8 文件的地址。

观察一下 Charles 里的文件,很容易就找到了租户 ID:

image-20210702111715890

专辑的 ID 和视频的 ID 就在 .ts 视频片段的路径里:

image-20210702111515457

拼装一下,很顺利的拿到了 .m3u8 文件的 URL:

https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/8b67bc4c5285890803164572167/drm/v.f230.m3u8

最后想办法把 .m3u8 文件转成 .mp4 文件就可以了,好在开源社区有兄弟开发了客户端M3U8-Downloader,下载下来试试:

image-20210702112227860

挺好用的,打开下载的视频试试:

image-20210702112404594

搞定收工~

附录

奉贤和悦考场视频的 m3u8 文件清单:

# 上海市老桑塔纳模拟灯光教学
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/ba9798785285890803168368379/drm/v.f230.m3u8

# 上海市新桑塔纳模拟灯光教学
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/c0eab01c5285890802616140213/drm/v.f230.m3u8

# 上海市丰田卡罗拉模拟灯光教学
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/b5a2aee45285890803168124234/drm/v.f230.m3u8

# 奉贤和悦考场2号线
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/8901b1f15285890803164464883/drm/v.f230.m3u8

# 奉贤和悦考场3号线
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/8b67bc4c5285890803164572167/drm/v.f230.m3u8

# 奉贤和悦考场4号线
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/8fcd0b575285890803164738687/drm/v.f230.m3u8

# 奉贤和悦考场5号线
https://1252524126.vod2.myqcloud.com/9764a7a5vodtransgzp1252524126/252e7c475285890804750324228/drm/v.f230.m3u8

# 奉贤和悦考场6号线
https://1252524126.vod2.myqcloud.com/2919df88vodtranscq1252524126/5abd1b0e5285890803564434456/drm/v.f230.m3u8

声明:本文章仅供学习交流使用,二次传播、恶意采集与本文无关。

(完)