rtp.js
Version:
RTP stack for Node.js and browser written in TypeScript
133 lines (132 loc) • 4.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RtpExtensionType = void 0;
exports.rtpExtensionUriToType = rtpExtensionUriToType;
exports.timeMsToAbsSendTime = timeMsToAbsSendTime;
/**
* RTP extensions.
*
* @category RTP
*/
var RtpExtensionType;
(function (RtpExtensionType) {
/**
* Media identification.
*
* URI: `urn:ietf:params:rtp-hdrext:sdes:mid`
*
* @see
* - [RFC 9143](https://datatracker.ietf.org/doc/html/rfc9143)
*/
RtpExtensionType[RtpExtensionType["MID"] = 0] = "MID";
/**
* RTP Stream Identifier.
*
* URI: `urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id`
*
* @see
* - [RFC 8852](https://datatracker.ietf.org/doc/html/rfc8852)
*/
RtpExtensionType[RtpExtensionType["RTP_STREAM_ID"] = 1] = "RTP_STREAM_ID";
/**
* RTP Repaired Stream Identifier.
*
* URI: `urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id`
*
* @see
* - [RFC 8852](https://datatracker.ietf.org/doc/html/rfc8852)
*/
RtpExtensionType[RtpExtensionType["RTP_REPAIRED_STREAM_ID"] = 2] = "RTP_REPAIRED_STREAM_ID";
/**
* Absolute Send Time.
*
* URI: `http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time`
*
* @see
* - [Google Source](https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/abs-send-time)
*/
RtpExtensionType[RtpExtensionType["ABS_SEND_TIME"] = 3] = "ABS_SEND_TIME";
/**
* Transport-wide Sequence Number.
*
* URI: `http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01`
*
* @see
* - [draft-holmer-rmcat-transport-wide-cc-extensions-01](https://datatracker.ietf.org/doc/html/draft-holmer-rmcat-transport-wide-cc-extensions-01)
*/
RtpExtensionType[RtpExtensionType["TRANSPORT_WIDE_SEQ_NUMBER"] = 4] = "TRANSPORT_WIDE_SEQ_NUMBER";
/**
* Audio Level
*
* URI: `urn:ietf:params:rtp-hdrext:ssrc-audio-level`
*
* @see
* - [RFC 6464](https://datatracker.ietf.org/doc/html/rfc6464)
*/
RtpExtensionType[RtpExtensionType["SSRC_AUDIO_LEVEL"] = 5] = "SSRC_AUDIO_LEVEL";
/**
* Video Orientation.
*
* URI: `urn:3gpp:video-orientation`
*
* @see
* - [3GPP TS 26.114 V12.7.0](https://www.etsi.org/deliver/etsi_ts/126100_126199/126114/13.02.00_60/ts_126114v130200p.pdf)
*/
RtpExtensionType[RtpExtensionType["VIDEO_ORIENTATION"] = 6] = "VIDEO_ORIENTATION";
/**
* Transmission Time Offsets.
*
* URI: `urn:ietf:params:rtp-hdrext:toffset`
*
* @see
* - [RFC 5450](https://datatracker.ietf.org/doc/html/rfc5450)
*/
RtpExtensionType[RtpExtensionType["TOFFSET"] = 7] = "TOFFSET";
})(RtpExtensionType || (exports.RtpExtensionType = RtpExtensionType = {}));
/**
* Get the RTP extension type associated to the given RTP extension URI.
*
* @category RTP
*/
function rtpExtensionUriToType(uri) {
switch (uri) {
case 'urn:ietf:params:rtp-hdrext:sdes:mid': {
return RtpExtensionType.MID;
}
case 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id': {
return RtpExtensionType.RTP_STREAM_ID;
}
case 'urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id': {
return RtpExtensionType.RTP_REPAIRED_STREAM_ID;
}
case 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time': {
return RtpExtensionType.ABS_SEND_TIME;
}
case 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01': {
return RtpExtensionType.TRANSPORT_WIDE_SEQ_NUMBER;
}
case 'urn:ietf:params:rtp-hdrext:ssrc-audio-level': {
return RtpExtensionType.SSRC_AUDIO_LEVEL;
}
case 'urn:3gpp:video-orientation': {
return RtpExtensionType.VIDEO_ORIENTATION;
}
case 'urn:ietf:params:rtp-hdrext:toffset': {
return RtpExtensionType.TOFFSET;
}
default: {
return undefined;
}
}
}
/**
* Convert Unix epoch timestamp in milliseconds to "Absolute Send Time" format.
*
* @category RTP
*
* @see
* - [Google Source](https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/abs-send-time)
*/
function timeMsToAbsSendTime(timeMs) {
return (((timeMs << 18) + 500) / 1000) & 0x00ffffff;
}