headers = {
"Content-Type": f"audio/{queue_stream.output_format.value}",
"transferMode.dlna.org": "Streaming",
+ "contentFeatures.dlna.org": "DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=0d500000000000000000000000000000",
"Cache-Control": "no-cache",
}
"-hide_banner",
"-loglevel",
"quiet",
- "-f",
- streamdetails.content_type.value,
- "-i",
- "-",
+ "-ignore_unknown",
]
+ if streamdetails.direct:
+ input_args += ["-ss", "30", "-i", streamdetails.direct]
+ else:
+ # the input is received from pipe/stdin
+ if streamdetails.content_type != ContentType.UNKNOWN:
+ input_args += ["-f", streamdetails.content_type.value]
+ input_args += ["-i", "-"]
+
output_args = ["-to", "30", "-f", "mp3", "-"]
args = input_args + output_args
async with AsyncProcess(args, True) as ffmpeg_proc:
# write eof when last packet is received
ffmpeg_proc.write_eof()
- ffmpeg_proc.attach_task(writer())
+ if not streamdetails.direct:
+ ffmpeg_proc.attach_task(writer())
# yield chunks from stdout
async for chunk in ffmpeg_proc.iter_any():
img = Image.open(data)
if size:
img.thumbnail((size, size), Image.ANTIALIAS)
- img.save(data, format="png")
+ img.convert("RGB").save(data, "PNG", optimize=True)
return data.getvalue()
return await mass.loop.run_in_executor(None, _create_image)
else:
# parse info with ffprobe (and store in cache)
media_info = await parse_tags(url)
+ if "authSig" in url:
+ media_info.has_cover_image = False
await self.mass.cache.set(cache_key, media_info.raw)
return (item_id, url, media_info)