Spaces:
Paused
Paused
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"): | |
# Create unique directory for each stream using UUID | |
stream_id = str(uuid.uuid4()) | |
stream_dir = os.path.join(output_dir, stream_id) | |
if not os.path.exists(stream_dir): | |
os.makedirs(stream_dir) | |
logging.info(f"Created directory: {stream_dir}") | |
else: | |
logging.info(f"Directory already exists: {stream_dir}") | |
# Set up the FFmpeg command for HLS | |
output_path = os.path.join(stream_dir, 'output.m3u8') | |
segment_filename = os.path.join(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 stream_id, process | |
except Exception as e: | |
logging.error(f"Error using FFmpeg to stream file: {e}") | |
return None, None | |
# # Example usage | |
# 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.") | |