Skip to content

RTP

Node.js Browser (Client)

An output type that allows streaming video and audio from Smelter over RTP.

Usage

rtpOutputExample.tsx
import Smelter from "@swmansion/smelter-node";
import { View } from "@swmansion/smelter";
async function run() {
const smelter = new Smelter();
await smelter.init();
await smelter.registerOutput("example", <View />, {
type: "rtp_stream",
port: 8001,
transportProtocol: "tcp_server",
video: {
encoder: { type: "ffmpeg_h264" },
resolution: { width: 1920, height: 1080 },
}
});
// At this point you can connect to 8001 TCP port
// and start receiving RTP traffic.
}
void run();

Reference

Type definitions

type RegisterRtpOutput = {
type: "rtp_stream";
port: string | number;
ip?: string;
transportProtocol?: "udp" | "tcp_server";
video?: VideoOptions;
audio?: AudioOptions;
}

Parameters for registering an output that sends composed video/audio as an RTP stream.

Properties

port

Depends on the value of the transportProtocol field:

  • udp - Specifies a UDP port number to which RTP packets will be sent.
  • tcp_server - Specifies a local TCP port number or a range of ports that Smelter will listen to for incoming connections.

  • Type: string | number

transportProtocol

Transport layer protocol that will be used to send RTP packets.

  • Type: "udp" | "tcp_server"
  • Default value: udp
  • Supported values:
    • udp - UDP protocol.
    • tcp_server - TCP protocol where Smelter is the server side of the connection.

ip

IP address to which RTP packets should be sent. This field is only valid if transportProtocol field is set to udp.

  • Type: string

video

Parameters of a video included in the RTP stream.


audio

Parameters of an audio included in the RTP stream.

VideoOptions

Type definitions

type VideoOptions = {
resolution: {
width: number;
height: number;
};
sendEosWhen?: OutputEndCondition;
encoder: VideoEncoderOptions;
}

Parameters of a video source included in the RTP stream.

Properties

resolution

Output resolution in pixels.

  • Type: { width: number; height: number;}

sendEosWhen

Condition for termination of the output stream based on the input streams states. If output includes both audio and video streams, then EOS needs to be sent for every type.


encoder

Video encoder options.

VideoEncoderOptions

Type definitions

type VideoEncoderOptions =
| ({ type: "ffmpeg_h264"; } & FfmpegH264EncoderOptions)
| ({ type: "ffmpeg_vp8"; } & FfmpegVp8EncoderOptions)
| ({ type: "ffmpeg_vp9"; } & FfmpegVp9EncoderOptions)
| ({ type: "vulkan_h264"; } & VulkanH264EncoderOptions);

Configuration for the video encoder, based on the selected codec. Visit encoder documentation to learn more.

AudioOptions

Type definitions

type AudioOptions = {
channels?: "mono" | "stereo";
mixingStrategy?: "sum_clip" | "sum_scale";
sendEosWhen?: OutputEndCondition;
encoder: AudioEncoderOptions;
}

Parameters of an audio source included in the RTP stream.

Properties

channels

Channels configuration

  • Type: "mono" | "stereo"
  • Default value: "stereo"
  • Supported values:
    • mono - Mono audio (single channel).
    • stereo - Stereo audio (two channels).

mixingStrategy

Specifies how audio should be mixed.

  • Type: "sum_clip" | "sum_scale"
  • Default value: "sum_clip"
  • Supported values:
    • sum_clip - First, the input samples are summed. If the result exceeds the i16 PCM range, it is clipped.
    • sum_scale - First, the input samples are summed. If the result exceeds the i16 PCM range, the summed samples are scaled down by a factor to fit within the range.

sendEosWhen

Condition for termination of the output stream based on the input streams states. If output includes both audio and video streams, then EOS needs to be sent for every type.


encoder

Audio encoder options.

AudioEncoderOptions

Type definitions

type AudioEncoderOptions =
| { type: "opus"; } & OpusEncoderOptions;

Configuration for the audio encoder. Visit encoder documentation to learn more.

OutputEndCondition

Type definitions

type OutputEndCondition =
| { anyOf: string[]; }
| { allOf: string[]; }
| { anyInput: boolean; }
| { allInputs: boolean; };

Defines when the output stream should end based on the state of the input streams. Only one of the nested fields can be set at a time.

By default, the input stream is considered finished/ended when:

  • TCP connection was dropped/closed.
  • RTCP Goodbye packet (BYE) was received.
  • MP4 track has ended.
  • Input was unregistered already (or never registered).

Properties

anyOf

List of the input streams. The output stream will terminate if any stream in the list finishes.

  • Type: string[]

allOf

List of the input streams. The output stream will terminate when all streams in the list finish.

  • Type: string[]

anyInput

Terminate the output stream if any of the input streams end, including streams added after the output was registered. Notably, the output stream will not terminate if no inputs were ever connected.

  • Type: boolean

allInputs

Terminate the output stream only when all input streams have finished. Notably, the output stream will terminate if no inputs were ever connected.

  • Type: boolean