print
-def download_chunks(base_url, manifest, stream_index, quality_level, dest_dir):
-
- if os.path.exists(dest_dir) == False:
- os.mkdir(dest_dir, 0755)
-
- stream = manifest.findall('.//StreamIndex')[stream_index]
-
+def get_chunk_quality_string(stream, quality_level):
quality = stream.findall("QualityLevel")[quality_level]
bitrate = quality.attrib["Bitrate"]
chunks_quality = url.split('/')[0].replace("{bitrate}", bitrate)
chunks_quality = chunks_quality.replace("{CustomAttributes}", custom_attributes)
+
+ return chunks_quality
+
+
+def get_chunk_name_string(stream, chunk):
+ t = chunk.attrib["t"]
+ url = stream.attrib["Url"]
+ chunk_name = url.split('/')[1].replace("{start time}", t)
+
+ return chunk_name
+
+
+def download_chunks(base_url, manifest, stream_index, quality_level, dest_dir):
+
+ if os.path.exists(dest_dir) == False:
+ os.mkdir(dest_dir, 0755)
+
+ stream = manifest.findall('.//StreamIndex')[stream_index]
+
+ chunks_quality = get_chunk_quality_string(stream, quality_level)
+
chunks_dest_dir = os.path.join(dest_dir, chunks_quality)
if os.path.exists(chunks_dest_dir) == False:
os.mkdir(chunks_dest_dir, 0755)
print "\tChunks %10d/%-10d" % (0, len(chunks)), "\r",
sys.stdout.flush()
for i, c in enumerate(chunks):
- t = c.attrib["t"]
- chunk_name = url.split('/')[1].replace("{start time}", t)
+ chunk_name = get_chunk_name_string(stream, c)
chunk_file = os.path.join(dest_dir, chunks_quality, chunk_name)
if os.path.exists(chunk_file) == False:
stream = manifest.findall('.//StreamIndex')[stream_index]
- quality = stream.findall("QualityLevel")[quality_level]
- bitrate = quality.attrib["Bitrate"]
+ chunks_quality = get_chunk_quality_string(stream, quality_level)
- quality_attributes = quality.findall("CustomAttributes/Attribute")
- custom_attributes = ""
- for i in quality_attributes:
- custom_attributes += "%s=%s," % (i.attrib["Name"], i.attrib["Value"])
- custom_attributes = custom_attributes.rstrip(',')
-
- # Assume URLs are in this form:
- # Url="QualityLevels({bitrate})/Fragments(video={start time})"
- # or
- # Url="QualityLevels({bitrate},{CustomAttributes})/Fragments(video={start time})"
- url = stream.attrib["Url"]
-
- chunks_quality = url.split('/')[0].replace("{bitrate}", bitrate)
- chunks_quality = chunks_quality.replace("{CustomAttributes}", custom_attributes)
chunks_src_dir = os.path.join(src_dir, chunks_quality)
dest_file = open(dest_file_name, "wb")
print "\tChunks %10d/%-10d" % (0, len(chunks)), "\r",
sys.stdout.flush()
for i, c in enumerate(chunks):
- t = c.attrib["t"]
- chunk_name = url.split('/')[1].replace("{start time}", t)
+ chunk_name = get_chunk_name_string(stream, c)
chunk_file = os.path.join(chunks_src_dir, chunk_name)
f = open(chunk_file, "rb")
# Add a nice WAV header
if stream.attrib['Type'] == "audio":
+ quality = stream.findall("QualityLevel")[quality_level]
codec_private_data = quality.attrib['CodecPrivateData']
fmt = {}