Skip to content

MP4

An output type that allows saving video and audio from Smelter to MP4 file.

Usage

To use MP4 Output you need to register it first.

Example request

POST: /api/output/:output_id/register
Content-Type: application/json
{
"type": "mp4",
"path": "/path/to/file.mp4",
"video": {
"resolution": { "width": 1280, "height": 720 },
"encoder": { "type": "ffmpeg_h264" },
"initial": {
"root": {
"type": "view"
}
}
},
"audio": {
"encoder": { "type": "aac", "channels": "stereo" },
"initial": {
"inputs": [{ "input_id": "input_1", "volume": 1 }]
}
}
}

See HTTP Routes documentation to learn more about managing outputs.

Reference

Type definitions

type Mp4Output = {
type: "mp4";
path: string;
video?: Mp4VideoOptions;
audio?: Mp4AudioOptions;
}

Properties

path

Path to output MP4 file.

  • Type: string

video

Video track configuration.


audio

Audio track configuration.

Mp4VideoOptions

Type definitions

type Mp4VideoOptions = {
resolution: {
width: u32;
height: u32;
};
send_eos_when?: OutputEndCondition;
encoder: Mp4VideoEncoderOptions;
initial: { root: Component; };
}

Properties

resolution

Output resolution in pixels.

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

send_eos_when

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.


initial

Root of a component tree/scene that should be rendered for the output. Use update_output request to update this value after registration.

  • Type: { root: Component; }

Mp4VideoEncoderOptions

Type definitions

type VideoEncoderOptions = {
type: "ffmpeg_h264";
preset?:
| "ultrafast"
| "superfast"
| "veryfast"
| "faster"
| "fast"
| "medium"
| "slow"
| "slower"
| "veryslow"
| "placebo";
ffmpeg_options?: Map<string, string>;
}

Properties (type: "ffmpeg_h264")

preset

Video output encoder preset. Visit FFmpeg docs to learn more.

  • Type: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo"
  • Default value: fast
  • Supported values:
    • ultrafast
    • superfast
    • veryfast
    • faster
    • fast
    • medium
    • slow
    • slower
    • veryslow
    • placebo

ffmpeg_options

Raw FFmpeg encoder options. Visit FFmpeg docs to learn more.

  • Type: Map<string, string>

Mp4AudioOptions

Type definitions

type Mp4AudioOptions = {
mixing_strategy?: "sum_clip" | "sum_scale";
send_eos_when?: OutputEndCondition;
encoder: Mp4AudioEncoderOptions;
initial: { inputs: InputAudio[]; };
}

Properties

mixing_strategy

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.

send_eos_when

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.

initial

Initial audio mixer configuration for output.

  • Type: { inputs: InputAudio[]; }

Mp4AudioEncoderOptions

Type definitions

type Mp4AudioEncoderOptions = {
type: "aac";
channels: "mono" | "stereo";
sample_rate?: u32;
}

Properties(type: “aac”)

channels

Channels configuration

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

sample_rate

Sample rate.

  • Type: u32
  • Default value: 44100
  • Supported values: 8000, 16000, 24000, 44100, 48000

InputAudio

Type definitions

type InputAudio = {
input_id: string;
volume?: f32;
}

Properties

input_id

ID of an input. It identifies a stream registered using a register input method.

  • Type: string

volume

Input volume in range [0, 1]

  • Type: f32
  • Default value: 1.0
  • Supported values: [0, 1]

OutputEndCondition

This type defines when end of an input stream should trigger end of the output stream. Only one of those fields can be set at the time. Unless specified otherwise 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).
Type definitions

type OutputEndCondition = {
any_of?: string[];
all_of?: string[];
any_input?: bool;
all_inputs?: bool;
}

Properties

any_of

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

  • Type: string[]

all_of

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

  • Type: string[]

any_input

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: bool

all_inputs

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

  • Type: bool