Skip to content

Commit

Permalink
(live mode) bug fix for --name-from-url
Browse files Browse the repository at this point in the history
  • Loading branch information
xhlove committed Mar 6, 2022
1 parent 4cf200f commit 1a700eb
Show file tree
Hide file tree
Showing 7 changed files with 16 additions and 30 deletions.
2 changes: 1 addition & 1 deletion XstreamDL_CLI/daemon.py
Expand Up @@ -119,4 +119,4 @@ def streams_extend(self, streams: List[DASHStream], next_streams: List[DASHStrea
if _stream is None or _next_stream is None:
continue
# 对于新增的分段 认为默认有init分段
_stream.live_segments_extend(_next_stream.segments, has_init=True)
_stream.live_segments_extend(_next_stream.segments, has_init=True, name_from_url=self.args.name_from_url)
2 changes: 1 addition & 1 deletion XstreamDL_CLI/extractors/dash/parser.py
Expand Up @@ -159,7 +159,7 @@ def walk_period(self, mpd: MPD, uri_item: BaseUri):
skey_stream = {} # type: Dict[str, DASHStream]
for stream in streams:
if stream.skey in skey_stream:
skey_stream[stream.skey].update(stream)
skey_stream[stream.skey].update(stream, name_from_url=self.args.name_from_url)
else:
skey_stream[stream.skey] = stream
streams = list(skey_stream.values())
Expand Down
4 changes: 2 additions & 2 deletions XstreamDL_CLI/extractors/dash/stream.py
Expand Up @@ -49,7 +49,7 @@ def append_segment(self):
segment = DASHSegment().set_index(index).set_folder(self.save_dir)
self.segments.append(segment)

def update(self, stream: 'DASHStream'):
def update(self, stream: 'DASHStream', name_from_url: bool = False):
'''
Representation id相同可以合并
这个时候应该重新计算时长和码率
Expand All @@ -65,7 +65,7 @@ def update(self, stream: 'DASHStream'):
has_init = True
stream.segments.remove(segment)
break
self.segments_extend(stream.segments, has_init=has_init)
self.segments_extend(stream.segments, has_init=has_init, name_from_url=name_from_url)

def set_subtitle_url(self, url: str):
self.has_init_segment = True
Expand Down
4 changes: 2 additions & 2 deletions XstreamDL_CLI/extractors/hls/parser.py
Expand Up @@ -158,7 +158,7 @@ def parse(self, uri: str, content: str, parent_stream: HLSStream) -> List[HLSStr
streams.append(stream)
# 下面的for循环中stream/segment是浅拷贝
_stream_paths = []
_streams = []
_streams = [] # type: List[HLSStream]
for stream in streams:
# 去重
if stream.tag == '#EXT-X-STREAM-INF':
Expand Down Expand Up @@ -196,7 +196,7 @@ def parse(self, uri: str, content: str, parent_stream: HLSStream) -> List[HLSStr
stream = _stream
continue
else:
stream.segments_extend(_stream.segments)
stream.segments_extend(_stream.segments, name_from_url=self.args.name_from_url)
streams.append(stream)
_streams = streams
return _streams
16 changes: 0 additions & 16 deletions XstreamDL_CLI/extractors/mss/stream.py
Expand Up @@ -103,22 +103,6 @@ def append_segment(self):
segment = MSSSegment().set_index(index).set_folder(self.save_dir)
self.segments.append(segment)

def update(self, stream: 'MSSStream'):
'''
Representation id相同可以合并
这个时候应该重新计算时长和码率
'''
total_duration = self.duration + stream.duration
if total_duration > 0:
self.bandwidth = (stream.duration * stream.bandwidth + self.duration * self.bandwidth) / (self.duration + stream.duration)
self.duration += stream.duration
for segment in stream.segments:
# 被合并的流的init分段 避免索引计算错误
if segment.segment_type == 'init':
stream.segments.remove(segment)
break
self.segments_extend(stream.segments)

def set_subtitle_url(self, url: str):
self.has_init_segment = True
self.segments[-1].set_subtitle_url(self.fix_url(url))
Expand Down
10 changes: 6 additions & 4 deletions XstreamDL_CLI/models/segment.py
Expand Up @@ -47,17 +47,19 @@ def is_supported_encryption(self) -> bool:
''' 请重写 '''
pass

def add_offset_for_name(self, offset: int, has_init: bool = False):
def add_offset_for_name(self, offset: int, has_init: bool = False, name_from_url: bool = False):
self.index += offset
if has_init:
self.index -= 1
self.name = f'{self.index:0>4}{self.suffix}'
if name_from_url is False:
self.name = f'{self.index:0>4}{self.suffix}'

def set_offset_for_name(self, offset: int, has_init: bool = False):
def set_offset_for_name(self, offset: int, has_init: bool = False, name_from_url: bool = False):
self.index = offset
if has_init:
self.index -= 1
self.name = f'{self.index:0>4}{self.suffix}'
if name_from_url is False:
self.name = f'{self.index:0>4}{self.suffix}'

def set_index(self, index: str):
self.index = index
Expand Down
8 changes: 4 additions & 4 deletions XstreamDL_CLI/models/stream.py
Expand Up @@ -57,7 +57,7 @@ def __init__(self, index: int, uri_item: BaseUri, save_dir: Path):
self.model = ''
self.suffix = '.mp4'

def segments_extend(self, segments: List[Segment], has_init: bool = False):
def segments_extend(self, segments: List[Segment], has_init: bool = False, name_from_url: bool = False):
'''
某些情况下对流进行合并
需要更新一下新增分段的文件名
Expand All @@ -68,11 +68,11 @@ def segments_extend(self, segments: List[Segment], has_init: bool = False):
# 跳过init分段
if segment.index == -1:
continue
segment.add_offset_for_name(offset, has_init)
segment.add_offset_for_name(offset, has_init, name_from_url=name_from_url)
_segments.append(segment)
self.segments.extend(_segments)

def live_segments_extend(self, segments: List[Segment], has_init: bool):
def live_segments_extend(self, segments: List[Segment], has_init: bool, name_from_url: bool = False):
'''
对live流进行合并
- 更新新增分段的文件名
Expand All @@ -86,7 +86,7 @@ def live_segments_extend(self, segments: List[Segment], has_init: bool):
continue
if urlparse(segment.url).path in url_paths:
continue
segment.set_offset_for_name(offset, has_init)
segment.set_offset_for_name(offset, has_init, name_from_url=name_from_url)
offset += 1
_segments.append(segment)
self.segments.extend(_segments)
Expand Down

0 comments on commit 1a700eb

Please sign in to comment.