"Got stream request for unknown or finished stream: %s",
stream_id,
)
- return web.FileResponse(SILENCE_FILE)
+ return web.Response(status=404)
# handle a second connection for the same player
# this probably means a client which does multiple GET requests (e.g. Kodi, Vlc)
and prev_track.media_type == MediaType.TRACK
and queue_track.media_type == MediaType.TRACK
):
- prev_item = await self.mass.music.get_item_by_uri(prev_track.uri)
- new_item = await self.mass.music.get_item_by_uri(queue_track.uri)
if (
- prev_item.album is not None
- and new_item.album is not None
- and prev_item.album == new_item.album
+ prev_track.media_item.album is not None
+ and queue_track.media_item.album is not None
+ and prev_track.media_item.album == queue_track.media_item.album
):
self.logger.debug("Skipping crossfade: Tracks are from same album")
use_crossfade = False
self.logger.info(
"Start Streaming queue track: %s (%s) for queue %s - crossfade: %s",
- queue_track.uri,
+ streamdetails.uri,
queue_track.name,
self.queue.player.name,
use_crossfade,
if bytes_written == 0:
# stream error: got empy first chunk ?!
- self.logger.warning("Stream error on %s", queue_track.uri)
+ self.logger.warning("Stream error on %s", streamdetails.uri)
queue_track.streamdetails.seconds_streamed = 0
continue
# log warning if received seconds are a lot less than expected
if (stream_duration - chunk_num) > 20:
self.logger.warning(
- "Unexpected number of chunks received for track %s: %s/%s - process_time: %s",
- queue_track.uri,
+ "Unexpected number of chunks received for track %s: %s/%s - "
+ "process_time: %s - player_buffered: %s",
+ streamdetails.uri,
chunk_num,
stream_duration,
process_time,
+ player_buffered,
)
self.logger.debug(
"end of track reached - chunk_num: %s - crossfade_buffer: %s - "
)
self.logger.debug(
"Finished Streaming queue track: %s (%s) on queue %s",
- queue_track.uri,
+ queue_track.streamdetails.uri,
queue_track.name,
self.queue.player.name,
)
param queue_id: Optionally provide the queue_id which will play this stream.
"""
streamdetails = None
- if queue_item.streamdetails and (time() < queue_item.streamdetails.expires):
+ if queue_item.streamdetails and (time() < (queue_item.streamdetails.expires - 60)):
# we already have fresh streamdetails, use these
queue_item.streamdetails.seconds_skipped = None
queue_item.streamdetails.seconds_streamed = None
]
if streamdetails.direct:
# ffmpeg can access the inputfile (or url) directly
+ input_args += [
+ "-reconnect",
+ "1",
+ "-reconnect_streamed",
+ "1",
+ "-reconnect_on_network_error",
+ "1",
+ "-reconnect_on_http_error",
+ "5xx",
+ "-reconnect_delay_max",
+ "10",
+ ]
if seek_position:
input_args += ["-ss", str(seek_position)]
input_args += ["-i", streamdetails.direct]
sample_rate=int(streamdata["sampling_rate"] * 1000),
bit_depth=streamdata["bit_depth"],
data=streamdata, # we need these details for reporting playback
- expires=time.time() + 600, # not sure about the real allowed value
+ expires=time.time() + 3600, # not sure about the real allowed value
direct=streamdata["url"],
callback=self._report_playback_stopped,
)