X-Git-Url: https://git.ao2.it/smooth-dl.git/blobdiff_plain/3b8a5827480b918de8ec9a0cac4e615c9d9de6c5..HEAD:/smooth-dl.py diff --git a/smooth-dl.py b/smooth-dl.py index 2baa009..d983a28 100755 --- a/smooth-dl.py +++ b/smooth-dl.py @@ -1,8 +1,8 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # smooth-dl - download videos served using Smooth Streaming technology # -# Copyright (C) 2010 Antonio Ospite +# Copyright (C) 2010-2016 Antonio Ospite # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,18 +30,21 @@ # basically, write a proper implementation of manifest parsing and chunk # downloading - -__description = "Download videos served using Smooth Streaming technology" -__version = "0.x" -__author_info = "Written by Antonio Ospite http://ao2.it" - import os +import re import sys import xml.etree.ElementTree as etree -import urllib2 +import urllib.request +import urllib.error +import urllib.parse import struct import tempfile from optparse import OptionParser +from urllib.parse import urlparse, urlunparse + +__description__ = "Download videos served using Smooth Streaming technology" +__version__ = "0.x" +__author_info__ = "Written by Antonio Ospite http://ao2.it" def get_chunk_data(data): @@ -52,20 +55,16 @@ def get_chunk_data(data): data_start = moof_size + 4 + len('mdat') data_size = mdat_size - 4 - len('mdat') - #print len(data[data_start:]), \ + # print len(data[data_start:]), \ # len(data[data_start:data_start + data_size]), data_size - assert(len(data[data_start:]) == data_size) + assert len(data[data_start:]) == data_size return data[data_start:data_start + data_size] def hexstring_to_bytes(hex_string): - res = "" - for i in range(0, len(hex_string), 2): - res += chr(int(hex_string[i:i + 2], 16)) - - return res + return bytearray.fromhex(hex_string) def write_wav_header(out_file, fmt, codec_private_data, data_len): @@ -76,9 +75,9 @@ def write_wav_header(out_file, fmt, codec_private_data, data_len): fmt_len = 18 + fmt['cbSize'] wave_len = len("WAVEfmt ") + 4 + fmt_len + len('data') + 4 - out_file.write("RIFF") + out_file.write(bytes("RIFF", "ascii")) out_file.write(struct.pack('