王道论坛_PC端播放和下载视频

2021年09月16日 阅读数:1
这篇文章主要向大家介绍王道论坛_PC端播放和下载视频,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

写在最前:互联网并不是法外之地,爬虫仅供技术交流(王道论坛已经在显眼的地方声明课程严禁任何形式的录制、传播和分享,因此下载本身观看就是了,不要用于盈利用途)css

目标python

  • 在PC端播放和下载王道论坛H5应用的视频

本篇文章的主要目的是为了分享PC端播放以及下载王道计算机考研课程的方法,用于你们经过PC端进行学习。主要是遇到一些公众号经过这些扒来的视频课件资源骗关注,我实在看不下去才写了这篇博客,但愿你们不要被赚信息差价。再次提醒,请不要用于盈利用途,想获取课程能够经过购买正版图书兑换。shell

以“秒懂百科”为例介绍一下HLS(M3U8)格式

关于HLS(HTTP Live Streaming)网上的介绍仍是不少的,这里贴一下百度百科设计模式

由于以前看其余的一些博客的时候,不少人会把M3U8解释成一种视频格式。其实M3U8只是个普通的文本文件而已,这种格式准确来讲是HLS。一份标准的HLS视频应该是包含两个部分的,一部分是索引(也就是M3U8文件),一部分是存储视频数据的文件(TS文件)。浏览器

接下来以秒懂百科为例介绍一下HLS的实际表现形式。微信

HLS可能有两级索引或者一级索引。通常来说,视频是有分辨率的区别的,因此在两级索引中,第一级索引经常使用于区分不一样的分辨率,第二级索引经常使用于索引同一分辨率的视频切片。当用户选择分辨率以后,系统根据第一级索引选择该分辨率对应的第二级索引,而后根据第二级索引的视频顺序播放视频。数据结构

1、“秒懂百科”的视频文件

这是“秒懂百科”的部分文件,只有1KB左右大小的是索引文件(这不是区分依据,主要仍是看文件实质内容),超过100KB的是视频切片文件。app

image-20210611165615254

一、一级索引内容

#EXTM3U
#EXT-X-VERSION:3

#EXT-X-STREAM-INF:BANDWIDTH=1716000,RESOLUTION=720x1280
2d3ea97f16ad1d6fb558a51066b39469_720x1280_1716000.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=836000,RESOLUTION=480x852
2d3ea97f16ad1d6fb558a51066b39469_480x852_836000.m3u8

#EXT-X-ENDLIST

二、二级索引内容

  1. 2d3ea97f16ad1d6fb558a51066b39469_720x1280_1716000.m3u8ide

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:13
    #EXTINF:12.500000,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.0.0.ts
    #EXTINF:8.333333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.0.1.ts
    #EXTINF:12.500000,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.0.2.ts
    #EXTINF:8.333333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.0.3.ts
    #EXTINF:8.333333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.0.4.ts
    #EXTINF:1.733333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.0.5.ts
    #EXT-X-ENDLIST
    
  2. 2d3ea97f16ad1d6fb558a51066b39469_480x852_836000.m3u8学习

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:13
    #EXTINF:12.500000,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.0.ts
    #EXTINF:8.333333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.1.ts
    #EXTINF:12.500000,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.2.ts
    #EXTINF:8.333333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.3.ts
    #EXTINF:8.333333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.4.ts
    #EXTINF:1.733333,
    2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.5.ts
    #EXT-X-ENDLIST
    

三、视频切片内容

  1. 2d3ea97f16ad1d6fb558a51066b39469.m3u8.1.0.ts

    TS文件也是一种常见的视频数据文件,能够用video标签进行播放。苹果的QuickTime Player和其余主流播放器也均可以对他进行播放。

2、“秒懂百科”的视频下载及合并

一、视频连接的查找

播放视频,能够在控制台的network观察到相关文件,经过过滤就能够选取m3u8或者m3u文件。

“秒懂百科”——端午节的连接是这样的:https://baikevideo.cdn.bcebos.com/media/mda-OgBFtPA8lgXMtZ6Q/2d3ea97f16ad1d6fb558a51066b39469.m3u8

