Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Next Release

# 3.0.8 - 15th January 2027
Add caching Digest Authentication code from Leone25 Enrico
Fix bug causing an error with Panasonic Cameras returning RTP/AVP/UDP in SETUP
Add -t to the example demo.js to pick the RTP transport (-t udp or -t tcp)
Handle multiple WWW-Authenticate responses (which is valid) and pick Digest over Basic

# 3.0.7 - 13th January 2027
Add H266 (VVC) support with output to a .266 file.
Tested with https://github.com/jimm98y/SharpRealTimeStreaming which uses the SharpRTSP Library
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ An example of most API features can be found at [examples/demo.js](examples/demo
connect to a RTSP Stream and dump H264, H265, AV1 and AAC contents to a file.
For example
```node examples\demo.js rtsp://myhostname/stream1```
```node examples\demo.js -u username -p password rtsp://myhostname/stream1```
```node examples\demo.js -u username -p password -t tcp rtsp://myhostname/stream1```

To testthe output file with a video player you can use FFMPEG's ffplay command
```ffplay outfile.264```
Expand Down
107 changes: 107 additions & 0 deletions dist/RTSPClient copy.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import * as net from "net";
import * as tls from "tls";
type SocketUnion = net.Socket | tls.TLSSocket;
import { EventEmitter } from "events";
import * as util from "./util";
import { Transport } from "./util";
import * as transform from "sdp-transform";
declare enum ReadStates {
SEARCHING = 0,
READING_RTSP_HEADER = 1,
READING_RTSP_PAYLOAD = 2,
READING_RAW_PACKET_SIZE = 3,
READING_RAW_PACKET = 4
}
type Connection = "udp" | "tcp";
type AuthOptions = {
type: "Digest" | "Basic";
realm?: string;
nonce?: string;
qop?: string;
algorithm?: "MD5" | "SHA-256";
};
type Headers = {
[key: string]: string | number | undefined;
Session?: string;
Location?: string;
CSeq?: number;
"WWW-Authenticate"?: string;
Transport?: string;
Unsupported?: string;
};
type Detail = {
codec: string;
mediaSource: ({
type: string;
port: number;
protocol: string;
payloads?: string | undefined;
} & transform.MediaDescription);
transport: Transport['parameters'];
isH264: boolean;
rtpChannel: number;
rtcpChannel: number;
sr_ntpMSW?: number;
sr_ntpLSW?: number;
sr_rtptimestamp?: number;
};
export default class RTSPClient extends EventEmitter {
username: string;
password: string;
headers: {
[key: string]: string;
};
isConnected: boolean;
closed: boolean;
_url?: string;
_client?: SocketUnion;
_cSeq: number;
_unsupportedExtensions?: string[];
_authOpions?: AuthOptions;
_session?: string;
_keepAliveID?: NodeJS.Timeout;
_nextFreeInterleavedChannel: number;
_nextFreeUDPPort: number;
readState: ReadStates;
messageBytes: number[];
rtspContentLength: number;
rtspStatusLine: string;
rtspHeaders: Headers;
rtspPacketLength: number;
rtspPacket: Buffer;
rtspPacketPointer: number;
clientSSRC: number;
tcpSocket: SocketUnion;
setupResult: Array<Detail>;
constructor(username: string, password: string, headers?: {
[key: string]: string;
});
_netConnect(hostname: string, port: number, secure?: boolean): Promise<this>;
connect(url: string, { keepAlive, connection, secure, }?: {
keepAlive: boolean;
connection?: Connection;
secure: boolean;
}): Promise<Detail[]>;
request(requestName: string, headersParam?: Headers, url?: string): Promise<{
headers: Headers;
mediaHeaders?: string[];
} | void>;
respond(status: string, headersParam?: Headers): void;
play(): Promise<void>;
pause(): Promise<void>;
sendAudioBackChannel(audioChunk: Buffer): Promise<void>;
close(isImmediate?: boolean): Promise<void>;
_onData(data: Buffer): void;
_sendInterleavedData(channel: number, buffer: Buffer): void;
_sendUDPData(host: string, port: number, buffer: Buffer): void;
_emptyReceiverReport(): Buffer;
_socketWrite(socket: SocketUnion, data: Buffer): Promise<any>;
private _generateAuthString;
ntpBaseDate_ms: number;
GetWallClockTime(packet: util.RTPPacket, detail: Detail): Date | undefined;
}
export { RTPPacket, RTCPPacket } from "./util";
Loading
Loading