projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #13669 from bmwiedemann/master
[youtube-dl]
/
youtube_dl
/
downloader
/
ism.py
diff --git
a/youtube_dl/downloader/ism.py
b/youtube_dl/downloader/ism.py
index 93cac5e9845db6f00efdd2053fb63b3f3c35e52b..9b001ecff4f407a94f74b59a8e1505ed27fd9d03 100644
(file)
--- a/
youtube_dl/downloader/ism.py
+++ b/
youtube_dl/downloader/ism.py
@@
-1,6
+1,5
@@
from __future__ import unicode_literals
from __future__ import unicode_literals
-import os
import time
import struct
import binascii
import time
import struct
import binascii
@@
-8,10
+7,6
@@
import io
from .fragment import FragmentFD
from ..compat import compat_urllib_error
from .fragment import FragmentFD
from ..compat import compat_urllib_error
-from ..utils import (
- sanitize_open,
- encodeFilename,
-)
u8 = struct.Struct(b'>B')
u8 = struct.Struct(b'>B')
@@
-103,7
+98,7
@@
def write_piff_header(stream, params):
if is_audio:
smhd_payload = s88.pack(0) # balance
if is_audio:
smhd_payload = s88.pack(0) # balance
- smhd_payload = u16.pack(0) # reserved
+ smhd_payload
+
= u16.pack(0) # reserved
media_header_box = full_box(b'smhd', 0, 0, smhd_payload) # Sound Media Header
else:
vmhd_payload = u16.pack(0) # graphics mode
media_header_box = full_box(b'smhd', 0, 0, smhd_payload) # Sound Media Header
else:
vmhd_payload = u16.pack(0) # graphics mode
@@
-131,7
+126,6
@@
def write_piff_header(stream, params):
if fourcc == 'AACL':
sample_entry_box = box(b'mp4a', sample_entry_payload)
else:
if fourcc == 'AACL':
sample_entry_box = box(b'mp4a', sample_entry_payload)
else:
- sample_entry_payload = sample_entry_payload
sample_entry_payload += u16.pack(0) # pre defined
sample_entry_payload += u16.pack(0) # reserved
sample_entry_payload += u32.pack(0) * 3 # pre defined
sample_entry_payload += u16.pack(0) # pre defined
sample_entry_payload += u16.pack(0) # reserved
sample_entry_payload += u32.pack(0) * 3 # pre defined
@@
-225,47
+219,39
@@
class IsmFD(FragmentFD):
self._prepare_and_start_frag_download(ctx)
self._prepare_and_start_frag_download(ctx)
- segments_filenames = []
-
fragment_retries = self.params.get('fragment_retries', 0)
skip_unavailable_fragments = self.params.get('skip_unavailable_fragments', True)
track_written = False
fragment_retries = self.params.get('fragment_retries', 0)
skip_unavailable_fragments = self.params.get('skip_unavailable_fragments', True)
track_written = False
+ frag_index = 0
for i, segment in enumerate(segments):
for i, segment in enumerate(segments):
- segment_url = segment['url']
- segment_name = 'Frag%d' % i
- target_filename = '%s-%s' % (ctx['tmpfilename'], segment_name)
+ frag_index += 1
+ if frag_index <= ctx['fragment_index']:
+ continue
count = 0
while count <= fragment_retries:
try:
count = 0
while count <= fragment_retries:
try:
- success
= ctx['dl'].download(target_filename, {'url': segment_url}
)
+ success
, frag_content = self._download_fragment(ctx, segment['url'], info_dict
)
if not success:
return False
if not success:
return False
- down, target_sanitized = sanitize_open(target_filename, 'rb')
- down_data = down.read()
if not track_written:
if not track_written:
- tfhd_data = extract_box_data(
down_data
, [b'moof', b'traf', b'tfhd'])
+ tfhd_data = extract_box_data(
frag_content
, [b'moof', b'traf', b'tfhd'])
info_dict['_download_params']['track_id'] = u32.unpack(tfhd_data[4:8])[0]
write_piff_header(ctx['dest_stream'], info_dict['_download_params'])
track_written = True
info_dict['_download_params']['track_id'] = u32.unpack(tfhd_data[4:8])[0]
write_piff_header(ctx['dest_stream'], info_dict['_download_params'])
track_written = True
- ctx['dest_stream'].write(down_data)
- down.close()
- segments_filenames.append(target_sanitized)
+ self._append_fragment(ctx, frag_content)
break
except compat_urllib_error.HTTPError as err:
count += 1
if count <= fragment_retries:
break
except compat_urllib_error.HTTPError as err:
count += 1
if count <= fragment_retries:
- self.report_retry_fragment(err,
segment_name
, count, fragment_retries)
+ self.report_retry_fragment(err,
frag_index
, count, fragment_retries)
if count > fragment_retries:
if skip_unavailable_fragments:
if count > fragment_retries:
if skip_unavailable_fragments:
- self.report_skip_fragment(
segment_name
)
+ self.report_skip_fragment(
frag_index
)
continue
self.report_error('giving up after %s fragment retries' % fragment_retries)
return False
self._finish_frag_download(ctx)
continue
self.report_error('giving up after %s fragment retries' % fragment_retries)
return False
self._finish_frag_download(ctx)
- for segment_file in segments_filenames:
- os.remove(encodeFilename(segment_file))
-
return True
return True