<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>StreamAdmin-bloggen</title>
        <link>https://doc.geektech.no/streamadmin/blogg</link>
        <description>Guider og tips for live-streaming og multistreaming</description>
        <lastBuildDate>Sat, 02 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>nb</language>
        <copyright>GeekTech © 2026</copyright>
        <item>
            <title><![CDATA[Multistreaming til Twitch og YouTube samtidig — komplett guide]]></title>
            <link>https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube</link>
            <guid>https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube</guid>
            <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Slik sender du live til Twitch, YouTube og andre plattformer samtidig med StreamAdmin]]></description>
            <content:encoded><![CDATA[<p>Multistreaming — å sende den samme live-strømmen til flere plattformer samtidig — har gått fra å være en nisje-feature for store streamere til å bli noe alle profesjonelle innholdsskapere bør vurdere. I stedet for å velge mellom Twitch og YouTube, kan du nå nå publikum på begge samtidig uten å belaste din egen oppstrøms-båndbredde med flere parallelle utgående strømmer. Denne guiden går gjennom hvordan multistreaming fungerer rent teknisk, hvilke fallgruver du må kjenne til, og hvordan du setter det opp i StreamAdmin på en måte som faktisk er stabil under en flere timers økt.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hva-er-multistreaming-og-hvorfor-er-det-viktig">Hva er multistreaming, og hvorfor er det viktig?<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#hva-er-multistreaming-og-hvorfor-er-det-viktig" class="hash-link" aria-label="Direkte lenke til Hva er multistreaming, og hvorfor er det viktig?" title="Direkte lenke til Hva er multistreaming, og hvorfor er det viktig?" translate="no">​</a></h2>
<p>Multistreaming betyr i praksis at én enkelt utgående RTMP-strøm fra encoder-en din (typisk OBS, vMix eller en hardware-encoder) blir mottatt av en relé-tjener, som så videreformidler den samme strømmen til flere mål-plattformer parallelt. Du laster opp én strøm, men ender opp live på Twitch, YouTube, Kick og Facebook Gaming på én gang.</p>
<p>Den åpenbare fordelen er rekkevidde. Twitch dominerer fortsatt gaming-streaming i Norden, men YouTube har overlegen oppdagbarhet via søk og anbefalinger, mens Kick har vokst kraftig blant streamere som vil ha bedre inntektsdeling. Hvis du tvinger publikum til å velge én plattform, mister du seerne som er låst til en annen. Multistreaming fjerner dette valget.</p>
<p>Den mindre åpenbare fordelen er båndbreddeøkonomi. En typisk 1080p60-strøm på 6000 kbps krever omtrent 6,5 Mbit/s stabil oppstrøms-båndbredde. Hvis du sender direkte fra OBS til tre plattformer parallelt, snakker vi 19,5 Mbit/s — godt over hva mange norske fiber-abonnementer leverer stabilt mot internasjonale endepunkter. En relé-tjener i et datasenter med 1 Gbit/s symmetrisk uplink løser dette: du sender én gang opp, og tjeneren håndterer fan-out til de tre plattformene.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hvilke-plattformer-støtter-dette">Hvilke plattformer støtter dette?<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#hvilke-plattformer-st%C3%B8tter-dette" class="hash-link" aria-label="Direkte lenke til Hvilke plattformer støtter dette?" title="Direkte lenke til Hvilke plattformer støtter dette?" translate="no">​</a></h3>
<p>Alle de store streaming-plattformene aksepterer RTMP-input. Nedenfor er de viktigste destinasjonene og deres ingest-endepunkter:</p>
<ul>
<li class=""><strong>Twitch:</strong> <code>rtmp://live.twitch.tv/app/{stream-key}</code> — for nordiske streamere, bruk <code>live-arn.twitch.tv</code> eller <code>live-cph.twitch.tv</code> for nærmere ingest</li>
<li class=""><strong>YouTube Live:</strong> <code>rtmp://a.rtmp.youtube.com/live2/{stream-key}</code></li>
<li class=""><strong>Kick:</strong> <code>rtmps://{ingest}.kick.com/live/{stream-key}</code> — Kick bruker RTMPS (kryptert)</li>
<li class=""><strong>Facebook Live:</strong> <code>rtmps://live-api-s.facebook.com:443/rtmp/{stream-key}</code></li>
</ul>
<p>StreamAdmin støtter inntil 5 samtidige restream-destinasjoner per kilde-strøm, som dekker alle de praktisk relevante kombinasjonene.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tekniske-krav-og-båndbredde">Tekniske krav og båndbredde<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#tekniske-krav-og-b%C3%A5ndbredde" class="hash-link" aria-label="Direkte lenke til Tekniske krav og båndbredde" title="Direkte lenke til Tekniske krav og båndbredde" translate="no">​</a></h2>
<p>Før du i det hele tatt vurderer multistreaming, må du sjekke at hjemmelinjen din kan levere én stabil høykvalitets-strøm. En 1080p60-strøm på 6000 kbps trenger som tommelfingerregel 7-8 Mbit/s stabil oppstrøms for å gi headroom mot midlertidige nedganger. Hvis du har en typisk norsk 100/100-fiber, har du mer enn nok — men test alltid med en speedtest mot Stockholm eller Frankfurt, ikke mot lokale Telenor-servere, fordi du ofte ser kunstig høye tall mot norske endepunkter.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="twitch-sin-maks-bitrate">Twitch sin maks-bitrate<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#twitch-sin-maks-bitrate" class="hash-link" aria-label="Direkte lenke til Twitch sin maks-bitrate" title="Direkte lenke til Twitch sin maks-bitrate" translate="no">​</a></h3>
<p>Twitch oppgir 6000 kbps som maks anbefalt bitrate for både Affiliate og Partner-streamere. Dette er ikke et hardt tak, men du risikerer at strømmen blir avvist eller at transcoding-kvaliteten lider hvis du går over. For 1080p60 ligger sweet-spot mellom 4500-6000 kbps med x264-encoder satt til <code>medium</code> eller <code>slow</code> preset.</p>
<p>YouTube er mer fleksible og aksepterer opptil 9000 kbps for 1080p60 og høyere for 1440p/2160p. Hvis du multistreamer mot både Twitch og YouTube, må du tilpasse deg den laveste fellesnevneren — eller bruke en relé-tjener som transkoderer for å levere ulik bitrate til ulike destinasjoner.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cpu-eller-gpu-encoding">CPU eller GPU-encoding?<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#cpu-eller-gpu-encoding" class="hash-link" aria-label="Direkte lenke til CPU eller GPU-encoding?" title="Direkte lenke til CPU eller GPU-encoding?" translate="no">​</a></h3>
<p>For multistreaming via relé spiller dette mindre rolle, fordi du sender bare én strøm fra OBS. Med x264 på <code>medium</code>-preset og 1080p60 trenger du en relativt kraftig CPU (Ryzen 5 5600X eller bedre). Med NVENC på et moderne RTX-kort får du tilsvarende kvalitet med minimal CPU-belastning, og dette er ofte førstevalg for streamere som spiller krevende spill samtidig.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sette-opp-multistreaming-i-streamadmin">Sette opp multistreaming i StreamAdmin<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#sette-opp-multistreaming-i-streamadmin" class="hash-link" aria-label="Direkte lenke til Sette opp multistreaming i StreamAdmin" title="Direkte lenke til Sette opp multistreaming i StreamAdmin" translate="no">​</a></h2>
<p>StreamAdmin sin restream-arkitektur er bygget rundt MediaMTX som relé-server. Du sender én RTMP-strøm til StreamAdmin, og panelet håndterer fan-out til alle dine konfigurerte destinasjoner. Oppsettet i panelet er todelt: først definerer du dine destinasjoner (kilde-plattformer med stream-keys), deretter knytter du dem til en streaming-profil.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="steg-1-legg-til-destinasjoner">Steg 1: Legg til destinasjoner<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#steg-1-legg-til-destinasjoner" class="hash-link" aria-label="Direkte lenke til Steg 1: Legg til destinasjoner" title="Direkte lenke til Steg 1: Legg til destinasjoner" translate="no">​</a></h3>
<p>I StreamAdmin-panelet under "Restream Destinations" legger du til hver plattform du vil sende til. For hver destinasjon trenger du:</p>
<ul>
<li class="">En lesbar tittel (f.eks. "Twitch — Hovedkanal")</li>
<li class="">RTMP- eller RTMPS-URL til ingest-tjeneren</li>
<li class="">Stream-key fra plattformen</li>
</ul>
<p>Stream-keys lagres kryptert i databasen og dekrypteres bare når de skal sendes til MediaMTX-konfigurasjonen ved sesjonsstart. Dette er viktig hvis du gir andre tilgang til admin-panelet ditt — de vil aldri se nøklene i klartekst.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="steg-2-konfigurer-streaming-profilen">Steg 2: Konfigurer streaming-profilen<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#steg-2-konfigurer-streaming-profilen" class="hash-link" aria-label="Direkte lenke til Steg 2: Konfigurer streaming-profilen" title="Direkte lenke til Steg 2: Konfigurer streaming-profilen" translate="no">​</a></h3>
<p>En streaming-profil i StreamAdmin samler innstillinger for kvalitet, opptak og restream. Profil-eksempel:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Eksempel på StreamAdmin streaming-profil</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">profile_name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Hovedstrøm 1080p60"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">input_format</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> rtmp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">input_bitrate_max</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">6000</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">recording</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">format</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> mp4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">segment_duration</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">3600</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">restream_targets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> twitch_main</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> youtube_main</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> kick_main</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">qos_monitoring</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><br></span></code></pre></div></div>
<p>Når du så starter strømmen din mot StreamAdmin sin RTMP-ingest, blir den automatisk videresendt til de tre destinasjonene parallelt.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="steg-3-obs-konfigurasjon">Steg 3: OBS-konfigurasjon<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#steg-3-obs-konfigurasjon" class="hash-link" aria-label="Direkte lenke til Steg 3: OBS-konfigurasjon" title="Direkte lenke til Steg 3: OBS-konfigurasjon" translate="no">​</a></h3>
<p>I OBS bytter du Settings → Stream til "Custom..." og fyller inn:</p>
<ul>
<li class=""><strong>Server:</strong> <code>rtmp://din-streamadmin-server.no/live</code> (eller hva du har konfigurert)</li>
<li class=""><strong>Stream Key:</strong> Din StreamAdmin stream-key (32-tegn hex generert ved profil-opprettelse)</li>
</ul>
<p>Under Output → Streaming velger du encoder (x264 eller NVENC), bitrate (4500-6000 kbps for 1080p60 mot Twitch som laveste fellesnevner), keyframe-interval på 2 sekunder, og rate control CBR. CBR (Constant Bitrate) er obligatorisk for de fleste streaming-plattformer — VBR kan føre til ujevn kvalitet og buffering hos seerne.</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Anbefalte OBS Output-innstillinger for multistream</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">output_mode = Advanced</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">encoder = NVENC H.264 (eller x264 på medium preset)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">rate_control = CBR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">bitrate = 6000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">keyframe_interval = 2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">preset = Quality (NVENC) eller medium (x264)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">profile = high</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">b_frames = 2</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="kvalitetsinnstillinger-per-plattform">Kvalitetsinnstillinger per plattform<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#kvalitetsinnstillinger-per-plattform" class="hash-link" aria-label="Direkte lenke til Kvalitetsinnstillinger per plattform" title="Direkte lenke til Kvalitetsinnstillinger per plattform" translate="no">​</a></h2>
<p>En av de mest undervurderte aspektene ved multistreaming er at hver plattform har sine egne anbefalte spesifikasjoner. Å lande på en konfigurasjon som fungerer godt på alle samtidig krever at du forstår hvor begrensningene ligger.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="twitch">Twitch<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#twitch" class="hash-link" aria-label="Direkte lenke til Twitch" title="Direkte lenke til Twitch" translate="no">​</a></h3>
<p>Som nevnt: 6000 kbps maks bitrate, 1080p60 maks oppløsning. Twitch transcoder ikke automatisk for ikke-Partner-streamere, så seere med dårlig båndbredde kan ikke senke kvaliteten — de mister strømmen helt. Dette taler for å holde bitrate i den lavere enden (4500-5000 kbps) med mindre du har et veldig stabilt publikum.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="youtube-live">YouTube Live<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#youtube-live" class="hash-link" aria-label="Direkte lenke til YouTube Live" title="Direkte lenke til YouTube Live" translate="no">​</a></h3>
<p>YouTube transcoder alltid og er mye mer tolerante. Du kan trygt sende 9000 kbps for 1080p60 hvis kanalen din støtter det, og 1440p eller 4K hvis du har båndbredde og maskinvare. Hvis du multistreamer er det imidlertid greit å sende samme strøm til alle — å ha to separate encoder-utganger fra OBS koster CPU/GPU og er sjelden verdt det.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="kick">Kick<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#kick" class="hash-link" aria-label="Direkte lenke til Kick" title="Direkte lenke til Kick" translate="no">​</a></h3>
<p>Kick aksepterer opptil 8000 kbps og 1080p60. De bruker RTMPS (port 443) i stedet for RTMP, så sjekk at relé-tjeneren din støtter dette. StreamAdmin via MediaMTX støtter både RTMP og RTMPS-output.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="facebook-live">Facebook Live<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#facebook-live" class="hash-link" aria-label="Direkte lenke til Facebook Live" title="Direkte lenke til Facebook Live" translate="no">​</a></h3>
<p>Facebook har strenge krav til keyframe-interval (maks 2 sekunder) og foretrekker H.264 high-profile. Bitrate-grensen ligger på 4000 kbps for 1080p, så hvis Facebook er en av destinasjonene dine bør du holde hovedstrømmen på 4000 kbps eller la relé-tjeneren transkode ned for Facebook spesifikt.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="vanlige-feil-og-feilsøking">Vanlige feil og feilsøking<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#vanlige-feil-og-feils%C3%B8king" class="hash-link" aria-label="Direkte lenke til Vanlige feil og feilsøking" title="Direkte lenke til Vanlige feil og feilsøking" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="stream-droppet-eller-frame-drops">"Stream droppet" eller frame drops<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#stream-droppet-eller-frame-drops" class="hash-link" aria-label="Direkte lenke til &quot;Stream droppet&quot; eller frame drops" title="Direkte lenke til &quot;Stream droppet&quot; eller frame drops" translate="no">​</a></h3>
<p>Den hyppigste årsaken er ustabil oppstrøms-båndbredde mellom deg og StreamAdmin sin ingest-server. Sjekk OBS Stats-panelet (View → Stats) under en aktiv strøm. Hvis "Dropped frames (network)" øker, har du nettverksproblem. Test mot en server geografisk nær deg, og vurder å bruke SRT i stedet for RTMP — SRT på port 8890 i StreamAdmin håndterer pakketap mye bedre enn RTMP og er nesten alltid å foretrekke for ustabile linjer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="én-plattform-feiler-andre-fungerer">Én plattform feiler, andre fungerer<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#%C3%A9n-plattform-feiler-andre-fungerer" class="hash-link" aria-label="Direkte lenke til Én plattform feiler, andre fungerer" title="Direkte lenke til Én plattform feiler, andre fungerer" translate="no">​</a></h3>
<p>Hvis Twitch fungerer men YouTube ikke kommer på lufta, er det nesten alltid feil stream-key eller utløpt key. YouTube genererer ny stream-key hver gang du oppretter en ny "Stream" i Studio — gamle keys blir invalidert. Sjekk at key-en i StreamAdmin er den nyeste. For Kick er det også vanlig at RTMPS-sertifikater må valideres — slå av peer-verifisering midlertidig i MediaMTX hvis du får TLS-feil under testing.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lyd-problemer-på-en-plattform-men-ikke-en-annen">Lyd-problemer på en plattform men ikke en annen<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#lyd-problemer-p%C3%A5-en-plattform-men-ikke-en-annen" class="hash-link" aria-label="Direkte lenke til Lyd-problemer på en plattform men ikke en annen" title="Direkte lenke til Lyd-problemer på en plattform men ikke en annen" translate="no">​</a></h3>
<p>Sjekk at OBS sender lyd som AAC, 44.1 eller 48 kHz, og 160 kbps eller høyere. Noen plattformer (særlig YouTube) er pirkete på dette. Hvis du har nedmiks via OBS Audio Mixer, sjekk at master-bus ikke clipper.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="forskjellig-latens-mellom-plattformer">Forskjellig latens mellom plattformer<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#forskjellig-latens-mellom-plattformer" class="hash-link" aria-label="Direkte lenke til Forskjellig latens mellom plattformer" title="Direkte lenke til Forskjellig latens mellom plattformer" translate="no">​</a></h3>
<p>Helt normalt. Twitch har Low Latency Mode som gir 2-4 sekunders forsinkelse, mens YouTube ofte ligger på 10-20 sekunder default. Kick og Facebook varierer. Du kan ikke synkronisere disse — hvis du driver med interaktive segmenter (chat-respons, giveaways) må du velge én primær plattform å reagere mot.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qoe-monitorering-ikke-streame-i-blinde">QoE-monitorering: ikke streame i blinde<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#qoe-monitorering-ikke-streame-i-blinde" class="hash-link" aria-label="Direkte lenke til QoE-monitorering: ikke streame i blinde" title="Direkte lenke til QoE-monitorering: ikke streame i blinde" translate="no">​</a></h2>
<p>StreamAdmin samler QoE-metrics (Quality of Experience) i sanntid: bitrate-stabilitet, frame drops, viewer-tracking per destinasjon, og latensestimater. Bruk dette aktivt — hvis du ser at YouTube viser "Good" mens Twitch viser "Poor" gjennom hele økten, er det enten Twitch sin ingest som har problemer den dagen, eller du har valgt en geografisk dårlig ingest-region. Bytt til en annen Twitch-region (f.eks. <code>live-arn.twitch.tv</code> for Stockholm) og se om problemet forsvinner.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="avslutning">Avslutning<a href="https://doc.geektech.no/streamadmin/blogg/multistreaming-twitch-youtube#avslutning" class="hash-link" aria-label="Direkte lenke til Avslutning" title="Direkte lenke til Avslutning" translate="no">​</a></h2>
<p>Multistreaming er ikke lenger et "nice to have" for streamere som vil bygge publikum profesjonelt — det er standard. Med StreamAdmin sin relé-baserte arkitektur slipper du å belaste hjemmelinjen din med flere parallelle utgående strømmer, og du får sentralisert kontroll over destinasjoner, kvalitet og overvåking. Den største feilen du kan gjøre er å multistreame uten å monitorere QoE — å sende dårlig strøm til tre plattformer samtidig er verre enn å sende god strøm til én.</p>
<p>Vil du teste oppsettet? Opprett en konto på <a href="https://streamadmin.no/" target="_blank" rel="noopener noreferrer" class="">streamadmin.no</a> og følg den utvidede dokumentasjonen på <a href="https://doc.geektech.no/streamadmin" target="_blank" rel="noopener noreferrer" class="">doc.geektech.no/streamadmin</a>. Du kan også kikke på en faktisk produksjonskanal som bruker oppsettet på <a href="https://twitch.tv/skynett81" target="_blank" rel="noopener noreferrer" class="">twitch.tv/skynett81</a>. Spørsmål eller behov for hjelp? Bli med i <a href="https://discord.gg/KxauJWZBqd" target="_blank" rel="noopener noreferrer" class="">Discord-serveren vår</a> — der finner du både utviklere og andre streamere som har vært gjennom de samme oppsettene.</p>]]></content:encoded>
            <category>multistreaming</category>
            <category>twitch</category>
            <category>youtube</category>
            <category>live</category>
            <category>obs</category>
        </item>
        <item>
            <title><![CDATA[NOALBS og bitrate-tuning for stabile streams]]></title>
            <link>https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning</link>
            <guid>https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning</guid>
            <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Guide til å sette opp NOALBS med StreamAdmin for automatisk scenebytting og bitratestyring]]></description>
            <content:encoded><![CDATA[<p>Hvis du noen gang har streamet IRL fra en mobilforbindelse, fra en bil i bevegelse, eller bare fra et hus med litt for mye trafikk på Wi-Fi-en, vet du at variabel båndbredde er fienden til en stabil strøm. Du sender 6000 kbps i ett øyeblikk, og 1500 kbps to sekunder senere. Resultatet for seerne er en strøm som fryser, hopper, eller blir helt borte. NOALBS — Network Operator's Active Loss Black Sheep — er et åpent-kildekode-verktøy som løser dette ved å automatisk bytte OBS-scener basert på sanntids-kvalitetsdata fra streaming-tjeneren din. Denne guiden går gjennom hvordan du setter opp NOALBS sammen med StreamAdmin for en virkelig stabil strøm-opplevelse.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hva-er-noalbs-og-hvorfor-er-det-relevant">Hva er NOALBS, og hvorfor er det relevant?<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#hva-er-noalbs-og-hvorfor-er-det-relevant" class="hash-link" aria-label="Direkte lenke til Hva er NOALBS, og hvorfor er det relevant?" title="Direkte lenke til Hva er NOALBS, og hvorfor er det relevant?" translate="no">​</a></h2>
<p>NOALBS er et åpen kildekode-verktøy skrevet i Rust som overvåker streaming-helse i sanntid og automatisk reagerer på fall i bitrate eller pakketap. Verktøyet ble opprinnelig utviklet for IRL-streaming-miljøet, der streamere bruker mobilforbindelser som varierer enormt avhengig av bevegelse, været, og hvor mange andre som er på samme celletårn.</p>
<p>Kjerneideen er enkel: hvis bitraten din faller under en gitt terskel, betyr det at strømmen er i ferd med å bli ustabil. I stedet for å la seerne se en frosset eller forvrengt strøm, bytter NOALBS automatisk til en "low bitrate"-scene — typisk en statisk "Stand by, network issues"-overlay — og bytter tilbake automatisk når bitraten er stabilisert.</p>
<p>Verktøyet fungerer ved å lese metrikker fra streaming-tjeneren (StreamAdmin/MediaMTX i vårt tilfelle) og kommunisere med OBS via OBS WebSocket-protokollen. Det er gratis, åpen kildekode, og er bredt brukt av profesjonelle IRL-streamere på Twitch og YouTube.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="når-trenger-du-noalbs">Når trenger du NOALBS?<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#n%C3%A5r-trenger-du-noalbs" class="hash-link" aria-label="Direkte lenke til Når trenger du NOALBS?" title="Direkte lenke til Når trenger du NOALBS?" translate="no">​</a></h3>
<ul>
<li class=""><strong>Mobil-streaming (4G/5G):</strong> Helt nødvendig. Bitraten kan svinge fra 8000 til 800 kbps på et kvartal i bevegelse.</li>
<li class=""><strong>Hjemmenettverk delt med mange:</strong> Hvis det skjer noe rart med Wi-Fi-en eller noen i husholdningen plutselig laster ned 50 GB, vil NOALBS skjerme strømmen din.</li>
<li class=""><strong>Backup-linje failover:</strong> Hvis du har dual-WAN setup (fiber + 4G failover), kan NOALBS varsle om degradering og bytte scene før seerne merker det.</li>
<li class=""><strong>Studio-streaming på stabil fiber:</strong> Trolig overkill, men kan fortsatt være nyttig som beskyttelse mot uventede ISP-glitches.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installasjon-og-grunnkonfigurasjon">Installasjon og grunnkonfigurasjon<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#installasjon-og-grunnkonfigurasjon" class="hash-link" aria-label="Direkte lenke til Installasjon og grunnkonfigurasjon" title="Direkte lenke til Installasjon og grunnkonfigurasjon" translate="no">​</a></h2>
<p>NOALBS distribueres som binærer for Linux, macOS og Windows fra GitHub-repository-et. Hvis du kjører streaming-PC-en på Windows (som de fleste streamere gjør), last ned siste Windows-binær og pakk den ut til en mappe der du har skrivetilgang.</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Eksempel: PowerShell på Windows</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mkdir C:\noalbs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">cd C:\noalbs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Last ned noalbs.exe og config.json fra GitHub releases</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># https://github.com/715209/nginx-obs-automatic-low-bitrate-switcher/releases</span><br></span></code></pre></div></div>
<p>Konfigurasjonsfilen er en JSON-fil med fornuftige defaults, men du må fylle inn dine egne verdier for OBS WebSocket og streaming-server-endepunkt:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"user"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"id"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"din-streamer-id"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"password_hash"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">""</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"switcher"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"bitrate_switcher_enabled"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"only_switch_when_streaming"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"instantly_switch_on_recover"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"auto_switch_notification"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"triggers"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"low"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">1500</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"rtt"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2500</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"offline"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">200</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"switching_scenes"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"normal"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Live"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"low"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"LowBitrate"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"offline"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Offline"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"software"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"useObs"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"obs"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"host"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"localhost"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"password"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"din-obs-websocket-passord"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"port"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">4455</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"streamServers"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Nginx"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"StreamAdmin"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"stats_url"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://din-streamadmin.no/api/stats"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"application"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"live"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"key"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"din-stream-key"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="obs-websocket-må-være-aktivert">OBS WebSocket må være aktivert<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#obs-websocket-m%C3%A5-v%C3%A6re-aktivert" class="hash-link" aria-label="Direkte lenke til OBS WebSocket må være aktivert" title="Direkte lenke til OBS WebSocket må være aktivert" translate="no">​</a></h3>
<p>Fra OBS 28 og oppover er WebSocket-pluginen innebygget. Aktiver den under Tools → WebSocket Server Settings, sett et passord, og noter port-nummeret (default 4455). NOALBS bruker dette for å sende scenebytte-kommandoer.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="integrasjon-med-streamadmin">Integrasjon med StreamAdmin<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#integrasjon-med-streamadmin" class="hash-link" aria-label="Direkte lenke til Integrasjon med StreamAdmin" title="Direkte lenke til Integrasjon med StreamAdmin" translate="no">​</a></h2>
<p>StreamAdmin eksponerer et NOALBS-kompatibelt stats-endepunkt som rapporterer sanntids-bitrate og pakketap for hver aktive strøm. Endepunktet ligger på <code>/api/v1/streams/{stream-id}/noalbs-stats</code> og krever en API-token for autentisering.</p>
<p>I admin-panelet under "Streaming → API Tokens" oppretter du en token spesifikt for NOALBS-bruk. Disse tokens har read-only tilgang til stats-endepunkter og kan revoceres uavhengig av andre integrasjoner.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># StreamAdmin-side konfigurasjon</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">noalbs_integration</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">poll_interval_seconds</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">metrics</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> bitrate_kbps</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> dropped_frames_per_minute</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> rtt_ms</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> packet_loss_percent</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">triggers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">notify_on_threshold_breach</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">threshold_breach_webhook</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">//hooks.slack.com/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">...</span><br></span></code></pre></div></div>
<p>Når NOALBS poller dette endepunktet (default hvert 2. sekund), får den et JSON-svar med nåværende bitrate, RTT (round-trip-time) og pakketap. Den sammenligner mot terskelverdiene i config og handler deretter.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bitrate-terskelverdier-hva-bør-du-sette">Bitrate-terskel­verdier: hva bør du sette?<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#bitrate-terskelverdier-hva-b%C3%B8r-du-sette" class="hash-link" aria-label="Direkte lenke til Bitrate-terskel­verdier: hva bør du sette?" title="Direkte lenke til Bitrate-terskel­verdier: hva bør du sette?" translate="no">​</a></h2>
<p>Default-verdiene som kommer med NOALBS er konservative og funker greit for de fleste, men terskelverdier bør tunes til din spesifikke setup. La oss gå gjennom hva hver verdi betyr:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="low--den-kritiske-terskelen"><code>low</code> — den kritiske terskelen<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#low--den-kritiske-terskelen" class="hash-link" aria-label="Direkte lenke til low--den-kritiske-terskelen" title="Direkte lenke til low--den-kritiske-terskelen" translate="no">​</a></h3>
<p>Dette er bitraten under hvilken NOALBS bytter til "low bitrate"-scene. Default er 800 kbps, men dette er for lavt for moderne 1080p-streaming.</p>
<p>For en 1080p60-strøm normalt på 6000 kbps:</p>
<ul>
<li class=""><strong>Konservativ:</strong> <code>low: 3500</code> — bytter scene tidlig, før seerne merker noe</li>
<li class=""><strong>Balansert:</strong> <code>low: 2500</code> — gir litt buffer, bytter ved tydelige problemer</li>
<li class=""><strong>Aggressiv:</strong> <code>low: 1500</code> — bytter bare ved alvorlige problemer (godt for IRL hvor svingninger er vanlig)</li>
</ul>
<p>For 720p-streaming kan du senke disse med ca 40-50% (siden 720p normalt streames på 3500-4500 kbps).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rtt--round-trip-time"><code>rtt</code> — round-trip-time<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#rtt--round-trip-time" class="hash-link" aria-label="Direkte lenke til rtt--round-trip-time" title="Direkte lenke til rtt--round-trip-time" translate="no">​</a></h3>
<p>Dette er forsinkelsen på pakker mellom encoder og streaming-server. Høy RTT indikerer nettverkstrengsel selv om bitraten holder seg oppe. Default 2500 ms er en god start; for IRL-streamere bør du senke til 1500 ms for tidligere varsling.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="offline--komplett-tap"><code>offline</code> — komplett tap<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#offline--komplett-tap" class="hash-link" aria-label="Direkte lenke til offline--komplett-tap" title="Direkte lenke til offline--komplett-tap" translate="no">​</a></h3>
<p>Hvis bitraten faller under denne (default 200 kbps), regnes strømmen som offline og NOALBS bytter til en dedikert "Offline"-scene. Denne brukes når forbindelsen er helt borte, typisk i tunneller eller døde soner.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hysterese-unngå-scene-flapping">Hysterese: unngå "scene-flapping"<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#hysterese-unng%C3%A5-scene-flapping" class="hash-link" aria-label="Direkte lenke til Hysterese: unngå &quot;scene-flapping&quot;" title="Direkte lenke til Hysterese: unngå &quot;scene-flapping&quot;" translate="no">​</a></h3>
<p>Det viktigste å forstå er at NOALBS har innebygget hysterese — den bytter ikke tilbake til normal scene før bitraten har vært stabil over terskelen i en gitt periode (default 5-10 sekunder). Uten dette ville scenen flippe frem og tilbake hvert sekund ved marginale forbindelser.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token property">"triggers"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"low"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2500</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"rtt"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"offline"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">200</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"switching_delay"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"recovery_delay"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">10</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scene-bytting-og-hva-low-bitrate-scenen-bør-inneholde">Scene-bytting og hva "low bitrate"-scenen bør inneholde<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#scene-bytting-og-hva-low-bitrate-scenen-b%C3%B8r-inneholde" class="hash-link" aria-label="Direkte lenke til Scene-bytting og hva &quot;low bitrate&quot;-scenen bør inneholde" title="Direkte lenke til Scene-bytting og hva &quot;low bitrate&quot;-scenen bør inneholde" translate="no">​</a></h2>
<p>Den vanligste feilen førstegangsbrukere gjør er å lage en kjedelig "stand by"-scene som bare viser tekst på sort bakgrunn. Dette får seerne til å forlate strømmen umiddelbart. Den bedre tilnærmingen er å lage en scene som:</p>
<ol>
<li class=""><strong>Beholder lyden fra mikrofonen din</strong> — du kan fortsatt snakke selv om kamera er borte</li>
<li class=""><strong>Viser en lavbitrate-egnet visuell</strong> — et statisk bilde, en saktegående animasjon, eller en pre-renderet loop</li>
<li class=""><strong>Kommuniserer hva som skjer</strong> — "Network catching up, hold tight!" er bedre enn ingenting</li>
<li class=""><strong>Beholder chat-overlay</strong> — så interaksjonen kan fortsette</li>
</ol>
<p>For IRL-streamere er det vanlig å ha en mini-galleri-scene med tidligere bilder fra strømmen, eller en kart-overlay som viser hvor du er. Dette holder seerne engasjert mens forbindelsen kommer tilbake.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="srt-i-stedet-for-rtmp-for-ustabile-linjer">SRT i stedet for RTMP for ustabile linjer<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#srt-i-stedet-for-rtmp-for-ustabile-linjer" class="hash-link" aria-label="Direkte lenke til SRT i stedet for RTMP for ustabile linjer" title="Direkte lenke til SRT i stedet for RTMP for ustabile linjer" translate="no">​</a></h2>
<p>Et viktig poeng: NOALBS hjelper deg å håndtere konsekvensene av ustabil båndbredde, men det fikser ikke roten av problemet. Hvis du streamer fra en mobil-forbindelse, bør du bruke SRT i stedet for RTMP fra OBS til StreamAdmin.</p>
<p>SRT (Secure Reliable Transport) er designet spesifikt for upålitelige nettverk. Det legger til foroverkorreksjon (FEC) og pakke-retransmisjon, som betyr at midlertidige pakketap håndteres på protokoll-nivå i stedet for å manifestere seg som video-glitches. StreamAdmin støtter SRT på port 8890.</p>
<div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># OBS Custom Service for SRT mot StreamAdmin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">service = Custom...</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">server = srt://din-streamadmin.no:8890?streamid=publish:din-stream-key&amp;latency=2000000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">streamkey = (la stå tom — streamid håndterer dette)</span><br></span></code></pre></div></div>
<p>Latency-parameteren (2000000 mikrosekunder = 2 sekunder) er buffer-størrelsen som SRT bruker for å reordre pakker. Høyere verdier gir mer robusthet mot pakketap, men også høyere total latens. For IRL er 2-4 sekunder en god balanse.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="vanlige-feil-og-feilsøking">Vanlige feil og feilsøking<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#vanlige-feil-og-feils%C3%B8king" class="hash-link" aria-label="Direkte lenke til Vanlige feil og feilsøking" title="Direkte lenke til Vanlige feil og feilsøking" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="noalbs-bytter-aldri-scene">NOALBS bytter aldri scene<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#noalbs-bytter-aldri-scene" class="hash-link" aria-label="Direkte lenke til NOALBS bytter aldri scene" title="Direkte lenke til NOALBS bytter aldri scene" translate="no">​</a></h3>
<p>Sjekk i denne rekkefølgen:</p>
<ol>
<li class="">OBS WebSocket aktivert og passordet er riktig i config.json</li>
<li class="">Scene-navn i config matcher EKSAKT scene-navnene i OBS (case-sensitive)</li>
<li class=""><code>bitrate_switcher_enabled: true</code> er satt</li>
<li class="">NOALBS-loggen viser at den faktisk poller stats-endepunktet</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="scene-flipper-frem-og-tilbake-konstant">Scene flipper frem og tilbake konstant<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#scene-flipper-frem-og-tilbake-konstant" class="hash-link" aria-label="Direkte lenke til Scene flipper frem og tilbake konstant" title="Direkte lenke til Scene flipper frem og tilbake konstant" translate="no">​</a></h3>
<p>Du har for høy <code>low</code>-terskel sammenlignet med din normale bitrate, eller for lav <code>recovery_delay</code>. Øk <code>recovery_delay</code> til 15-20 sekunder, eller senk <code>low</code> med 500-1000 kbps.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="noalbs-får-ikke-kontakt-med-streamadmin-stats-endepunkt">NOALBS får ikke kontakt med StreamAdmin stats-endepunkt<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#noalbs-f%C3%A5r-ikke-kontakt-med-streamadmin-stats-endepunkt" class="hash-link" aria-label="Direkte lenke til NOALBS får ikke kontakt med StreamAdmin stats-endepunkt" title="Direkte lenke til NOALBS får ikke kontakt med StreamAdmin stats-endepunkt" translate="no">​</a></h3>
<p>API-token kan være feil eller utløpt, eller du står bak en streng firewall som blokkerer utgående HTTPS-kall. Test endepunktet manuelt med curl:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Authorization: Bearer din-token"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  https://din-streamadmin.no/api/v1/streams/din-stream-id/noalbs-stats</span><br></span></code></pre></div></div>
<p>Hvis du får 200 OK med JSON-data, er konfigurasjonen riktig.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bitrate-data-ser-ut-til-å-være-forsinket">Bitrate-data ser ut til å være forsinket<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#bitrate-data-ser-ut-til-%C3%A5-v%C3%A6re-forsinket" class="hash-link" aria-label="Direkte lenke til Bitrate-data ser ut til å være forsinket" title="Direkte lenke til Bitrate-data ser ut til å være forsinket" translate="no">​</a></h3>
<p>Default poll-interval på 2 sekunder er en god balanse, men for IRL hvor situasjonen endrer seg raskt kan du senke til 1 sekund. Ikke gå lavere — det belaster bare StreamAdmin sitt API uten å gi merverdi.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="qoe-data-som-tilbakemelding">QoE-data som tilbakemelding<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#qoe-data-som-tilbakemelding" class="hash-link" aria-label="Direkte lenke til QoE-data som tilbakemelding" title="Direkte lenke til QoE-data som tilbakemelding" translate="no">​</a></h2>
<p>StreamAdmin samler QoE-metrics over tid og viser dette som grafer i admin-panelet. Etter en streaming-økt bør du se på "Bitrate over Time"-grafen og sjekke når NOALBS faktisk byttet scener. Hvis du ser at den byttet 47 ganger på en time, er terskelverdiene dine for aggressive — eller du har et nettverksproblem som krever løsning på protokoll-nivå (SRT) i stedet for application-nivå (NOALBS).</p>
<p>Den ideelle strømmen har 0-2 scenebytter per time, og bare ved faktiske, merkbare forbindelsesproblemer. Hvis du oppnår dette, har du en konfig som beskytter seerne uten å være overdrevent reaktiv.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="avslutning">Avslutning<a href="https://doc.geektech.no/streamadmin/blogg/noalbs-bitrate-tuning#avslutning" class="hash-link" aria-label="Direkte lenke til Avslutning" title="Direkte lenke til Avslutning" translate="no">​</a></h2>
<p>NOALBS er et nesten obligatorisk verktøy for enhver streamer som ikke har 100% pålitelig fiber-forbindelse. Det er gratis, åpen kildekode, og integrerer rent med StreamAdmin via et dedikert stats-endepunkt. Den største fellen er å bruke default-terskelverdier uten å tune dem — bruk noen økter på å observere din typiske bitrate-profil, og still inn NOALBS deretter.</p>
<p>For full dokumentasjon av StreamAdmin sin NOALBS-integrasjon, se <a href="https://doc.geektech.no/streamadmin" target="_blank" rel="noopener noreferrer" class="">doc.geektech.no/streamadmin</a>. Vil du komme i gang med StreamAdmin? Registrer deg på <a href="https://streamadmin.no/" target="_blank" rel="noopener noreferrer" class="">streamadmin.no</a>. Har du tunet en NOALBS-konfig som funker spesielt godt for ditt setup, eller har spørsmål om SRT-latency-tuning? Bli med i <a href="https://discord.gg/KxauJWZBqd" target="_blank" rel="noopener noreferrer" class="">Discord-serveren vår</a> — vi snakker mye om dette der.</p>]]></content:encoded>
            <category>noalbs</category>
            <category>bitrate</category>
            <category>obs</category>
            <category>srt</category>
            <category>streamadmin</category>
        </item>
        <item>
            <title><![CDATA[VOD-pipeline fra A til Å — lagring, transkoding og distribusjon av stream-opptak]]></title>
            <link>https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide</link>
            <guid>https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide</guid>
            <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Slik setter du opp en komplett VOD-arbeidsflyt med StreamAdmin for arkivering og distribusjon]]></description>
            <content:encoded><![CDATA[<p>En live-strøm er over på sekundet du går av lufta. En VOD (Video On Demand) lever videre, blir søkbar, gjenbrukes på YouTube og kan klippes til TikTok eller Shorts. For seriøse streamere er VOD-arkivet ofte mer verdifullt enn selve live-økten — men bare hvis pipelinen er bygget riktig fra starten. Denne guiden går gjennom hvordan du setter opp en komplett VOD-arbeidsflyt med StreamAdmin: hvordan du fanger råopptak, transkoder til distribusjonsklare formater med FFmpeg, og distribuerer videre til YouTube, egen CDN eller dedikerte arkivtjenere.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hva-er-en-vod-pipeline-egentlig">Hva er en VOD-pipeline, egentlig?<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#hva-er-en-vod-pipeline-egentlig" class="hash-link" aria-label="Direkte lenke til Hva er en VOD-pipeline, egentlig?" title="Direkte lenke til Hva er en VOD-pipeline, egentlig?" translate="no">​</a></h2>
<p>Begrepet "VOD-pipeline" høres komplisert ut, men er bare en kjede av automatiserte steg som tar et live-opptak og gjør det klart for konsum etter at strømmen er avsluttet. En typisk pipeline ser slik ut:</p>
<ol>
<li class=""><strong>Opptak</strong> — Live-strømmen fanges opp samtidig som den sendes til seere, og lagres som en flat fil (TS, FLV eller MP4)</li>
<li class=""><strong>Segmentering</strong> — Lange opptak deles i håndterbare biter (timesvis eller per scene)</li>
<li class=""><strong>Transkoding</strong> — Råfilen kjøres gjennom FFmpeg for å produsere distribusjonsklare formater (H.264 MP4 i ulike oppløsninger, eventuelt HLS-segmenter)</li>
<li class=""><strong>Generering av metadata</strong> — Thumbnails, varighet, sceneskift-indeks</li>
<li class=""><strong>Distribusjon</strong> — Filene flyttes til CDN, lastes opp til YouTube via API, eller publiseres på egen webserver</li>
<li class=""><strong>Arkivering</strong> — Råfilen flyttes til kald lagring (S3 Glacier, Backblaze B2 eller eget NAS)</li>
</ol>
<p>Uten en pipeline ender du med en mappe full av navnløse <code>.flv</code>-filer som du må manuelt konvertere hver gang du skal bruke dem. Med en pipeline er dette automatisk fra det øyeblikket du klikker "End Stream" i OBS.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="innspillingsformater-og-kvalitet">Innspillingsformater og kvalitet<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#innspillingsformater-og-kvalitet" class="hash-link" aria-label="Direkte lenke til Innspillingsformater og kvalitet" title="Direkte lenke til Innspillingsformater og kvalitet" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hvilket-format-bør-du-ta-opp-i">Hvilket format bør du ta opp i?<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#hvilket-format-b%C3%B8r-du-ta-opp-i" class="hash-link" aria-label="Direkte lenke til Hvilket format bør du ta opp i?" title="Direkte lenke til Hvilket format bør du ta opp i?" translate="no">​</a></h3>
<p>For live-streaming-opptak er det tre hovedformater som er aktuelle:</p>
<p><strong>FLV (Flash Video)</strong> — Dette er det "native" RTMP-formatet og brukes av OBS og MediaMTX som standard. Fordeler: lite overhead, robust mot brå avbrudd (filen blir spillbar selv om du krasjer midt i opptaket). Ulemper: dårlig kompatibilitet med moderne videoredigeringsprogrammer.</p>
<p><strong>MPEG-TS (Transport Stream)</strong> — Brukt for HLS og kringkastingsformater. Fordel: håndterer pakketap og avbrudd bedre enn nesten noe annet format, og er trivielt å segmentere. Ulempe: krever ofte transkoding før det kan redigeres.</p>
<p><strong>MP4 (med fragmentert moov-atom)</strong> — Det moderne valget. Bruker <code>-movflags +frag_keyframe+empty_moov</code> i FFmpeg slik at filen blir spillbar selv om opptaket avbrytes uventet. Fordel: direkte avspillbar, redigerbar, distribusjonsklar. Ulempe: marginalt mer overhead enn FLV/TS.</p>
<p>For StreamAdmin-pipelines anbefaler vi MP4 med fragmenterte atomer som standard, og fall-back til TS hvis du har spesielt ustabile innspillingstjenere.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bitrate-og-oppløsning-for-opptak">Bitrate og oppløsning for opptak<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#bitrate-og-oppl%C3%B8sning-for-opptak" class="hash-link" aria-label="Direkte lenke til Bitrate og oppløsning for opptak" title="Direkte lenke til Bitrate og oppløsning for opptak" translate="no">​</a></h3>
<p>Et viktig prinsipp: <strong>opptak skal ALDRI ha lavere bitrate enn det du sender til live</strong>. Hvis du sender 6000 kbps til Twitch og tar opp på 4000 kbps lokalt, har du destruert 33% av kvaliteten på arkivet ditt for å spare diskplass. Diskplass er billig — gjenopptak er umulig.</p>
<p>For seriøse arkiver bør du faktisk ta opp i <strong>høyere</strong> kvalitet enn live-strømmen. Hvis live-strømmen er begrenset til 6000 kbps for Twitch, ta opp lokalt på 12000-15000 kbps med samme oppløsning. Når du så transkoder for distribusjon kan du senke til ønsket nivå, men du har den høykvalitets-mesteren liggende.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatisk-opptak-med-streamadmin">Automatisk opptak med StreamAdmin<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#automatisk-opptak-med-streamadmin" class="hash-link" aria-label="Direkte lenke til Automatisk opptak med StreamAdmin" title="Direkte lenke til Automatisk opptak med StreamAdmin" translate="no">​</a></h2>
<p>StreamAdmin sin streaming-profil har innebygd opptak via MediaMTX. Når du oppretter en profil, kan du sette:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">recording</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">format</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> mp4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">segment_duration</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">3600</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)"># ny fil hver time</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">output_path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"/var/streamadmin/recordings/{stream_name}/{date}/{time}.mp4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">delete_after_processing</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">max_disk_usage_gb</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">500</span><br></span></code></pre></div></div>
<p><code>segment_duration</code> på 3600 sekunder (én time) er en god default. Det gir håndterbare filstørrelser (cirka 4-8 GB per time ved 1080p60), og hvis disken fylles eller MediaMTX kræsjer, mister du maks én time.</p>
<p>Filene navngis automatisk med tidsstempel, og StreamAdmin lagrer metadata (start-tid, varighet, peak-viewers, peak-bitrate) i <code>vod_recordings</code>-tabellen. Dette gjør at du kan finne et spesifikt opptak via panelet uten å lete i filsystemet manuelt.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="trigger-transkoding-ved-end-of-stream">Trigger transkoding ved end-of-stream<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#trigger-transkoding-ved-end-of-stream" class="hash-link" aria-label="Direkte lenke til Trigger transkoding ved end-of-stream" title="Direkte lenke til Trigger transkoding ved end-of-stream" translate="no">​</a></h3>
<p>Når en live-økt avsluttes, sender MediaMTX et webhook-kall til StreamAdmin sin API. Dette webhook-et trigger en kø-jobb (Laravel Queue) som starter transkodings-pipelinen. Den asynkrone modellen er viktig: transkoding av en 4-timers økt kan ta 30-60 minutter, og det skal ikke holde på MediaMTX sin tråd.</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// StreamAdmin job som trigges ved end-of-stream</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name-definition class-name">TranscodeVodJob</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name">ShouldQueue</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function-definition function" style="color:rgb(80, 250, 123)">handle</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token keyword return-type" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$this</span><span class="token operator">-&gt;</span><span class="token function" style="color:rgb(80, 250, 123)">transcodeToMp4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">      </span><span class="token comment" style="color:rgb(98, 114, 164)">// hovedfil i 1080p</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$this</span><span class="token operator">-&gt;</span><span class="token function" style="color:rgb(80, 250, 123)">generateThumbnails</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">   </span><span class="token comment" style="color:rgb(98, 114, 164)">// 10 thumbnails per time</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$this</span><span class="token operator">-&gt;</span><span class="token function" style="color:rgb(80, 250, 123)">generateHlsManifest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// for direkte avspilling</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$this</span><span class="token operator">-&gt;</span><span class="token function" style="color:rgb(80, 250, 123)">uploadToStorage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">      </span><span class="token comment" style="color:rgb(98, 114, 164)">// S3, B2, eller egen tjener</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$this</span><span class="token operator">-&gt;</span><span class="token function" style="color:rgb(80, 250, 123)">notifyWebhooks</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain">       </span><span class="token comment" style="color:rgb(98, 114, 164)">// varsle om at VOD er klar</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="transkoding-til-ulike-oppløsninger-med-ffmpeg">Transkoding til ulike oppløsninger med FFmpeg<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#transkoding-til-ulike-oppl%C3%B8sninger-med-ffmpeg" class="hash-link" aria-label="Direkte lenke til Transkoding til ulike oppløsninger med FFmpeg" title="Direkte lenke til Transkoding til ulike oppløsninger med FFmpeg" translate="no">​</a></h2>
<p>FFmpeg er hjernen i enhver VOD-pipeline. Den kommandoen du velger her bestemmer kvalitet, filstørrelse og kompatibilitet på sluttbruker-siden.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="standard-transkode-kommando-for-vod">Standard transkode-kommando for VOD<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#standard-transkode-kommando-for-vod" class="hash-link" aria-label="Direkte lenke til Standard transkode-kommando for VOD" title="Direkte lenke til Standard transkode-kommando for VOD" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ffmpeg </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-i</span><span class="token plain"> input.mp4 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c:v</span><span class="token plain"> libx264 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-preset</span><span class="token plain"> slow </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-crf</span><span class="token plain"> </span><span class="token number">21</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-pix_fmt</span><span class="token plain"> yuv420p </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-profile:v</span><span class="token plain"> high </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-level</span><span class="token plain"> </span><span class="token number">4.1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-movflags</span><span class="token plain"> +faststart </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c:a</span><span class="token plain"> aac </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-b:a</span><span class="token plain"> 160k </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-ar</span><span class="token plain"> </span><span class="token number">48000</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  output_1080p.mp4</span><br></span></code></pre></div></div>
<p>Nøkkelparametere å forstå:</p>
<ul>
<li class=""><strong><code>-preset slow</code></strong> — Tar lengre tid å enkode, men gir bedre kvalitet per byte. For VOD (asynkron) er <code>slow</code> eller <code>slower</code> riktig valg. Aldri bruk <code>ultrafast</code> eller <code>veryfast</code> for arkiv-kvalitet.</li>
<li class=""><strong><code>-crf 21</code></strong> — Constant Rate Factor. Lavere tall = bedre kvalitet og større filer. 18-23 er normalt området; 21 er en god default for 1080p.</li>
<li class=""><strong><code>-movflags +faststart</code></strong> — Flytter <code>moov</code>-atomet til starten av filen. Dette gjør at videoen kan starte avspilling før den er fullstendig nedlastet — kritisk for web-streaming.</li>
<li class=""><strong><code>-pix_fmt yuv420p</code></strong> — Sikrer kompatibilitet med eldre nettlesere og mobile enheter. Uten dette risikerer du at videoen ikke spiller på iPhone.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="multi-bitrate-transkoding-for-adaptiv-strømming">Multi-bitrate transkoding for adaptiv strømming<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#multi-bitrate-transkoding-for-adaptiv-str%C3%B8mming" class="hash-link" aria-label="Direkte lenke til Multi-bitrate transkoding for adaptiv strømming" title="Direkte lenke til Multi-bitrate transkoding for adaptiv strømming" translate="no">​</a></h3>
<p>Hvis du vil tilby HLS adaptiv strømming på egen tjener, må du produsere flere oppløsninger samtidig:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ffmpeg </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-i</span><span class="token plain"> input.mp4 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-filter_complex</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"[0:v]split=3[v1][v2][v3]; \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    [v1]scale=1920:1080[v1080]; \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    [v2]scale=1280:720[v720]; \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    [v3]scale=854:480[v480]"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-map</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"[v1080]"</span><span class="token plain"> -c:v:0 libx264 -b:v:0 5000k </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-preset</span><span class="token plain"> slow </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-map</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"[v720]"</span><span class="token plain">  -c:v:1 libx264 -b:v:1 2800k </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-preset</span><span class="token plain"> slow </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-map</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"[v480]"</span><span class="token plain">  -c:v:2 libx264 -b:v:2 1400k </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-preset</span><span class="token plain"> slow </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-map</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain">:a:0 </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-map</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain">:a:0 </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-map</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain">:a:0 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c:a</span><span class="token plain"> aac </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-b:a</span><span class="token plain"> 128k </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-f</span><span class="token plain"> hls </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-hls_time</span><span class="token plain"> </span><span class="token number">6</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-hls_playlist_type</span><span class="token plain"> vod </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-hls_segment_filename</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"v%v/segment_%03d.ts"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-master_pl_name</span><span class="token plain"> master.m3u8 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-var_stream_map</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"v:0,a:0 v:1,a:1 v:2,a:2"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"v%v/playlist.m3u8"</span><br></span></code></pre></div></div>
<p>Dette produserer tre kvalitetsnivåer (1080p, 720p, 480p) i HLS-format, klare for direkte avspilling i en HTML5-spiller eller via en CDN.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lyd-ikke-gå-på-akkord">Lyd: ikke gå på akkord<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#lyd-ikke-g%C3%A5-p%C3%A5-akkord" class="hash-link" aria-label="Direkte lenke til Lyd: ikke gå på akkord" title="Direkte lenke til Lyd: ikke gå på akkord" translate="no">​</a></h3>
<p>Lyd er det første publikum klager på, og det er gratis å gjøre riktig. Bruk alltid AAC i <code>-b:a 160k</code> eller høyere, samplingrate 48 kHz. Hvis kildematerialet er stereo, behold stereo. Ikke down-mix til mono "for å spare plass" — det merkes umiddelbart.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="distribusjon-youtube-egen-cdn-eller-dedikerte-arkiv-tjenere">Distribusjon: YouTube, egen CDN, eller dedikerte arkiv-tjenere<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#distribusjon-youtube-egen-cdn-eller-dedikerte-arkiv-tjenere" class="hash-link" aria-label="Direkte lenke til Distribusjon: YouTube, egen CDN, eller dedikerte arkiv-tjenere" title="Direkte lenke til Distribusjon: YouTube, egen CDN, eller dedikerte arkiv-tjenere" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="youtube-via-data-api-v3">YouTube via Data API v3<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#youtube-via-data-api-v3" class="hash-link" aria-label="Direkte lenke til YouTube via Data API v3" title="Direkte lenke til YouTube via Data API v3" translate="no">​</a></h3>
<p>Mange streamere klipper hovedhøydepunkter manuelt og laster opp til YouTube. Dette skalerer dårlig hvis du streamer 4-5 økter per uke. YouTube Data API v3 lar deg laste opp programatisk, og StreamAdmin kan integrere mot dette via OAuth:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Pseudo-flow:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 1. Bruker autentiserer med YouTube OAuth i StreamAdmin</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 2. StreamAdmin lagrer refresh token kryptert</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 3. Etter VOD-transkoding: laster opp via API</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 4. Setter tittel, beskrivelse, thumbnail, kategori, taggene fra stream-metadata</span><br></span></code></pre></div></div>
<p>Vær oppmerksom på YouTube sine kvotegrenser — Data API v3 har en daglig kvote på 10 000 enheter, og hver upload koster 1600 enheter. I praksis betyr dette omtrent 6 uploads per dag før du må be om kvote-økning.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="egen-cdn-cloudflare-r2-eller-backblaze-b2">Egen CDN: Cloudflare R2 eller Backblaze B2<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#egen-cdn-cloudflare-r2-eller-backblaze-b2" class="hash-link" aria-label="Direkte lenke til Egen CDN: Cloudflare R2 eller Backblaze B2" title="Direkte lenke til Egen CDN: Cloudflare R2 eller Backblaze B2" translate="no">​</a></h3>
<p>Hvis du vil hoste VOD-arkivet selv (kontroll, ingen YouTube-monetiseringsregler, lavere kostnader på lang sikt), er Cloudflare R2 og Backblaze B2 de to beste alternativene. Begge tilbyr S3-kompatible APIer, og begge har gratis egress når du serverer via Cloudflare.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Eksempel: last opp til Cloudflare R2 med rclone</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">rclone copy /var/streamadmin/recordings/processed/2026-05-02_episode-87.mp4 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  r2:streamadmin-vods/2026/05/ </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--progress</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--transfers</span><span class="token plain"> </span><span class="token number">4</span><br></span></code></pre></div></div>
<p>Cloudflare Stream er et alternativ til "ren" R2 hvis du vil ha innebygd HLS adaptiv strømming uten å selv segmentere. Det koster mer per minutt video, men sparer deg for FFmpeg-arbeidet.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dedikert-arkiv-tjener-med-nginx">Dedikert arkiv-tjener med Nginx<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#dedikert-arkiv-tjener-med-nginx" class="hash-link" aria-label="Direkte lenke til Dedikert arkiv-tjener med Nginx" title="Direkte lenke til Dedikert arkiv-tjener med Nginx" translate="no">​</a></h3>
<p>For den som vil ha full kontroll: en VPS med stor disk (Hetzner sitt SX-line, OVH eller eget hardware) og Nginx med <code>mp4-modulen</code> aktivert gir deg en personlig YouTube. Pseudo-konfig:</p>
<div class="language-nginx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-nginx codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">location</span><span class="token directive"> /vod/</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">mp4</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">mp4_buffer_size</span><span class="token directive"> </span><span class="token directive number">1m</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">mp4_max_buffer_size</span><span class="token directive"> </span><span class="token directive number">5m</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">add_header</span><span class="token directive"> Accept-Ranges bytes</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token directive keyword" style="color:rgb(189, 147, 249);font-style:italic">root</span><span class="token directive"> /var/vods</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p>Med dette serveres MP4-filer med byte-range support, slik at sluttbrukere kan hoppe frem og tilbake i videoen uten å laste den helt ned.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lagringsstrategi-og-kostnader">Lagringsstrategi og kostnader<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#lagringsstrategi-og-kostnader" class="hash-link" aria-label="Direkte lenke til Lagringsstrategi og kostnader" title="Direkte lenke til Lagringsstrategi og kostnader" translate="no">​</a></h2>
<p>Her er hvor mange streamere undervurderer kompleksiteten. La oss regne på en realistisk produksjonsstreamer som streamer 4 ganger i uka, 4 timer per økt:</p>
<ul>
<li class="">16 timer/uke live-tid</li>
<li class="">1080p60 ved 6 Mbit/s = ca 2,7 GB/time</li>
<li class="">Live-arkiv: 16 × 2.7 = ~43 GB/uke = ~2,2 TB/år</li>
</ul>
<p>Hvis du i tillegg lagrer et høykvalitets-master på 12 Mbit/s, dobles dette til ~4,4 TB/år. Etter tre år snakker vi 13 TB ren videodata. Dette er ikke "litt diskplass" lenger — det er en datasenter-investering.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tre-nivå-lagringsstrategi">Tre-nivå lagringsstrategi<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#tre-niv%C3%A5-lagringsstrategi" class="hash-link" aria-label="Direkte lenke til Tre-nivå lagringsstrategi" title="Direkte lenke til Tre-nivå lagringsstrategi" translate="no">​</a></h3>
<p>Den profesjonelle løsningen er tiered storage:</p>
<ol>
<li class=""><strong>Hot tier (siste 30 dager):</strong> SSD eller raskt NVMe på selve transkode-tjeneren. Brukes til umiddelbare klipping/distribusjon. Pris: høy per GB.</li>
<li class=""><strong>Warm tier (30 dager - 1 år):</strong> Spinning rust på samme tjener, eller B2/R2 standard. Sjelden tilgang, men rimelig hentbar. Pris: lav per GB.</li>
<li class=""><strong>Cold archive (&gt;1 år):</strong> S3 Glacier Deep Archive eller eget NAS-system uten online-tilgjengelighet. Pris: nesten ingenting per GB, men dyrt å hente ut.</li>
</ol>
<p>StreamAdmin sin VOD-modul kan automatisk flytte filer mellom disse nivåene basert på alder via en kø-jobb som kjører nattlig.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="avslutning">Avslutning<a href="https://doc.geektech.no/streamadmin/blogg/vod-pipeline-guide#avslutning" class="hash-link" aria-label="Direkte lenke til Avslutning" title="Direkte lenke til Avslutning" translate="no">​</a></h2>
<p>En VOD-pipeline er ikke noe du setter opp på 30 minutter mellom to streams. Det er infrastruktur som krever planlegging av lagring, encoding-kvalitet, distribusjon og arkivering — men det er også infrastruktur som lønner seg eksponensielt over tid. En streamer med tre års velorganisert VOD-arkiv har en innholdsbase som er nesten umulig å kopiere; en streamer uten arkiv starter på null hver gang.</p>
<p>Vil du komme i gang? Les den fullstendige dokumentasjonen på <a href="https://doc.geektech.no/streamadmin" target="_blank" rel="noopener noreferrer" class="">doc.geektech.no/streamadmin</a> eller opprett en konto direkte på <a href="https://streamadmin.no/" target="_blank" rel="noopener noreferrer" class="">streamadmin.no</a>. Hvis du har spørsmål om FFmpeg-parametere, transkode-strategier eller har funnet en bedre kombinasjon enn det vi anbefaler her, snakk med oss i <a href="https://discord.gg/KxauJWZBqd" target="_blank" rel="noopener noreferrer" class="">Discord</a> — vi sitter ofte og diskuterer encoding-tradeoffs sent på kveld der.</p>]]></content:encoded>
            <category>vod</category>
            <category>opptak</category>
            <category>transkoding</category>
            <category>ffmpeg</category>
            <category>streamadmin</category>
        </item>
    </channel>
</rss>