instance2 / video.py
ChandimaPrabath's picture
test player
f505705
raw
history blame
2.6 kB
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.")