1.8 KiB
1.8 KiB
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
- types.go: Contains the main parsing logic and data structures (
The GetStreamMetadata() function is the main entry point that:
- Fetches the M3U8 master playlist via HTTP
- Parses the content line by line
- Extracts video streams (
#EXT-X-STREAM-INF) and audio streams (#EXT-X-MEDIA) - Returns a
StreamSetcontaining all parsed metadata
Common Development Commands
# 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 streamsVideoURL: Represents video stream with bandwidth, codecs, resolution, frame rateAudioURL: 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.