- 拿到
m3u8配置文件
- 根据文件 请求
ts文件流数据,拿到本地保存
- 请求完后合并
ts视频文件为mp4格式
import glob
import logging
import os
from concurrent.futures import ThreadPoolExecutor
import m3u8
import requests
logging.getLogger("urllib3").setLevel(logging.WARNING)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
def get_ts(url):
try:
response = requests.get(url, verify=False)
response.raise_for_status()
response.encoding = 'utf-8'
return response.content
except Exception as err:
print(err)
return b''
def save_ts(url, index):
filename = os.path.join('./files', str(index).zfill(5) + '.ts')
with open(filename, 'wb') as f:
ts = get_ts(f'https://xxx/{url}')
f.write(ts)
print(filename + ' is ok!')
if __name__ == '__main__':
playlist = m3u8.load(uri='./index.m3u8')
with ThreadPoolExecutor(max_workers=10) as pool:
for index, seg in enumerate(playlist.segments):
pool.submit(save_ts, seg.uri, index)
files = glob.glob(os.path.join('./files', '*.ts'))
for file in files:
with open(file, 'rb') as fr, open('./result.mp4', 'ab') as fw:
content = fr.read()
fw.write(content)
print(file + ' is ok!')