StreamRecorder/CLAUDE.md

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

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

# 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.