Fix f4m downloading on Python 2.6
This commit is contained in:
parent
6a7a389679
commit
b53466e168
3 changed files with 28 additions and 5 deletions
|
@ -25,6 +25,7 @@ from youtube_dl.utils import (
|
||||||
shell_quote,
|
shell_quote,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
str_to_int,
|
str_to_int,
|
||||||
|
struct_unpack,
|
||||||
timeconvert,
|
timeconvert,
|
||||||
unescapeHTML,
|
unescapeHTML,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
|
@ -237,5 +238,8 @@ class TestUtil(unittest.TestCase):
|
||||||
testPL(5, 2, (2, 99), [2, 3, 4])
|
testPL(5, 2, (2, 99), [2, 3, 4])
|
||||||
testPL(5, 2, (20, 99), [])
|
testPL(5, 2, (20, 99), [])
|
||||||
|
|
||||||
|
def test_struct_unpack(self):
|
||||||
|
self.assertEqual(struct_unpack(u'!B', b'\x00'), (0,))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -4,13 +4,14 @@ import base64
|
||||||
import io
|
import io
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
from struct import unpack, pack
|
|
||||||
import time
|
import time
|
||||||
import xml.etree.ElementTree as etree
|
import xml.etree.ElementTree as etree
|
||||||
|
|
||||||
from .common import FileDownloader
|
from .common import FileDownloader
|
||||||
from .http import HttpFD
|
from .http import HttpFD
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
struct_pack,
|
||||||
|
struct_unpack,
|
||||||
compat_urllib_request,
|
compat_urllib_request,
|
||||||
compat_urlparse,
|
compat_urlparse,
|
||||||
format_bytes,
|
format_bytes,
|
||||||
|
@ -27,13 +28,13 @@ class FlvReader(io.BytesIO):
|
||||||
|
|
||||||
# Utility functions for reading numbers and strings
|
# Utility functions for reading numbers and strings
|
||||||
def read_unsigned_long_long(self):
|
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):
|
def read_string(self):
|
||||||
res = b''
|
res = b''
|
||||||
|
@ -196,7 +197,7 @@ def write_flv_header(stream, metadata):
|
||||||
# Script data
|
# Script data
|
||||||
stream.write(b'\x12')
|
stream.write(b'\x12')
|
||||||
# Size of the metadata with 3 bytes
|
# 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(b'\x00\x00\x00\x00\x00\x00\x00')
|
||||||
stream.write(metadata)
|
stream.write(metadata)
|
||||||
# Magic numbers extracted from the output files produced by AdobeHDS.php
|
# Magic numbers extracted from the output files produced by AdobeHDS.php
|
||||||
|
|
|
@ -17,6 +17,7 @@ import platform
|
||||||
import re
|
import re
|
||||||
import ssl
|
import ssl
|
||||||
import socket
|
import socket
|
||||||
|
import struct
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -1220,3 +1221,20 @@ def uppercase_escape(s):
|
||||||
return re.sub(
|
return re.sub(
|
||||||
r'\\U([0-9a-fA-F]{8})',
|
r'\\U([0-9a-fA-F]{8})',
|
||||||
lambda m: compat_chr(int(m.group(1), base=16)), s)
|
lambda m: compat_chr(int(m.group(1), base=16)), s)
|
||||||
|
|
||||||
|
try:
|
||||||
|
struct.pack(u'!I', 0)
|
||||||
|
except TypeError:
|
||||||
|
# In Python 2.6 (and some 2.7 versions), struct requires a bytes argument
|
||||||
|
def struct_pack(spec, *args):
|
||||||
|
if isinstance(spec, compat_str):
|
||||||
|
spec = spec.encode('ascii')
|
||||||
|
return struct.pack(spec, *args)
|
||||||
|
|
||||||
|
def struct_unpack(spec, *args):
|
||||||
|
if isinstance(spec, compat_str):
|
||||||
|
spec = spec.encode('ascii')
|
||||||
|
return struct.unpack(spec, *args)
|
||||||
|
else:
|
||||||
|
struct_pack = struct.pack
|
||||||
|
struct_unpack = struct.unpack
|
||||||
|
|
Loading…
Reference in a new issue