m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成。
相信大家都看过m3u8格式文件的内容,我们直来对比一下有什么不同,然后教大家怎么用python多进程实现下载并且合并。
一、两者不同
- 非加密 的m3u8文件
![a8672579622927e2c3ad42cf9801e177.png](https://i-blog.csdnimg.cn/blog_migrate/3afa6e5f7980f9936fb6423a7df5f4e9.jpeg)
- 加密 的m3u8文件
![6e5fd949dd7c2ebba6fe5e51030bcbc0.png](https://i-blog.csdnimg.cn/blog_migrate/407c7d5fdcf20ffee85c88831e612f7a.jpeg)
- 相信眼尖的小伙伴已经看出了2个内容的不同之处,对的,其实区别就在加密文件的第 5 行的 #EXT-X-KEY 的信息
- 这个信息就是用来视频内容解密的,其实里面的内容大多是一段字符串,其实也就是解密时候的KEY值
- 那么这个怎么去解密呢,我们暂时不管,我们先来解释一下每行的意思
- 第一行: #EXTM3U 声明这是一个m3u8的文件
- 第二行: #EXT-X-VERSION 协议的版本号
- 第三行: #EXT-X-MEDIA-SEQUENCE 每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1
- 第四行: #EXT-X-KEY 记录了加密的方式,一般是AES-128以及加密的KEY信息
- 第五行: #EXTINF 表示这段视频碎片的持续时间有多久
- 第六行: sA3LRa6g.ts 视频片段的名称,获取的时候需要拼接上域名,找到文件的正确的路径
如果想了解更多,请参考我的另一篇文章: m3u8各个字段意义解析
二、爬虫源码
#!/usr/bin/env python
# encoding: utf-8
'''
#-------------------------------------------------------------------
# CONFIDENTIAL --- CUSTOM STUDIOS
#-------------------------------------------------------------------
#
# @Project Name : 多进程M3U8视频下载助手
#
# @File Name : main.py
#
# @Programmer : Felix
#
# @Start Date : 2020/7/30 14:42
#
# @Last Update : 2020/7/30 14:42
#
#-------------------------------------------------------------------
'''
import requests, os, platform, time
from Crypto.Cipher import AES
import multiprocessing
from retrying import retry
class M3u8:
'''
This is a main Class, the file contains all documents.
One document contains paragraphs that have several sentences
It loads the original file and converts the original file to new content
Then the new content will be saved by this class
'''
def __init__(self):
'''
Initial the custom file by self
'''
self.encrypt = False
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0"
}
def hello(self):
'''
This is a welcome speech
:return: self
'''
print("*" * 50)
print(' ' * 15 + 'm3u8链接下载小助手')
print(' ' * 5 + '作者: Felix Date: 2020-05-20