projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[youtube] Fix playlist extraction (Closes #2423, #2424, #2425)
[youtube-dl]
/
youtube_dl
/
downloader
/
f4m.py
diff --git
a/youtube_dl/downloader/f4m.py
b/youtube_dl/downloader/f4m.py
index 9a6c03556a64ae5b052354e8973d7bc01546b392..2a870a758fa32dd475eaf725f69dedbf3c45903b 100644
(file)
--- a/
youtube_dl/downloader/f4m.py
+++ b/
youtube_dl/downloader/f4m.py
@@
-4,13
+4,14
@@
import base64
import io
import itertools
import os
import io
import itertools
import os
-from struct import unpack, pack
import time
import xml.etree.ElementTree as etree
from .common import FileDownloader
from .http import HttpFD
from ..utils import (
import time
import xml.etree.ElementTree as etree
from .common import FileDownloader
from .http import HttpFD
from ..utils import (
+ struct_pack,
+ struct_unpack,
compat_urllib_request,
compat_urlparse,
format_bytes,
compat_urllib_request,
compat_urlparse,
format_bytes,
@@
-27,13
+28,13
@@
class FlvReader(io.BytesIO):
# Utility functions for reading numbers and strings
def read_unsigned_long_long(self):
# Utility functions for reading numbers and strings
def read_unsigned_long_long(self):
- return unpack('!Q', self.read(8))[0]
+ return
struct_
unpack('!Q', self.read(8))[0]
def read_unsigned_int(self):
def read_unsigned_int(self):
- return unpack('!I', self.read(4))[0]
+ return
struct_
unpack('!I', self.read(4))[0]
def read_unsigned_char(self):
def read_unsigned_char(self):
- return unpack('!B', self.read(1))[0]
+ return
struct_
unpack('!B', self.read(1))[0]
def read_string(self):
res = b''
def read_string(self):
res = b''
@@
-196,7
+197,7
@@
def write_flv_header(stream, metadata):
# Script data
stream.write(b'\x12')
# Size of the metadata with 3 bytes
# Script data
stream.write(b'\x12')
# Size of the metadata with 3 bytes
- stream.write(pack('!L', len(metadata))[1:])
+ stream.write(
struct_
pack('!L', len(metadata))[1:])
stream.write(b'\x00\x00\x00\x00\x00\x00\x00')
stream.write(metadata)
# Magic numbers extracted from the output files produced by AdobeHDS.php
stream.write(b'\x00\x00\x00\x00\x00\x00\x00')
stream.write(metadata)
# Magic numbers extracted from the output files produced by AdobeHDS.php
@@
-223,7
+224,13
@@
class F4mFD(FileDownloader):
self.to_screen('[download] Downloading f4m manifest')
manifest = self.ydl.urlopen(man_url).read()
self.report_destination(filename)
self.to_screen('[download] Downloading f4m manifest')
manifest = self.ydl.urlopen(man_url).read()
self.report_destination(filename)
- http_dl = HttpQuietDownloader(self.ydl, {'continuedl': True, 'quiet': True, 'noprogress': True})
+ http_dl = HttpQuietDownloader(self.ydl,
+ {
+ 'continuedl': True,
+ 'quiet': True,
+ 'noprogress': True,
+ 'test': self.params.get('test', False),
+ })
doc = etree.fromstring(manifest)
formats = [(int(f.attrib.get('bitrate', -1)), f) for f in doc.findall(_add_ns('media'))]
doc = etree.fromstring(manifest)
formats = [(int(f.attrib.get('bitrate', -1)), f) for f in doc.findall(_add_ns('media'))]
@@
-234,6
+241,9
@@
class F4mFD(FileDownloader):
metadata = base64.b64decode(media.find(_add_ns('metadata')).text)
boot_info = read_bootstrap_info(bootstrap)
fragments_list = build_fragments_list(boot_info)
metadata = base64.b64decode(media.find(_add_ns('metadata')).text)
boot_info = read_bootstrap_info(bootstrap)
fragments_list = build_fragments_list(boot_info)
+ if self.params.get('test', False):
+ # We only download the first fragment
+ fragments_list = fragments_list[:1]
total_frags = len(fragments_list)
tmpfilename = self.temp_name(filename)
total_frags = len(fragments_list)
tmpfilename = self.temp_name(filename)