hs-m3u8 0.1.5__py3-none-any.whl → 0.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
hs_m3u8/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from hs_m3u8.main import M3u8Downloader, M3u8Key
2
2
 
3
- __version__ = "0.1.5"
3
+ __version__ = "0.1.6"
hs_m3u8/main.py CHANGED
@@ -16,6 +16,7 @@ from zipfile import ZipFile
16
16
 
17
17
  import m3u8
18
18
  from hssp import Net
19
+ from hssp.models.net import RequestModel
19
20
  from hssp.utils import crypto
20
21
  from loguru import logger
21
22
 
@@ -80,6 +81,9 @@ class M3u8Downloader:
80
81
  headers=None,
81
82
  key: M3u8Key = None,
82
83
  get_m3u8_func: Callable = None,
84
+ m3u8_request_before: Callable[[RequestModel], RequestModel] = None,
85
+ key_request_before: Callable[[RequestModel], RequestModel] = None,
86
+ ts_request_before: Callable[[RequestModel], RequestModel] = None,
83
87
  ):
84
88
  """
85
89
 
@@ -91,11 +95,29 @@ class M3u8Downloader:
91
95
  headers: 情求头
92
96
  get_m3u8_func: 处理m3u8情求的回调函数。适用于m3u8地址不是真正的地址,
93
97
  而是包含m3u8内容的情求,会把m3u8_url的响应传递给get_m3u8_func,要求返回真正的m3u8内容
98
+ m3u8_request_before: m3u8请求前的回调函数
99
+ key_request_before: key请求前的回调函数
100
+ ts_request_before: ts 请求前的回调函数
94
101
  """
95
102
 
96
103
  sem = asyncio.Semaphore(max_workers) if max_workers else None
97
104
  self.headers = headers
98
- self.net = Net(sem=sem)
105
+
106
+ # m3u8 内容的请求器
107
+ self.m3u8_net = Net(sem=sem)
108
+ if m3u8_request_before:
109
+ self.m3u8_net.request_before_signal.connect(m3u8_request_before)
110
+
111
+ # 加密key的请求器
112
+ self.key_net = Net()
113
+ if key_request_before:
114
+ self.key_net.request_before_signal.connect(key_request_before)
115
+
116
+ # ts内容的请求器
117
+ self.ts_net = Net()
118
+ if ts_request_before:
119
+ self.ts_net.request_before_signal.connect(ts_request_before)
120
+
99
121
  self.decrypt = decrypt
100
122
  self.m3u8_url = urlparse(m3u8_url)
101
123
  self.get_m3u8_func = get_m3u8_func
@@ -112,7 +134,9 @@ class M3u8Downloader:
112
134
 
113
135
  async def run(self, merge=True, del_hls=False):
114
136
  await self.start(merge, del_hls)
115
- await self.net.close()
137
+ await self.m3u8_net.close()
138
+ await self.key_net.close()
139
+ await self.ts_net.close()
116
140
 
117
141
  async def start(self, merge=True, del_hls=False):
118
142
  """
@@ -182,7 +206,7 @@ class M3u8Downloader:
182
206
  :param url:
183
207
  :return:
184
208
  """
185
- resp = await self.net.get(url.geturl(), headers=self.headers)
209
+ resp = await self.m3u8_net.get(url.geturl(), headers=self.headers)
186
210
  m3u8_text = self.get_m3u8_func(resp.text) if self.get_m3u8_func else resp.text
187
211
  m3u8_obj = m3u8.loads(m3u8_text)
188
212
  prefix = f"{url.scheme}://{url.netloc}"
@@ -220,7 +244,7 @@ class M3u8Downloader:
220
244
  if len(m3u8_obj.keys) > 0 and m3u8_obj.keys[0]:
221
245
  iv = m3u8_obj.keys[0].iv
222
246
  if not self.custom_key:
223
- resp = await self.net.get(m3u8_obj.keys[0].absolute_uri, headers=self.headers)
247
+ resp = await self.key_net.get(m3u8_obj.keys[0].absolute_uri, headers=self.headers)
224
248
  key_data = resp.content
225
249
  else:
226
250
  key_data = self.custom_key.key
@@ -252,7 +276,7 @@ class M3u8Downloader:
252
276
  if Path(ts_path).exists():
253
277
  self.ts_path_list[index] = str(ts_path)
254
278
  return
255
- resp = await self.net.get(ts_item["uri"], self.headers)
279
+ resp = await self.ts_net.get(ts_item["uri"], self.headers)
256
280
  ts_content = resp.content
257
281
  if ts_content is None:
258
282
  return
@@ -282,10 +306,10 @@ class M3u8Downloader:
282
306
  # mp4路径
283
307
  mp4_path = self.save_dir.parent / f"{self.save_name}.mp4"
284
308
 
285
- # 如果保护mp4的头,则把ts放到后面
309
+ # 如果有mp4的头,则把ts放到后面
286
310
  mp4_head_data = b""
287
311
  if self.mp4_head_hrl:
288
- resp = await self.net.get(self.mp4_head_hrl)
312
+ resp = await self.ts_net.get(self.mp4_head_hrl)
289
313
  mp4_head_data = resp.content
290
314
  mp4_head_file = self.save_dir / "head.mp4"
291
315
  mp4_head_file.write_bytes(mp4_head_data)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hs-m3u8
3
- Version: 0.1.5
3
+ Version: 0.1.6
4
4
  Summary: m3u8 下载器
5
5
  Project-URL: homepage, https://github.com/x-haose/hs-m3u8
6
6
  Project-URL: repository, https://github.com/x-haose/hs-m3u8
@@ -0,0 +1,6 @@
1
+ hs_m3u8/__init__.py,sha256=_AhYioHAgwPXE10FXGZ3ZKj1urwFYR0L9xzBn8pQPJw,72
2
+ hs_m3u8/main.py,sha256=dickli-bmyAoNB7N3pmx2UU_VUDGSISU913BB-VwMbk,12620
3
+ hs_m3u8/res/ffmpeg_win.exe.zip,sha256=x_7Fa9N3hzN1d7Ph9ZwOiwpuRfLEVnhNL8tPjuZZMe0,60131319
4
+ hs_m3u8-0.1.6.dist-info/METADATA,sha256=ujcGSSJnM5o_uWCgXDnfmweC0t4iWwqqCaMNvticSzI,2204
5
+ hs_m3u8-0.1.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
6
+ hs_m3u8-0.1.6.dist-info/RECORD,,
@@ -1,6 +0,0 @@
1
- hs_m3u8/__init__.py,sha256=HINaNDvyRMsgqg9VY_AsV9ierd8KhdtNyJRdQ8BcFg8,72
2
- hs_m3u8/main.py,sha256=jZ0650qosfrhiS1r3-UGhjp8shx6TvcElXAEls7f3jQ,11609
3
- hs_m3u8/res/ffmpeg_win.exe.zip,sha256=x_7Fa9N3hzN1d7Ph9ZwOiwpuRfLEVnhNL8tPjuZZMe0,60131319
4
- hs_m3u8-0.1.5.dist-info/METADATA,sha256=3htPtN-CKSxXaS3o9oootUP4RMdS_tQSIyn4vBT0B4I,2204
5
- hs_m3u8-0.1.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
6
- hs_m3u8-0.1.5.dist-info/RECORD,,