Skip to content

Commit

Permalink
fix: prevent timeout when loading HLS streams directly
Browse files Browse the repository at this point in the history
  • Loading branch information
vzhd1701 committed Jul 16, 2022
1 parent a4d51ac commit f5b8164
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 8 deletions.
3 changes: 3 additions & 0 deletions gridplayer/utils/aspect_calc.py
Expand Up @@ -12,6 +12,9 @@ def calc_resize_scale(
scr_x, scr_y = size
vid_x, vid_y = video_dimensions

if vid_x == 0 or vid_y == 0:
return 0

if scale > 1:
if aspect == VideoAspect.FIT:
resize_scale = max(scr_x / vid_x, scr_y / vid_y) * scale
Expand Down
23 changes: 15 additions & 8 deletions gridplayer/vlc_player/player_base.py
Expand Up @@ -43,6 +43,7 @@ def wrapper(*args, **kwargs):

class VlcPlayerBase(ABC):
is_preparse_required = False
is_video_size_required = False

def __init__(self, vlc_instance, **kwargs):
super().__init__(**kwargs)
Expand Down Expand Up @@ -463,6 +464,15 @@ def audio_set_volume(self, volume_percent: float):

self._media_player.audio_set_volume(volume)

@property
def video_dimensions(self):
if self._media_player is None:
if self.media_track:
return self.media_track.video_dimensions
return 0, 0

return self._media_player.video_get_size()

@only_initialized_player
def adjust_view(self, size, aspect, scale):
if self.media_track is None:
Expand All @@ -471,13 +481,9 @@ def adjust_view(self, size, aspect, scale):
self.media_input.size = size
return

crop_aspect, crop_geometry = calc_crop(
self.media_track.video_dimensions, size, aspect
)
crop_aspect, crop_geometry = calc_crop(self.video_dimensions, size, aspect)

resize_scale = calc_resize_scale(
self.media_track.video_dimensions, size, aspect, scale
)
resize_scale = calc_resize_scale(self.video_dimensions, size, aspect, scale)

self._media_player.video_set_aspect_ratio("{0}:{1}".format(*crop_aspect))
self._media_player.video_set_crop_geometry("{0}:{1}".format(*crop_geometry))
Expand Down Expand Up @@ -566,8 +572,9 @@ def _get_media_track(self):
)

if not all([video_track.width, video_track.height]):
self._log.debug("Video track is not initialized yet")
return None
self._log.debug("Video size is not initialized yet")
if self.is_video_size_required:
return None

if all([video_track.frame_rate_num, video_track.frame_rate_den]):
fps = video_track.frame_rate_num / video_track.frame_rate_den
Expand Down
1 change: 1 addition & 0 deletions gridplayer/widgets/video_frame_vlc_sw.py
Expand Up @@ -73,6 +73,7 @@ def new_player(self, player_id, init_data, pipe):

class PlayerProcessSingleVLCSW(VlcPlayerThreaded):
is_preparse_required = True
is_video_size_required = True

def __init__(self, player_id, release_callback, init_data, **kwargs):
super().__init__(**kwargs)
Expand Down

0 comments on commit f5b8164

Please sign in to comment.