NorskInput.srt() method
Stream from a SRT source
Signature:
srt(settings: SrtInputSettings): Promise<SrtInputNode>;
Parameters
Example [02_srt_to_webrtc.ts]
Subscribe to an SRT source and generate local WebRTC output from it
export async function main() {
// Note how, other than the input line, this example and rtmp_to_webrtc
// are identical.
const norsk = await Norsk.connect();
const input = await norsk.input.srt(srtInputSettings);
const output = await norsk.output.whep({ id: "webrtc", ...webRtcServerConfig });
output.subscribe([{ source: input, sourceSelector: selectAV }]);
console.log(`WebRTC Player URL: ${output.playerUrl}`);
}
const srtInputSettings: SrtInputSettings = {
id: "srtInput",
host: "0.0.0.0",
port: 5001,
mode: "listener",
sourceName: "camera1",
};
Run the following command to generate example input at url srt://127.0.0.1:5001?pkt_size=1316
:
ffmpeg -v error -re -stream_loop -1 -i data/Weaving.ts -vcodec copy -codec copy -f mpegts -flush_packets 0 'srt://127.0.0.1:5001?pkt_size=1316'
Example [04_srt_to_hls_passthrough.ts]
Package an SRT stream into LL-HLS
export async function main() {
const norsk = await Norsk.connect();
const input = await norsk.input.srt(srtInputSettings);
// Receive an inbound stream and segment it as CMAF chunks for publication as HLS and DASH
// Note that as this is passthrough we don't necessarily know the bitrate of the stream
// for the HLS multi variant (master) playlist. Here we just set them by hand in the CMAF Audio and CMAF
// video segmenters. Other examples show how you can measure bitrates and use that in the multi variant playlist.
// If a transcode is happening (take a look at the various _to_ladder examples) then
// each streams will have well known bitrates that automatically flow through the workflow
// Note that from here on down, the code is identical to the code in srt_to_hls_passthrough
// With Norsk you only need to describe the desired media flow - it takes care of the differences
// between various input types.
const audioOutput = await norsk.output.cmafAudio({ id: "audio", bitrate: 20_000, ...segmentSettings });
const videoOutput = await norsk.output.cmafVideo({ id: "video", bitrate: 1_500_000, ...segmentSettings });
const mvOutput = await norsk.output.cmafMultiVariant({ id: "multi-variant", playlistName: "multi-variant", destinations });
mvOutput.subscribe([
{ source: audioOutput, sourceSelector: selectPlaylist },
{ source: videoOutput, sourceSelector: selectPlaylist },
]);
audioOutput.subscribe([{ source: input, sourceSelector: selectAudio }]);
videoOutput.subscribe([{ source: input, sourceSelector: selectVideo }]);
console.log(`Multi variant playlist: ${mvOutput.url}`);
void audioOutput.url().then(logMediaPlaylist("audio"));
void videoOutput.url().then(logMediaPlaylist("video"));
}
const destinations: CmafDestinationSettings[] =
[{ id: "local", type: "local", retentionPeriodSeconds: 10 }];
const segmentSettings: CmafOutputSettings = {
partDurationSeconds: 1.0,
segmentDurationSeconds: 4.0,
destinations
};
const srtInputSettings: SrtInputSettings = {
id: "srtInput",
host: "0.0.0.0",
port: 5001,
mode: "listener",
sourceName: "camera1",
};
function logMediaPlaylist(name: string): (url: string) => void {
return (
url => { console.log(`${name} playlistUrl: ${url}`); }
);
}
Run the following command to generate example input at url srt://127.0.0.1:5001?pkt_size=1316
:
ffmpeg -v error -re -stream_loop -1 -i data/InkDrop.ts -vcodec copy -codec copy -f mpegts -flush_packets 0 'srt://127.0.0.1:5001?pkt_size=1316'
Find Examples
Search for examples using srt in our examples repo.