///
import { RemoteInfo, Socket } from 'dgram';
import { Observable } from 'rxjs';
import { SrtpOptions } from './rtp-utils';
export interface SipOptions {
to: string;
from: string;
dingId: string;
host?: string;
port?: number;
tlsPort: number;
}
export interface RtpStreamOptions extends Partial {
port: number;
}
export interface RtpPacket {
message: Buffer;
info: RemoteInfo;
}
export interface RtpStream {
socket: Socket;
port: number;
onRtpPacket: Observable;
}
export interface RtpOptions {
address: string;
audio: RtpStreamOptions;
video: RtpStreamOptions;
}
declare type SpawnInput = string | number;
export interface FfmpegOptions {
input?: SpawnInput[];
video?: SpawnInput[] | false;
audio?: SpawnInput[];
output: SpawnInput[];
}
interface UriOptions {
name?: string;
uri: string;
params?: {
tag?: string;
};
}
interface SipHeaders {
[name: string]: string | any;
cseq: {
seq: number;
method: string;
};
to: UriOptions;
from: UriOptions;
contact?: UriOptions[];
via?: UriOptions[];
}
export interface SipRequest {
uri: UriOptions | string;
method: string;
headers: SipHeaders;
content: string;
}
export interface SipResponse {
status: number;
reason: string;
headers: SipHeaders;
content: string;
}
export interface SipClient {
send: (request: SipRequest | SipResponse, handler?: (response: SipResponse) => void) => void;
destroy: () => void;
makeResponse: (response: SipRequest, status: number, method: string) => SipResponse;
}
export declare class SipSession {
private sipOptions;
private rtpOptions;
private videoSocket;
private audioSocket;
private seq;
private fromParams;
private toParams;
private callId;
private hasStarted;
private hasCallEnded;
private sipClient;
private onAudioPacket;
private onVideoPacket;
private onCallEndedSubject;
private onRemoteRtpOptionsSubject;
private subscriptions;
private reservedPorts;
onCallEnded: Observable;
onRemoteRtpOptions: Observable;
sdp: string;
audioStream: RtpStream;
videoStream: RtpStream;
constructor(sipOptions: SipOptions, rtpOptions: RtpOptions, videoSocket: Socket, audioSocket: Socket);
start(ffmpegOptions?: FfmpegOptions): Promise;
sipRequest({ method, headers, content, seq }: {
method: string;
headers?: Partial;
content?: string;
seq?: number;
}): Promise;
invite(): Promise;
private ackWithInfo;
private startTranscoder;
reservePort(bufferPorts?: number): Promise;
private callEnded;
stop(): void;
}
export {};