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,
 | 
			
		||||
    smuggle_url,
 | 
			
		||||
    str_to_int,
 | 
			
		||||
    struct_unpack,
 | 
			
		||||
    timeconvert,
 | 
			
		||||
    unescapeHTML,
 | 
			
		||||
    unified_strdate,
 | 
			
		||||
| 
						 | 
				
			
			@ -237,5 +238,8 @@ class TestUtil(unittest.TestCase):
 | 
			
		|||
        testPL(5, 2, (2, 99), [2, 3, 4])
 | 
			
		||||
        testPL(5, 2, (20, 99), [])
 | 
			
		||||
 | 
			
		||||
    def test_struct_unpack(self):
 | 
			
		||||
        self.assertEqual(struct_unpack(u'!B', b'\x00'), (0,))
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    unittest.main()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,13 +4,14 @@ import base64
 | 
			
		|||
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 (
 | 
			
		||||
    struct_pack,
 | 
			
		||||
    struct_unpack,
 | 
			
		||||
    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):
 | 
			
		||||
        return unpack('!Q', self.read(8))[0]
 | 
			
		||||
        return struct_unpack('!Q', self.read(8))[0]
 | 
			
		||||
 | 
			
		||||
    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):
 | 
			
		||||
        return unpack('!B', self.read(1))[0]
 | 
			
		||||
        return struct_unpack('!B', self.read(1))[0]
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ import platform
 | 
			
		|||
import re
 | 
			
		||||
import ssl
 | 
			
		||||
import socket
 | 
			
		||||
import struct
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
import traceback
 | 
			
		||||
| 
						 | 
				
			
			@ -1220,3 +1221,20 @@ def uppercase_escape(s):
 | 
			
		|||
    return re.sub(
 | 
			
		||||
        r'\\U([0-9a-fA-F]{8})',
 | 
			
		||||
        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…
	
	Add table
		Add a link
		
	
		Reference in a new issue