From 9ca2e4e378b3189d2cfca27b1af9f3f53e0d6ddc Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 23 Apr 2025 10:21:46 +0200 Subject: update api doc --- doc/api.md | 58 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 26 deletions(-) (limited to 'doc') diff --git a/doc/api.md b/doc/api.md index b24fd46..67809cb 100644 --- a/doc/api.md +++ b/doc/api.md @@ -99,13 +99,11 @@ Returns headshot of a person from that node. ## Stream -### GET* `/stream/?&&&&&` +### GET* `/n//stream?` Responds with the stream directly or a redirect to the actual source in case of federation. -# Planned stream api - - `?whep&&` - WHEP Endpoint for streaming that set of tracks. The format used is decided by the server. @@ -120,40 +118,48 @@ federation. - `?hlsvariant&&&&` - Returns m3u8/HLS playlist of all known fragments of this track format. The playlist is updated for live media. -- `?info&` - - Returns JSON `SegmentInfo` if a segment index is provided, else `MediaInfo` +- `?info` + - Returns JSON `StreamInfo`. - `?fragmentindex&&` + - Returns time ranges for every fragment of this track. - `?fragment&&&&&` ```ts -interface MediaInfo { - title: string; - live: bool; +export type FragmentIndex = TimeRange[]; +export interface TimeRange { + start: number; + end: number; +} +export interface SubtitleCue extends TimeRange { + content: string; +} +export interface StreamInfo { + name?: string; segments: SegmentInfo[]; } -interface SegmentInfo { - title?: string; - duration?: number; - tracks: Track[]; +export interface SegmentInfo { + name?: string; + duration: number; + tracks: TrackInfo[]; } -interface Track { - title?: string; +export type TrackKind = "video" | "audio" | "subtitles"; +export interface TrackInfo { + name?: string; language?: string; - kind: "video" | "audio" | "text"; - formats: TrackFormat[]; + kind: TrackKind; + formats: FormatInfo[]; } -interface TrackFormat { +export type StreamContainer = "webm" | "matroska" | "mpeg4" | "jvtt" | "webvtt"; +export interface FormatInfo { codec: string; - bandwidth: number; - remux: bool; - title?: string; + bitrate: number; + remux: boolean; containers: StreamContainer[]; - a_sampling_frequency?: number; - a_channels?: number; - v_resolution_width?: number; - av_bit_depth?: number; + width?: number; + height?: number; + channels?: number; + samplerate?: number; + bit_depth?: number; } -type FragmentIndex = number[]; -type StreamContainer = "webm" | "matroska" | "webvtt" | "jvtt"; ``` -- cgit v1.2.3-70-g09d2