forked from DRMTalks/devine
Apply threading lock to HLS DRM preparation
Without this, if two threads started at the same time there was a very good chance they would run the code and license twice, which is unnecessary.
This commit is contained in:
parent
0bceb772c2
commit
f8166f098c
|
@ -11,7 +11,7 @@ from functools import partial
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
from threading import Event
|
from threading import Event, Lock
|
||||||
from typing import Any, Callable, Optional, Union
|
from typing import Any, Callable, Optional, Union
|
||||||
|
|
||||||
import m3u8
|
import m3u8
|
||||||
|
@ -214,6 +214,8 @@ class HLS:
|
||||||
log.error("Track's HLS playlist has no segments, expecting an invariant M3U8 playlist.")
|
log.error("Track's HLS playlist has no segments, expecting an invariant M3U8 playlist.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
drm_lock = Lock()
|
||||||
|
|
||||||
def download_segment(filename: str, segment: m3u8.Segment, init_data: Queue, segment_key: Queue) -> int:
|
def download_segment(filename: str, segment: m3u8.Segment, init_data: Queue, segment_key: Queue) -> int:
|
||||||
if stop_event.is_set():
|
if stop_event.is_set():
|
||||||
# the track already started downloading, but another failed or was stopped
|
# the track already started downloading, but another failed or was stopped
|
||||||
|
@ -221,6 +223,7 @@ class HLS:
|
||||||
|
|
||||||
segment_save_path = (save_dir / filename).with_suffix(".mp4")
|
segment_save_path = (save_dir / filename).with_suffix(".mp4")
|
||||||
|
|
||||||
|
with drm_lock:
|
||||||
newest_segment_key = segment_key.get()
|
newest_segment_key = segment_key.get()
|
||||||
try:
|
try:
|
||||||
if segment.key and newest_segment_key[1] != segment.key:
|
if segment.key and newest_segment_key[1] != segment.key:
|
||||||
|
|
Loading…
Reference in New Issue