Input Configuration Reference
RTMP_PUSH
Push RTMP stream to Stegawave-provided endpoints.
Required Parameters
Type
:"RTMP_PUSH"
Optional Parameters
whitelist
: Array of CIDR blocks (default:["0.0.0.0/0"]
)
Behavior
- Sources: Not applicable (push destination provided by Stegawave)
- Pipeline: Always STANDARD (dual redundant inputs created)
- Security: Whitelist applied via encoder security group
Example
{
"Type": "RTMP_PUSH",
"whitelist": ["203.0.113.0/24", "198.51.100.0/24"]
}
RTP_PUSH
Push RTP stream to Stegawave-provided endpoints.
Required Parameters
Type
:"RTP_PUSH"
Optional Parameters
whitelist
: Array of CIDR blocks (default:["0.0.0.0/0"]
)
Behavior
- Sources: Not applicable (push destination provided)
- Pipeline: Always STANDARD
- Security: Whitelist applied via encoder security group
Example
{
"Type": "RTP_PUSH",
"whitelist": ["198.51.100.0/24"]
}
RTMP_PULL
Pull RTMP stream from external source(s).
Required Parameters
Type
:"RTMP_PULL"
Sources
: Array of source objects withUrl
field
Sources
- 1 source → SINGLE_PIPELINE (no redundancy, lower cost)
- 2 sources → STANDARD (automatic failover)
Behavior
- Security: No whitelist (outbound pull connection)
- Pipeline Mode: Auto-selected based on source count
Example (Single Source)
{
"Type": "RTMP_PULL",
"Sources": [
{"Url": "rtmp://origin.example.com/live/stream"}
]
}
Example (Redundant)
{
"Type": "RTMP_PULL",
"Sources": [
{"Url": "rtmp://origin1.example.com/live/stream"},
{"Url": "rtmp://origin2.example.com/live/stream"}
]
}
HLS
Pull HLS stream from external source(s).
Required Parameters
Type
:"HLS"
Sources
: Array of source objects withUrl
field
Sources
- 1 source → SINGLE_PIPELINE
- 2 sources → STANDARD (failover)
Behavior
- Security: No whitelist (outbound connection)
- Pipeline Mode: Auto-selected based on source count
Example
{
"Type": "HLS",
"Sources": [
{"Url": "https://origin.example.com/playlist.m3u8"}
]
}
SRT_LISTENER
Creates SRT listener flow that listens for incoming SRT connections from external encoders.
Required Parameters
Type
:"SRT_LISTENER"
SrtListenerSettings.IngestPort
: Port number (1024-65535, excluding 2077, 2088)
Optional Parameters
whitelist
: Array with exactly ONE CIDR (SRT listener limitation)SrtListenerSettings.MinLatency
: Milliseconds (default: 2000)SrtListenerSettings.MaxLatency
: MillisecondsSrtListenerSettings.PassphraseEnabled
: Boolean (default: false)
Port Restrictions
- Valid range: 1024 - 65535
- Forbidden: 2077, 2088
Passphrase Management
- Auto-generated (32 hex chars) if
PassphraseEnabled: true
- Retrieve via
GET /passphrase
- Rotate via
POST /passphrase/rotate
- Custom passphrase must be exactly 32 hex characters
Behavior
- Sources: Not applicable (listener accepts connections)
- Pipeline: Always STANDARD (SRT listener creates redundant outputs)
- Security: Single CIDR whitelist enforced by SRT listener
- Flow State: Created in STANDBY, must be started manually via
POST /state
Example (Basic)
{
"Type": "SRT_LISTENER",
"SrtListenerSettings": {
"IngestPort": 9000,
"MinLatency": 2000
}
}
Example (With Passphrase)
{
"Type": "SRT_LISTENER",
"whitelist": ["203.0.113.50/32"],
"SrtListenerSettings": {
"IngestPort": 5000,
"MinLatency": 1500,
"PassphraseEnabled": true
}
}
SRT_CALLER
Creates SRT caller flow that initiates SRT connection to remote SRT listener(s).
Required Parameters
Type
:"SRT_CALLER"
SrtCallerSources
: Array of source configurations- Each source must have:
SrtListenerAddress
: IP or hostnameSrtListenerPort
: Port number
Optional Parameters
SrtCallerDecryption
: Decryption settings for encrypted streamsStreamId
: Identifier for remote stream routing (optional)
Sources
- 1 source → SINGLE_PIPELINE
- 2 sources → STANDARD (redundancy)
Behavior
- Security: No whitelist (outbound caller)
- Pipeline Mode: Auto-selected based on source count
Example (Single Source)
{
"Type": "SRT_CALLER",
"SrtCallerSources": [
{
"SrtListenerAddress": "encoder.example.com",
"SrtListenerPort": 9000,
"SrtCallerDecryption": {
"Algorithm": "AES128",
"Passphrase": "A1B2C3D4E5F6071827364556677889900A1B2C3D4E5F60718"
},
"StreamId": "primary-feed"
}
]
}
Example (Redundant)
{
"Type": "SRT_CALLER",
"SrtCallerSources": [
{
"SrtListenerAddress": "encoder1.example.com",
"SrtListenerPort": 9000,
"StreamId": "feed-a"
},
{
"SrtListenerAddress": "encoder2.example.com",
"SrtListenerPort": 9000,
"StreamId": "feed-b"
}
]
}
Encoder Configuration Reference
Encoder Overview
Encoder configuration controls video/audio transcoding, output renditions, and archive settings.
Structure
InputSpecification
: Defines input codec, bitrate, and resolution capabilitiesoutput_group
: Contains array of output renditions (ABR ladder)vodArchive
: Enable/disable automatic VOD archiving to S3
Key Concepts
- Single Output Group: User provides one
output_group
which gets duplicated into A/B pipelines automatically - CMAF Output: All outputs are CMAF format for packager
- Segment Duration: Top-level parameter (default: 4 seconds, range: 1-30)
- Unified Framerate: All outputs in a group must use the same framerate
Minimal Example
{
"vodArchive": false,
"InputSpecification": {
"Codec": "AVC",
"MaximumBitrate": "MAX_20_MBPS",
"Resolution": "HD"
},
"output_group": {
"Outputs": [
{
"resolution": "1920x1080",
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
]
}
}
Input Specification
Defines the input video codec, maximum bitrate, and resolution tier.
Required Parameters
Codec
: Video codec typeMaximumBitrate
: Maximum input bitrate capabilityResolution
: Input resolution tier
Codec Options
"AVC"
- H.264/AVC codec"HEVC"
- H.265/HEVC codec
MaximumBitrate Options
"MAX_10_MBPS"
- Up to 10 Mbps"MAX_20_MBPS"
- Up to 20 Mbps (default, recommended)"MAX_50_MBPS"
- Up to 50 Mbps
Resolution Options
"SD"
- Standard Definition"HD"
- High Definition (default, recommended)"UHD"
- Ultra High Definition (4K)
Examples
// H.264 HD (recommended default)
{
"Codec": "AVC",
"MaximumBitrate": "MAX_20_MBPS",
"Resolution": "HD"
}
// H.265 4K
{
"Codec": "HEVC",
"MaximumBitrate": "MAX_50_MBPS",
"Resolution": "UHD"
}
Output Configuration
Each output represents a single rendition (video + audio track) in your ABR ladder.
Required Parameters (Per Output)
FramerateNumerator
: Framerate numerator (e.g., 30 for 30fps)FramerateDenominator
: Framerate denominator (e.g., 1 for 30fps)- Resolution: Either:
resolution
: String format "WIDTHxHEIGHT" (e.g., "1920x1080")- OR
Width
+Height
: Separate integer fields
Optional Parameters
Bitrate
orVideoBitrate
: Video bitrate in bps (default: 5000000)AudioBitrate
: Audio bitrate in bps (default: 128000)SampleRate
: Audio sample rate in Hz (default: 48000)OutputName
: Custom name for this outputProfile
: H.264/H.265 profile (see Video Advanced tab)AdaptiveQuantization
: AQ mode (see Video Advanced tab)
Common Framerates
- 24 fps:
FramerateNumerator: 24, FramerateDenominator: 1
- 23.976 fps:
FramerateNumerator: 24000, FramerateDenominator: 1001
- 30 fps:
FramerateNumerator: 30, FramerateDenominator: 1
- 29.97 fps:
FramerateNumerator: 30000, FramerateDenominator: 1001
- 60 fps:
FramerateNumerator: 60, FramerateDenominator: 1
Important Notes
- Unified Framerate: All outputs in a group MUST use the same framerate
- Bitrate Flexibility: Use
Bitrate
orVideoBitrate
interchangeably - String Shorthand: Bitrates support "5M", "3000k" notation (converted to integers)
Single Output Example
{
"resolution": "1920x1080",
"VideoBitrate": 5000000,
"AudioBitrate": 128000,
"SampleRate": 48000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
ABR Ladder Example (4 Renditions)
{
"Outputs": [
{
"Width": 3840,
"Height": 2160,
"VideoBitrate": 15000000,
"AudioBitrate": 192000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
},
{
"resolution": "1920x1080",
"VideoBitrate": 5000000,
"AudioBitrate": 128000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
},
{
"resolution": "1280x720",
"VideoBitrate": 2500000,
"AudioBitrate": 128000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
},
{
"resolution": "854x480",
"VideoBitrate": 1200000,
"AudioBitrate": 96000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
]
}
Audio Configuration
Audio encoding settings for each output rendition.
Parameters
AudioBitrate
: Bitrate in bps (default: 128000)SampleRate
: Sample rate in Hz (default: 48000)
Common Audio Bitrates
- 96 kbps:
96000
- Low quality, suitable for mobile/low bitrate tiers - 128 kbps:
128000
- Standard quality (default, recommended) - 192 kbps:
192000
- High quality, suitable for 4K/premium tiers - 256 kbps:
256000
- Premium quality
Sample Rate Options
- 48000 Hz: Standard for video (default, recommended)
- 44100 Hz: CD quality
- 32000 Hz: Lower quality option
Codec
- AAC: Only supported codec (automatic, no configuration needed)
Example
{
"AudioBitrate": 128000,
"SampleRate": 48000
}
Advanced Video Settings
Optional advanced H.264/H.265 encoding parameters for fine-tuning quality and compatibility.
H.264 (AVC) Profile
"BASELINE"
- Basic compatibility, lower complexity"MAIN"
- Standard profile (default, recommended)"HIGH"
- Better compression, higher quality"HIGH_10BIT"
- 10-bit color depth"HIGH_422"
- 4:2:2 chroma subsampling"HIGH_422_10BIT"
- 4:2:2 with 10-bit
H.265 (HEVC) Profile
"MAIN"
- Standard HEVC profile (default)"MAIN_10BIT"
- 10-bit color depth
Adaptive Quantization
"AUTO"
- Automatic selection based on content"LOW"
- Minimal adaptive quantization"MEDIUM"
- Balanced (default, recommended)"HIGH"
- Aggressive quality optimization"HIGHER"
- Very aggressive"MAX"
- Maximum quality optimization"OFF"
- Disabled
Notes
- Rate Control: Always CBR (Constant Bitrate) - not user-configurable
- Profile Selection: Use MAIN for broadest compatibility
- 10-bit Encoding: Requires compatible input and player support
Example (H.264 High Profile)
{
"resolution": "1920x1080",
"VideoBitrate": 5000000,
"Profile": "HIGH",
"AdaptiveQuantization": "HIGH",
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
Example (H.265 10-bit)
{
"InputSpecification": {
"Codec": "HEVC"
},
"output_group": {
"Outputs": [{
"Width": 1920,
"Height": 1080,
"VideoBitrate": 3000000,
"Profile": "MAIN_10BIT",
"FramerateNumerator": 30,
"FramerateDenominator": 1
}]
}
}
Complete Examples
Real-world encoder configurations for common use cases.
Single 1080p Output
{
"vodArchive": false,
"InputSpecification": {
"Codec": "AVC",
"MaximumBitrate": "MAX_20_MBPS",
"Resolution": "HD"
},
"output_group": {
"Outputs": [
{
"resolution": "1920x1080",
"VideoBitrate": 5000000,
"AudioBitrate": 128000,
"SampleRate": 48000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
]
}
}
4-Tier ABR Ladder (4K to 480p)
{
"vodArchive": false,
"InputSpecification": {
"Codec": "AVC",
"MaximumBitrate": "MAX_50_MBPS",
"Resolution": "UHD"
},
"output_group": {
"Outputs": [
{
"Width": 3840,
"Height": 2160,
"VideoBitrate": 15000000,
"AudioBitrate": 192000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
},
{
"resolution": "1920x1080",
"VideoBitrate": 5000000,
"AudioBitrate": 128000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
},
{
"resolution": "1280x720",
"VideoBitrate": 2500000,
"AudioBitrate": 128000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
},
{
"resolution": "854x480",
"VideoBitrate": 1200000,
"AudioBitrate": 96000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
]
}
}
H.265 (HEVC) 1080p
{
"vodArchive": false,
"InputSpecification": {
"Codec": "HEVC",
"MaximumBitrate": "MAX_20_MBPS",
"Resolution": "HD"
},
"output_group": {
"Outputs": [
{
"Width": 1920,
"Height": 1080,
"VideoBitrate": 3000000,
"AudioBitrate": 128000,
"SampleRate": 48000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
]
}
}
With VOD Archive Enabled
{
"vodArchive": true,
"InputSpecification": {
"Codec": "AVC",
"MaximumBitrate": "MAX_20_MBPS",
"Resolution": "HD"
},
"output_group": {
"Outputs": [
{
"resolution": "1920x1080",
"VideoBitrate": 5000000,
"AudioBitrate": 128000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
]
}
}
Note: Setting vodArchive: true
automatically creates an additional archive output group
that records the highest resolution stream to S3 for VOD playback.
60fps High Framerate
{
"vodArchive": false,
"InputSpecification": {
"Codec": "AVC",
"MaximumBitrate": "MAX_20_MBPS",
"Resolution": "HD"
},
"output_group": {
"Outputs": [
{
"Width": 1920,
"Height": 1080,
"VideoBitrate": 8000000,
"AudioBitrate": 128000,
"SampleRate": 48000,
"FramerateNumerator": 60,
"FramerateDenominator": 1
}
]
}
}
Packager Configuration Reference
Packager Overview
Packager configuration controls origin endpoints and manifest generation for HLS, DASH, and MSS delivery.
Architecture
- Encoder encodes and sends CMAF to packager channels (A/B for redundancy)
- Packager origin endpoints package CMAF into HLS/DASH/MSS manifests
- CDN distributes manifests to players via tenant-specific domains
Basic Structure
{
"packager": {
"originEndpoints": [
{
"name": "my-endpoint",
"ContainerType": "CMAF",
"HlsManifests": [...],
"DashManifests": [...],
"StartoverWindowSeconds": 86400
}
]
}
}
Important Notes
- Segment Duration: Set globally via top-level
segmentDuration
parameter (not per-endpoint) for watermark extraction purposes - Best Practice: Use single origin endpoint with multiple manifests for better performance
- Recommended: CMAF container with both HLS and DASH manifests
Container Types
Container type determines the packaging format and compatible manifest types.
Available Containers
Container | Description | Compatible Manifests | Use Case |
---|---|---|---|
CMAF |
Common Media Application Format (fMP4) | HLS, DASH | Modern streaming (recommended) |
TS |
MPEG Transport Stream | HLS only | Legacy HLS support |
ISM |
Microsoft Smooth Streaming | MSS only | Legacy Microsoft platforms |
Container Selection Guide
- CMAF: Choose for modern players, supports both HLS and DASH from same segments
- TS: Choose only if you need traditional HLS for legacy devices
- ISM: Choose only for Microsoft Smooth Streaming clients
Example: CMAF with Dual Manifests
{
"ContainerType": "CMAF",
"HlsManifests": [
{
"ManifestName": "index",
"ManifestWindowSeconds": 600
}
],
"DashManifests": [
{
"ManifestName": "index",
"ManifestWindowSeconds": 600
}
]
}
Manifest Name Uniqueness
When using multiple manifests of different types (HLS + DASH), you can use the same manifest name. However, if you provide the same name for multiple manifests of the same type, a number will be automatically appended to prevent conflicts.
Manifest Configuration
Configure HLS, DASH, and MSS manifests for your origin endpoint.
HLS Manifests
{
"HlsManifests": [
{
"ManifestName": "index",
"ManifestWindowSeconds": 600,
"ProgramDateTimeIntervalSeconds": 60,
"ChildManifestName": "child"
}
]
}
ManifestName
: Manifest filename without extension (default:"index"
)ManifestWindowSeconds
: Duration of content in manifest (default:360
)ProgramDateTimeIntervalSeconds
: Interval for EXT-X-PROGRAM-DATE-TIME tags (optional)ChildManifestName
: Child manifest name for master/child setup (optional)
DASH Manifests
{
"DashManifests": [
{
"ManifestName": "index",
"ManifestWindowSeconds": 600,
"MinUpdatePeriodSeconds": 2,
"MinBufferTimeSeconds": 30,
"SuggestedPresentationDelaySeconds": 10
}
]
}
ManifestName
: Manifest filename without extensionManifestWindowSeconds
: Duration of content in MPD (default:360
)MinUpdatePeriodSeconds
: Minimum manifest refresh interval (optional)MinBufferTimeSeconds
: Minimum player buffer requirement (optional)SuggestedPresentationDelaySeconds
: Recommended playback delay from live edge (optional)
MSS Manifests
{
"MssManifests": [
{
"ManifestName": "index",
"ManifestWindowSeconds": 600
}
]
}
ManifestName
: Manifest filename without extensionManifestWindowSeconds
: Duration of content in manifest (default:360
)
Extension Handling
Manifest names are provided without extensions. Packager automatically appends:
- HLS:
.m3u8
- DASH:
.mpd
- MSS:
.ism/Manifest
DVR/Startover Window
Configure how much historical content is available for playback.
Understanding Windows
Setting | Scope | Description |
---|---|---|
StartoverWindowSeconds |
Origin Endpoint | Total content stored in packager (DVR storage) |
ManifestWindowSeconds |
Per Manifest | Content range presented in the manifest |
Relationship
- StartoverWindow: Storage capacity (how much content packager keeps)
- ManifestWindow: Playback window (how much players can access in manifest)
- ManifestWindow should be ≤ StartoverWindow
Configuration Limits
Setting | Min | Max | Default |
---|---|---|---|
StartoverWindowSeconds |
60 | 1,209,600 (14 days) | 5000 |
ManifestWindowSeconds |
30 | 3600 | 360 |
Common Configurations
// Live streaming (minimal DVR)
{
"StartoverWindowSeconds": 3600, // 1 hour storage
"HlsManifests": [{
"ManifestWindowSeconds": 600 // 10 minutes in manifest
}]
}
// Event streaming (large DVR)
{
"StartoverWindowSeconds": 86400, // 24 hours storage
"HlsManifests": [{
"ManifestWindowSeconds": 3600 // 1 hour in manifest
}]
}
// VOD-like experience (maximum DVR)
{
"StartoverWindowSeconds": 1209600, // 14 days storage
"HlsManifests": [{
"ManifestWindowSeconds": 3600 // 1 hour in manifest
}]
}
Cost Consideration
Larger StartoverWindow values increase packager storage costs. Choose the minimum window that meets your DVR requirements.
Advanced Settings
Segment Configuration
{
"TsUseAudioRenditionGroup": true
}
SegmentDuration
: Segment duration - set globally via top-levelsegmentDuration
parameterTsUseAudioRenditionGroup
: Allow any audio rendition with any video rendition (TS only, default:true
)
TsUseAudioRenditionGroup
When enabled (default), allows players to select any audio track with any video quality. This is useful for:
- Multi-language streams
- Audio description tracks
- Alternate audio formats
Note: Only applies to TS container type.
Multiple Origin Endpoints
{
"originEndpoints": [
{
"name": "cmaf-endpoint",
"ContainerType": "CMAF",
"HlsManifests": [{"ManifestName": "index"}],
"DashManifests": [{"ManifestName": "index"}]
},
{
"name": "ts-endpoint",
"ContainerType": "TS",
"HlsManifests": [{"ManifestName": "index"}]
}
]
}
Best Practice
Use a single origin endpoint with multiple manifests (HLS + DASH) rather than multiple endpoints. This:
- Improves cache efficiency
- Simplifies management
Configuration Examples
1. CMAF Dual Manifest (Recommended)
Single CMAF endpoint with both HLS and DASH manifests.
{
"channel": {
"Type": "CMAF",
"Description": "Hybrid HLS/DASH delivery"
},
"originEndpoints": [{
"name": "hybrid-endpoint",
"ContainerType": "CMAF",
"StartoverWindowSeconds": 86400,
"HlsManifests": [{
"ManifestName": "index",
"ManifestWindowSeconds": 600,
"ProgramDateTimeIntervalSeconds": 60
}],
"DashManifests": [{
"ManifestName": "index",
"ManifestWindowSeconds": 600,
"MinUpdatePeriodSeconds": 2,
"MinBufferTimeSeconds": 30
}]
}]
}
2. Traditional HLS (TS Container)
Legacy HLS with MPEG-TS segments for maximum compatibility.
{
"originEndpoints": [{
"name": "hls-legacy",
"ContainerType": "TS",
"StartoverWindowSeconds": 3600,
"HlsManifests": [{
"ManifestName": "index",
"ManifestWindowSeconds": 360
}],
"TsUseAudioRenditionGroup": true
}]
}
3. Large DVR Window (14 Days)
Maximum DVR storage for event replay.
{
"originEndpoints": [{
"name": "event-replay",
"ContainerType": "CMAF",
"StartoverWindowSeconds": 1209600,
"HlsManifests": [{
"ManifestName": "index",
"ManifestWindowSeconds": 3600
}]
}]
}
4. Small DVR Window (1 Hour)
Minimal storage for cost optimization.
{
"originEndpoints": [{
"name": "live-only",
"ContainerType": "CMAF",
"StartoverWindowSeconds": 3600,
"HlsManifests": [{
"ManifestName": "index",
"ManifestWindowSeconds": 600
}]
}]
}
5. Multi-Origin Setup
Multiple endpoints for different use cases (not recommended for most scenarios).
{
"originEndpoints": [
{
"name": "primary-cmaf",
"ContainerType": "CMAF",
"StartoverWindowSeconds": 86400,
"HlsManifests": [{"ManifestName": "index"}],
"DashManifests": [{"ManifestName": "index"}]
},
{
"name": "fallback-ts",
"ContainerType": "TS",
"StartoverWindowSeconds": 3600,
"HlsManifests": [{"ManifestName": "index"}]
}
]
}
Quick Reference
- Modern streaming: CMAF with HLS + DASH
- Legacy HLS: TS container
- DVR window: Balance storage cost vs. replay needs
- Manifest window: Typically 10-60 minutes (600-3600 seconds)
- Segment duration: Set globally, not per-endpoint
{{ selectedEndpoint.summary }}
{{ selectedEndpoint.label }}
{{ selectedEndpoint.path }}
{{ selectedEndpoint.summary }}
curl -X POST https://api.stegawave.com/create \
-H "x-api-key: " \
-H "Content-Type: application/json" \
-d '{
"name": ,
"description": ,
"segmentDuration": ,
"input": {
},
"encoder": {
},
"packager": {
},
}'
- {{ insight }}
cURL Preview
{{ generatedCurl }}
Request Builder
Query Parameters
Request Body
Adjust values, toggle overlays, or trim outputs to match your workload.
Pipeline Diagram
{{ pipelineInputJson }}
{{ pipelineEncoderJson }}
{{ pipelinePackagerJson }}
{{ pipelineCdnJson }}
Sample Response
{{ sampleResponsePretty }}
Token Flow Diagram
Implementation Notes
- {{ tip }}