Created
October 22, 2018 22:32
-
-
Save w495/4ac4695ea86b0e2902bd01e5573f42ef to your computer and use it in GitHub Desktop.
Micro chunk HLS checker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf8 -*- | |
from __future__ import absolute_import, division, print_function | |
import logging | |
import sys | |
import requests | |
MIN_CHUNK_SIZE = 1.0 | |
logging.basicConfig( | |
level=logging.DEBUG, | |
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' | |
) | |
def main(): | |
fname = sys.argv[1] | |
list_file = open(fname) | |
for raw_line in list_file: | |
line = raw_line[:-1] | |
line_list = line.split('\t') | |
logging.info("line_list = %s", line_list) | |
check_bad_pl( | |
*line_list | |
) | |
def check_bad_pl(uuid, url): | |
""" | |
:param str uuid: | |
:param str url: | |
:return: | |
""" | |
chunk_pl_list = parse_master_pl(url) | |
for chunk_pl in chunk_pl_list: | |
is_bad_chunk = parse_chunk_pl(chunk_pl) | |
if is_bad_chunk: | |
logging.error("bad = %s, %s", uuid, url) | |
print('bad = ', uuid, url) | |
return True | |
return False | |
def parse_master_pl(url): | |
""" | |
:param str url: | |
:return: | |
""" | |
url = url.strip() | |
response = requests.get(url) | |
content = response.content | |
content_list = content.split('\n') | |
url_parts = url.split('/') | |
url_base = '/'.join(url_parts[:-1]) | |
for content_item in content_list: | |
if 'm3u8' in content_item: | |
chunk_pl = '{}/{}'.format(url_base, content_item) | |
yield chunk_pl | |
def parse_chunk_pl(url): | |
""" | |
:param str url: | |
:return: | |
""" | |
url = url.strip() | |
response = requests.get(url) | |
content = response.content | |
content_list = content.split('\n') | |
content_seq = filter_extinf(content_list) | |
content_list = list(content_seq) | |
for content_item in content_list[:-1]: | |
content_item = content_item.replace('#EXTINF:', '') | |
content_item = content_item.replace(',', '') | |
chunk_size = float(content_item) | |
if chunk_size < MIN_CHUNK_SIZE: | |
return True | |
return False | |
def filter_extinf(content_list): | |
""" | |
:param list[str] content_list: | |
:return: | |
""" | |
for content_item in content_list: | |
if '#EXTINF:' in content_item: | |
yield content_item | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment