from ffmpy import FFmpeg import os import subprocess import logging import uuid # Set up logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') def ffmpeg_stream(file_url, token, output_dir="tmp/cache/stream"): stream_dir = output_dir if not os.path.exists(stream_dir): os.makedirs(stream_dir) # Set up the FFmpeg command for HLS output_path = stream_dir+'/output.m3u8' segment_filename = stream_dir+'/segment_%03d.ts' ffmpeg_command = [ 'ffmpeg', '-headers', f'Authorization: Bearer {token}', '-i', file_url, '-c:v', 'libx264', '-crf', '23', '-preset', 'medium', '-c:a', 'aac', '-b:a', '192k', '-f', 'hls', '-hls_time', '10', '-hls_list_size', '0', '-hls_segment_filename', segment_filename, output_path ] try: # Log the command being executed logging.debug(f"Running FFmpeg command: {' '.join(ffmpeg_command)}") # Run the FFmpeg command process = subprocess.Popen( ffmpeg_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # Capture stdout and stderr stdout, stderr = process.communicate() # Log FFmpeg output logging.debug("FFmpeg stdout: %s", stdout.decode()) logging.error("FFmpeg stderr: %s", stderr.decode()) # Check if the output file was created if os.path.exists(output_path): logging.info(f"HLS playlist created at {output_path}") else: logging.error(f"HLS playlist not created at {output_path}") # Return the unique stream ID and process return process except Exception as e: logging.error(f"Error using FFmpeg to stream file: {e}") return None, None # if __name__ == "__main__": # url = "https://huggingface.co/Unicone-Studio/jellyfin_media/resolve/main/films/Funky%20Monkey%202004/Funky%20Monkey%20(2004)%20Web-dl%201080p.mp4" # token = os.getenv("TOKEN") # stream_id, process = ffmpeg_stream(url, token) # if stream_id: # logging.info(f"HLS playlist created with stream ID: {stream_id}") # else: # logging.error("Failed to create HLS playlist.")