UNPKG

media-stream-library

Version:

Media stream library for Node & the Web.

147 lines (146 loc) 4.73 kB
import { Rtcp } from '../../utils/protocols/rtcp'; import { Sdp } from '../../utils/protocols/sdp'; import { Tube } from '../component'; import { RtcpMessage, RtpMessage, RtspMessage, SdpMessage } from '../message'; export declare enum RTSP_METHOD { OPTIONS = "OPTIONS", DESCRIBE = "DESCRIBE", SETUP = "SETUP", PLAY = "PLAY", PAUSE = "PAUSE", TEARDOWN = "TEARDOWN" } interface Headers { [key: string]: string; } interface Command { method: RTSP_METHOD; headers?: Headers; uri?: string; } interface MethodHeaders { [key: string]: Headers; } export interface RtspConfig { hostname?: string; parameters?: string[]; uri?: string; headers?: MethodHeaders; defaultHeaders?: Headers; } export declare class RTSPResponseError extends Error { code: number; constructor(message: string, code: number); } /** * A component that sets up a command queue in order to interact with the RTSP * server. Allows control over the RTSP session by listening to incoming messages * and sending request on the outgoing stream. * * The following handlers can be set on the component: * - onSdp: will be called when an SDP object is sent with the object as argument * - onPlay: will be called when an RTSP PLAY response is sent with the media range * as argument. The latter is an array [start, stop], where start is "now" * (for live) or a time in seconds, and stop is undefined (for live or * ongoing streams) or a time in seconds. * @extends {Component} */ export declare class RtspSession extends Tube { uri?: string; headers?: MethodHeaders; defaultHeaders?: Headers; t0?: { [key: number]: number; }; n0?: { [key: number]: number; }; clockrates?: { [key: number]: number; }; startTime?: number; onRtcp?: (rtcp: Rtcp) => void; onSdp?: (sdp: Sdp) => void; onError?: (err: RTSPResponseError) => void; onPlay?: (range?: string[]) => void; retry?: () => void; private _outgoingClosed; private _sequence?; private _callStack?; private _callHistory?; private _state?; private _waiting?; private _contentBase?; private _contentLocation?; private _sessionId?; private _sessionControlURL; private _renewSessionInterval?; /** * Create a new RTSP session controller component. * @param [config] Details about the session. * @param [config.hostname] The RTSP server hostname * @param [config.parameters] The RTSP URI parameters * @param [config.uri] The full RTSP URI (overrides any hostname/parameters) * @param [config.defaultHeaders] Default headers to use (for all methods). * @param [config.headers] Headers to use (mapped to each method). */ constructor(config?: RtspConfig); /** * Update the cached RTSP uri and headers. * @param uri - The RTSP URI. * @param headers - Maps commands to headers. * @param defaultHeaders - Default headers. */ update(uri: string | undefined, headers?: MethodHeaders, defaultHeaders?: Headers): void; /** * Restore the initial values to the state they were in before any RTSP * connection was made. */ _reset(): void; _controlURL(attribute?: string): string; /** * Handles incoming RTSP messages and send the next command in the queue. * @param msg - An incoming RTSP message. */ _onRtsp(msg: RtspMessage): void; _onRtcp(msg: RtcpMessage): void; _onRtp(msg: RtpMessage): void; /** * Handles incoming SDP messages, reply with SETUP and optionally PLAY. * @param msg - An incoming SDP message. */ _onSdp(msg: SdpMessage): void; /** * Set up command queue in order to start playing, i.e. PLAY optionally * preceeded by OPTIONS/DESCRIBE commands. If not waiting, immediately * start sending. * @param startTime - Time (seconds) at which to start playing */ play(startTime?: number): void; /** * Queue a pause command, and send if not waiting. * @return {undefined} */ pause(): void; /** * End the session if there is one, otherwise just cancel * any outstanding calls on the stack. * @return {undefined} */ stop(): void; /** * Pushes an RTSP request onto the outgoing stream. * @param cmd - The details about the command to send. */ send(cmd: Command): void; /** * Push a command onto the call stack. * @param cmd - The command to queue */ _enqueue(cmd: Command): void; /** * If possible, send the next command on the call stack. */ _dequeue(): void; } export {};