# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is a Go-based M3U8 downloader that parses HLS (HTTP Live Streaming) playlists to extract video and audio stream metadata. The end goal of this project is to have a listening REST API take in m3u8 urls, parse them, and eventually send to a conversion service. ## Architecture The project follows a clean separation of concerns: - **main.go**: Entry point that demonstrates usage of the media package - **media/**: Core package containing M3U8 parsing logic - **types.go**: Contains the main parsing logic and data structures (`StreamSet`, `VideoURL`, `AudioURL`) - **utils.go**: Utility functions for parsing attributes and resolution calculations The `GetStreamMetadata()` function is the main entry point that: 1. Fetches the M3U8 master playlist via HTTP 2. Parses the content line by line 3. Extracts video streams (`#EXT-X-STREAM-INF`) and audio streams (`#EXT-X-MEDIA`) 4. Returns a `StreamSet` containing all parsed metadata ## Common Development Commands ```bash # Build the project go build -o m3u8-downloader # Run the project go run main.go # Run with module support go mod tidy # Test the project (when tests are added) go test ./... # Format code go fmt ./... ``` ## Key Data Structures - `StreamSet`: Root structure containing playlist URL and all streams - `VideoURL`: Represents video stream with bandwidth, codecs, resolution, frame rate - `AudioURL`: Represents audio stream with media type, group ID, name, and selection flags ## Error Handling The current implementation uses `panic()` for error handling. When extending functionality, consider implementing proper error handling with returned error values following Go conventions.