二、视频下载及合并

  1. python

    import requests, re
    from tqdm import tqdm
    
    baseUrl = "https://baikevideo.cdn.bcebos.com/media/mda-OgBFtPA8lgXMtZ6Q/"
    res = requests.get(baseUrl+"2d3ea97f16ad1d6fb558a51066b39469.m3u8")
    
    # 解析一级索引
    resStr = res.text
    matchRes = re.findall(r"#EXT-X-STREAM-INF:BANDWIDTH=([^,]*),RESOLUTION=([^x]*)x([^\n]*)\n([^\n]*)\n", resStr, re.DOTALL)
    indexRes = []
    for m in matchRes:
        indexRes.append({
            'BANDWIDTH': int(m[0]),
            'HEIGHT': int(m[1]),
            'WIDTH': int(m[2]),
            'FileName': m[3],
        })
    
    for index in indexRes:
        res = requests.get(baseUrl+index['FileName'])
        # print(res.text)
        # 解析二级索引
        resStr = res.text
        matchRes = re.findall(r"#EXTINF:([^,]*),\n([^\n]*)\n", resStr, re.DOTALL)
        videoRes = []
        print("正在下载并合成"+index['FileName'])
        pbar = tqdm(total=len(matchRes), initial=0, unit_scale=True)
        for m in matchRes:
            videoRes.append({
                'TIME': float(m[0]),
                'FileName': m[1],
            })
            res = requests.get(baseUrl+m[1])
            with open(index['FileName']+".ts", "ab") as f:
                f.write(res.content)
            pbar.update(1)
    

    这里并不能经过简单的读写文件进行文件类型转化。由于以前也看到有人的博客写能够经过读写文件将TS合成MP4文件,这实际上是不对的,实际上播放器在播放的时候仍是把合成的文件当成TS文件,那些依靠后缀名来识别文件的播放则没法对合成的文件进行正确解码播放。

    TS文件的压缩编码方法我没有仔细了解过,但MP4文件的压缩效率确定是比TS高的。

  2. ffmpeg

    ffmpeg -i https://baikevideo.cdn.bcebos.com/media/mda-OgBFtPA8lgXMtZ6Q/2d3ea97f16ad1d6fb558a51066b39469_720x1280_1716000.m3u8 2d3ea97f16ad1d6fb558a51066b39469.mp4
    

    使用ffmpeg能够更简洁一些,经过m3u8文件就能够下载。不过转MP4须要花点时间,若是不想转能够把后缀名改为ts。

前面介绍这两种方法实质也是在比较下载视频压缩与否的优劣。

若是要考虑磁盘空间,则能够把下载的视频转码成MP4文件,可是编码须要花费较多的时间;

若是要考虑下载效率,则能够把下载的视频直接合成,就是占用空间大一点。

以《数据结构》为例进行视频下载

而后回到这篇博客的主题,在PC端播放和下载王道的视频。

1、在PC端播放王道的视频

由于王道PC端播放视频会出现播放不了的状况,因此特地开一小节记录这个问题。

一、经过微信的浏览器进行播放

二、经过Safari浏览器进行播放

有时不想在电脑上登录微信,就能够经过这样播放视频。

  1. 输入连接

  2. 扫描二维码登录

  3. 这个时候播放视频会很卡,甚至没法播放,须要切成响应式设计模式,能够正常播放。

2、在PC端下载王道的视频

王道的视频只有一级索引,因此直接拿一级索引的连接就好。

经过控制台能够获得基本的连接是这样的:https://encrypt-k-vod.xet.tech/9764a7a5vodtransgzp1252524126/0eb31fd45285890816204856468/drm/voddrm.token.YWY2YzdiMDAzNjhlZjY5Y04xdVRod0dRa3B4N3FPMnl0NjgwZXVFV1JYSTdlUTZtNmQ0ZzJTUWdXZmFtRGR0NQ.v.f421220.m3u8

另外还在URL参数带上了时间戳的16进制表示和用户标识等信息:t=60c7132f&exper=0&us=XXXX&sign=XXXXXXXX

由于带上了这些信息,字符串中出现了&。咱们须要在撰写shell脚本的时候加上单引号。

ffmpeg -i 'https://encrypt-k-vod.xet.tech/9764a7a5vodtransgzp1252524126/54892dc95285890816205535660/drm/voddrm.token.MzI0ZTRkMGE3ZTNjZDRlMFN0aVpLN2hQTjVocU1HYW5tRno1aHRqQSs2cFNtSnpJanBxdUJuLzQyV2IydjQ2SA.v.f421220.m3u8?t=60c717e5&exper=0&us=XXX&sign=XXXXXX' out.mp4

若是须要批量下载的话,能够分析一下课程主页的list什么的。

最后评价一下王道的课吧。王道课程质量通常,应付考研这样子而已。真的想要好好学习计算机相关知识,看看黑皮书什么的比这种课强多了。固然啦,当成考研复习大纲来看是没什么问题的。