OfflineSmelter
import { OfflineSmelter } from "@swmansion/smelter-node"OfflineSmelter class is a primary way of interacting with the Smelter server for
offline processing e.g. if you need to combine few mp4 files
together. It has simplified API compared to the Smelter class, optimized for
rendering just one output file as a result.
Usage
To use Smelter follow this life cycle:
- Create instance
new Smelter(). - Call
await smelter.init(). - (optional) Register inputs, outputs or other resources.
- Call
await smelter.render().
Example
import { OfflineSmelter } from "@swmansion/smelter-node"
async function run() { const smelter = new OfflineSmelter(); await smelter.init() // register inputs await smelter.render(<View />, { type: "mp4", serverPath: "./output.mp4", video: { encoder: { type: "ffmpeg_h264" }, resolution: { width: 1920, height: 1080 }, }, audio: { channels: "stereo", encoder: { type: "aac" }, } });}void run();new OfflineSmelter()
Creates a new offline smelter instance. You have to call init() first before this object can be used.
new OfflineSmelter(manager?: SmelterManager)Type definitions
type ApiRequest = { method: 'GET' | 'POST'; route: string; body?: object;};
type MultipartRequest = { method: 'POST'; route: string; body: any;};
type SmelterManager = { setupInstance(): Promise<void>; sendRequest(request: ApiRequest): Promise<object>; sendMultipartRequest(request: MultipartRequest): Promise<object>; registerEventListener(cb: (event: unknown) => void): void;}Parameters
manager
Configures how the client code will connect and manage a Smelter server.
- Type:
SmelterManager
init()
Smelter.init(): Promise<void>Initialize the Smelter instance. This might spawn a new instance or just establish a connection, depending on the manager used while creating Smelter instance.
After init() you can start connecting inputs/outputs or register other elements. However, no output stream will be produced until start() method is called.
render()
import React from "react";
Smelter.render( root: React.ReactElement, output: RegisterOutput, duration_ms?: number,): Promise<object>Type definitions
import { RegisterRtpOutput, RegisterMp4Output, RegisterHlsOutput, RegisterWhipClientOutput, RegisterWhepServerOutput, RegisterRtmpClientOutput,} from "@swmasnion/smelter"
type RegisterOutput = | ({ type: 'rtp_stream' } & RegisterRtpOutput) | ({ type: 'mp4' } & RegisterMp4Output) | ({ type: 'hls' } & RegisterHlsOutput) | ({ type: 'whip_client' } & RegisterWhipClientOutput) | ({ type: 'whep_server' } & RegisterWhepServerOutput) | ({ type: 'rtmp_client' } & RegisterRtmpClientOutput);Register external destination that can be used as a smelter output. Visit output documentation to learn more:
registerInput()
import { Inputs } from "@swmasnion/smelter"
Smelter.registerInput( inputId: string, input: Inputs.RegisterInput,): Promise<object>Type definitions
import { RegisterRtpInput, RegisterMp4Input, RegisterHlsInput, RegisterWhipServerInput, RegisterWhepClientInput,} from "@swmasnion/smelter"
type RegisterInput = | ({ type: 'rtp_stream' } & RegisterRtpInput) | ({ type: 'mp4' } & RegisterMp4Input) | ({ type: 'hls' } & RegisterHlsInput) | ({ type: 'whip_server' } & RegisterWhipServerInput) | ({ type: 'whep_client' } & RegisterWhepClientInput);Register external source that can be used as a smelter input. Visit input documentation to learn more:
registerImage()
import { Renderers } from "@swmansion/smelter"
Smelter.registerImage( imageId: string, image: Renderers.RegisterImage,): Promise<void>Register an image asset. See RegisterImage to learn more.
registerShader()
import { Renderers } from "@swmnasion/smelter"
Smelter.registerShader( shaderId: string, shader: Renderers.RegisterShader,): Promise<void>Register a shader. See RegisterShader to learn more.
registerFont()
Smelter.registerFont(source: string | ArrayBuffer): Promise<void>Register a new font, that can be used when rendering <Text> component.