-
-
Save flavioribeiro/9b52c603c70cdb34c6910c1c5c4d240d to your computer and use it in GitHub Desktop.
import datetime | |
import os | |
from concurrent.futures import ThreadPoolExecutor | |
from requests import get | |
import m3u8 | |
from threefive import decode | |
import time | |
PLAYLIST = "" | |
downloader = ThreadPoolExecutor(max_workers=10) | |
def download(uri, output_dir): | |
date = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") | |
file_path = os.path.join(output_dir, date + "_" + uri.split('/')[-1]) | |
with open(file_path, "wb") as f: | |
response = get(uri) | |
f.write(response.content) | |
print("decoding ", file_path) | |
decode(file_path) | |
if __name__ == "__main__": | |
while True: | |
master_manifest = m3u8.load(PLAYLIST) | |
for manifest in master_manifest.playlists: | |
rendition_manifest = m3u8.load(manifest.absolute_uri) | |
for segment in rendition_manifest.segments: | |
downloader.submit(download, segment.absolute_uri, "/tmp/") | |
time.sleep(6) |
nice stuff @futzu, the Stanza
class would be simplified by a lot if the m3u8
lib was used for the parsing
Hey man you doing well?
That was my original plan, it would have been a lot easier and cleaner to use the m3u8 lib.
I submitted SCTE-35 patch a few months ago for m3u8 and I never got any reply.
This particular feed uses #EXT-X-SCTE35:CUE, which I dont think is supported by m3u8.
I thought you might want to try pyaes.
since m3u8 already has all the aes info parsed.
here is the bare bones version
import pyaes
with open('the_key_file','rb') as quay:
key = (quay.read())
iv= bytes.fromhex('5245E5D4EACB1B5C522064043A299565')
mode = pyaes.AESModeOfOperationCBC(key,iv=iv)
with open('segment.ts','rb') as infile:
with open('decoded_segment.ts','wb') as outfile:
pyaes.decrypt_stream(mode,infile,outfile)```
I did use m3u8 in this example/.
https://github.com/futzu/threefive/blob/master/examples/hls/threefive-m3u8.py
where is the PR you submitted? I can try and get people to look at it
did you open the pull request or only opened an issue?
I only did the issue. .I know my issue and how to solve it, but I just don't know the m3u8 code well enough.
Ill do a pull request, give me a minute,
hey man. m3u8 needs a little love. I forked it. If you want, I'll add you the repo. Let's collaborate.
hey @futzu, m3u8 is actually pretty active, with a lot of people using it.. I think we can suggest things there and implement some PRs. What do you think? Also, if you want a more dynamic conversation, join http://video-dev.org, I'll be there!
Check this out. AES segment decode with pyaes.
https://github.com/futzu/threefive/blob/master/examples/hls/hasp.py