diff --git a/.forgejo/scripts/radio.py b/.forgejo/scripts/radio.py index dc0b307..21f0d58 100644 --- a/.forgejo/scripts/radio.py +++ b/.forgejo/scripts/radio.py @@ -4,6 +4,7 @@ Multi-Country Radio M3U Playlist Generator (resilient + dynamic mirrors) ----------------------------------------------------------------------- Generuje M3U playlist s radii z více zemí pomocí radio-browser.info API. Automaticky detekuje dostupné servery přes DNS a přepíná mezi nimi. +Podporuje --tvh-compatible formát pro Tvheadend. """ import sys @@ -119,8 +120,9 @@ def fetch_stations_with_retry(rb, country_code, max_retries=5, initial_backoff=1 # === Hlavní logika === def create_multi_country_playlist(country_codes, output_file=None, group_title="Radio Stations", - default_logo_url="https://amz.odjezdy.online/xbackbone/VUne9/HilOMeka75.png/raw", - use_country_as_group=False): + default_logo_url="https://amz.odjezdy.online/xbackbone/VUne9/HilOMeka75.png/raw", + use_country_as_group=False, + tvh_compatible=False): # <<< ZMĚNA: Přidán nový argument rb = init_radio_browser() # použije autodetekovaný mirror output_file = generate_safe_output_path(output_file, country_codes) @@ -182,8 +184,25 @@ def create_multi_country_playlist(country_codes, output_file=None, group_title=" if not logo or logo == "null": logo = default_logo_url group = s['country_name'] if use_country_as_group else group_title + stream_url = s['url'] + + # <<< ZMĚNA: Blok pro formátování URL pro Tvheadend + if tvh_compatible: + # Připravíme metadata - odstraníme mezery a problematické znaky + service_name = name.replace(" ", "_").replace('"', "'").replace("=", "-").replace(":", "-") + provider_name = stream_url # Poskytovatel je URL, jak je v textu + + url_to_write = ( + f"pipe://ffmpeg -loglevel fatal -i {stream_url} -vn -acodec copy -flags +global_header " + f"-strict -2 -metadata service_provider={provider_name} " + f"-metadata service_name={service_name} -f mpegts -mpegts_service_type digital_radio pipe:1" + ) + else: + url_to_write = stream_url + # <<< KONEC ZMĚNY + f.write(f'#EXTINF:-1 group-title="{group}" tvg-logo="{logo}",{s["country_code"]} | {name}\n') - f.write(f"{s['url']}\n") + f.write(f"{url_to_write}\n") # Použijeme upravenou nebo původní URL print(f"🎧 Playlist vytvořen: {output_file} ({len(unique_stations)} stanic)") return output_file @@ -201,6 +220,12 @@ def main(): help="Default logo URL") parser.add_argument("--use-country-as-group", "-ucag", action="store_true", help="Use full country name as group-title") + + # <<< ZMĚNA: Přidán argument pro TVH kompatibilitu + parser.add_argument("--tvh-compatible", "-tvh", action="store_true", + help="Generovat M3U kompatibilní s Tvheadend (pipe://ffmpeg)") + # <<< KONEC ZMĚNY + args = parser.parse_args() if args.countries: @@ -212,10 +237,12 @@ def main(): sys.exit(1) try: - create_multi_country_playlist(codes, args.output, args.group, args.logo, args.use_country_as_group) + # <<< ZMĚNA: Předání nového argumentu + create_multi_country_playlist(codes, args.output, args.group, args.logo, + args.use_country_as_group, args.tvh_compatible) except KeyboardInterrupt: print("\n🛑 Přerušeno uživatelem.") sys.exit(1) if __name__ == "__main__": - main() + main() \ No newline at end of file