之前移动Web访问得到的哔哩哔哩链接视频清晰度不是很好,这个需要改进。
本文记录做过的思考与尝试。
思路
还是回到PC端,看看有什么办法可想。
前面的问题是m4s文件不知道怎么处理,能不能换种格式,比如.flv。因为B站有两种在线播放方式,一种h5播放器,一种flash播放器。
切换播放器后,在查看一下,果然有:
重试一下,看看能不能下载(右键,Open in New Tab),发现可以:
那么记录此时的请求头部Headers,然后在网页源代码里找找,看看有木有链接,恰好又找到了:
那么,此时只待具体实现了!!!
实现步骤整理
目前已经知道了实现思路可行,现在整理下如何实现,假设av号已知:
- 人工访问
https://www.bilibili.com/video/av52738/
,记录headers1的构成格式 - 人工筛选链接关键词
.flv
,从后台筛选出我们需要的链接,记录headers2的构成格式 - 模拟访问页面
https://www.bilibili.com/video/av52738/
,提取出FLV下载链接(仿headers1) - 根据提取的FLV下载链接,下载FLV视频(仿headers2)
关键代码
关键是头部需要告诉服务器,我使用Flash播放器,从PC端访问,这个请求是从播放页面打开的。
/**
* 该Header配置用于视频下载
*/
public HashMap<String, String> getBiliWwwHeaders(String avId) {
headerMap.put("X-Requested-With", "ShockwaveFlash/28.0.0.137");
headerMap.put("Referer", "https://www.bilibili.com/video/" + avId);//need addavId
headerMap.put("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0");
return headerMap;
}