Konfigurer Nginx på Ubuntu til at streame live HLS-video

Konfigurer Nginx på Ubuntu til at streame live HLS-video

HTTP Live Streaming (HLS) er en meget robust streaming-videoprotokol implementeret af Apple Inc. HLS bruger HTTP-transaktioner, som krydser firewalls, proxyer og kan distribueres gennem CDN'er med lethed. Derfor er denne teknologi i stand til at nå et meget større seerpublikum end RTP eller andre UDP-baserede protokoller. Meget af livestreaming af video online i dag hostes af dyre systemer, som bruger HLS, men de er generelt dyre og kræver mange serverressourcer. Denne vejledning viser dig, hvordan du konfigurerer en meget overkommelig Ubuntu 14.04 VULTR VPS til at lave HLS live streaming-begivenheder ved kun at bruge open source-software.

Det første trin er at læse og opsætte din server i henhold til Vultr Doc " Setup Nginx-RTMP on Ubuntu 14.04 ". Instruktionerne i det dokument var i skrivende stund den mest omfattende for opsætningsfasen. Jeg vil nævne, at du måske ønsker at erstatte "nginx-1.7.5" med "nginx-1.9.4" eller hvad den nyeste version af Nginx er tilgængelig. Det andet forslag er at kompilere Nginx med HTTP-stub-statusmodulet for at give dig selv mulighed for at overvåge, hvor mange live HLS-seere du har senere.

I stedet for at kompilere med:

./configure --with-http_ssl_module  --add-module=../nginx-rtmp-module-master

Brug denne streng i proceduren skitseret i forudsætningsdokumentet:

./configure --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module-master

Eksemplet i denne vejledning vil skabe både "live" og "mobile" (optimerede) streams og vil bruge ffmpeg (installeret i den forrige tutorial) til at generere den bithastighedsjusterede, mobiloptimerede HLS-stream. Eksemplet viser også, hvordan du får serveren til at optage dine livestreams automatisk og giver dig mulighed for at afspille optagelserne som en video on demand (VOD) genafspilningstjeneste.

Opret først de mappestrukturer, der er nødvendige for at holde de levende og mobile HLS-manifester og videofragmenter:

sudo mkdir /HLS
sudo mkdir /HLS/live
sudo mkdir /HLS/mobile
sudo mkdir /video_recordings
sudo chmod -R 777 /video_recordings

Det er nok en god idé at have din firewall tændt, hvis du ikke allerede har gjort det. Hvis det er tilfældet, skal du tillade trafik ind i de porte, der bruges af Nginx og HLS. Hvis du gerne vil køre uden firewall indtil videre, skal du ignorere ufw-afsnittet nedenfor.

sudo ufw limit ssh
sudo ufw allow 80
sudo ufw allow 1935
sudo ufw enable

HLS-streaming kræver en væsentlig anden Nginx-konfiguration fra RTMP-konfigurationen i den første artikel. Rediger din nginx.conffil for at bruge følgende ved at erstatte "my-ip" og "my-stream-key" med dine oplysninger. Du kan bruge alt, hvad du vil, til "my-stream-key", det er bare et ord, der er unikt og nyttigt for dig. Du ønsker måske at sikkerhedskopiere din originale konfigurationsfil først, og indsæt derefter mine medfølgende konfigurationsoplysninger i editoren og erstatter alt, hvad der var der:

sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.original
sudo nano /usr/local/nginx/conf/nginx.conf

Ny nginx.conf:

worker_processes  1;
error_log  logs/error.log debug;
events {
worker_connections  1024;
}
rtmp {
server {
listen 1935;
allow play all;

#creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live {
allow play all;
live on;
record all;
record_path /video_recordings;
record_unique on;
hls on;
hls_nested on;
hls_path /HLS/live;
hls_fragment 10s;

#creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
exec ffmpeg -i rtmp://192.168.254.178:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://192.168.254.178:1935/mobile/$;
}

#creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
application mobile {
allow play all;
live on;
hls on;
hls_nested on;
hls_path /HLS/mobile;
hls_fragment 10s;
}

#allows you to play your recordings of your live streams using a URL like "rtmp://my-ip:1935/vod/filename.flv"
application vod {
play /video_recordings;
}
}
}


http {
include       mime.types;
default_type  application/octet-stream;

server {
listen 80;
server_name 192.168.254.178;

#creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"      
location /live {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/live;
add_header Cache-Control no-cache;
}

#creates the http-location for our mobile-device HLS stream - "http://my-ip/mobile/my-stream-key/index.m3u8"        
location /mobile {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/mobile;
add_header Cache-Control no-cache;
}   

#allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"     
location /stats {
stub_status;
}

#allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"     
location / {
root   html;
index  index.html index.htm;
}   
}
}

Tryk på Ctrl + X for at afslutte. Sig "ja" for at gemme ændringerne.

Du kan finde klare instruktioner og eksempler på de mulige variabler i denne nginx.conffil, hvis du spørger din yndlingssøgemaskine efter "nginx-rtmp-direktiver". Jeg har brugt nginx-rtmp med HLS i nogle år nu uden at bruge direktiverne "tillad udgivelse" og "afvis udgivelse", og jeg har ikke set nogen tilfælde af folk, der bruger/invaderer mine videoservere. Så jeg medtog ikke disse direktiver her. Læs om og tilføj disse direktiver, hvis du ønsker det.

Efter at have ændret nginx.conffilen, skal du genstarte Nginx for at bruge den nye konfiguration:

sudo service nginx restart

Hold nøje øje med eventuelle Nginx-fejlmeddelelser og adresser eventuelle fejl, der kan være forårsaget af stavefejl, mappeejerskab eller problemer med tilladelser. Hvis du ikke har nogen fejlmeddelelser, er du klar til at oprette din kodestrøm.

Du skal have en videokoder for at oprette streamen. Jeg bruger OBS (Open Broadcaster Software) - som er open source og fungerer godt for mig. Der er andre løsninger at vælge imellem, som er uden for denne tutorials rammer. Jeg vil ikke dække alt om konfiguration af en RTMP-videokoder. De kræver dog alle nogenlunde de samme inputvariabler. De nøgleindstillinger, du skal indtaste for at bruge min nøjagtige nginx.confkonfiguration og fungere godt på tværs af de fleste spillere/browsere/platforme, er som følger:

  1. Encoder-x264
  2. Variabel bitrate (ikke CBR eller konstant bithastighed), kvalitet højest
  3. Maks bithastighed - 600 kbps
  4. Audio-Codec-AAC
  5. Lyd-format-44,1 khz
  6. Lyd-bithastighed - 64 kbps
  7. FMS URL-"rtmp://my-ip:1935/live"
  8. Stream nøgle-"min-stream-nøgle"
  9. Opløsning - 640x480
  10. FPS (frames per second) -30
  11. CFR (Constant Frame Rate) - Ja
  12. Keyframe interval-2 sekunder (én keyframe hvert 2. sekund)
  13. x264 Encoding Profile-baseline (kan fungere med main—afhængigt af den anvendte afspiller)
  14. x264 CPU Nuværende-meget hurtig

Jeg anbefaler at prøve forskellige indkodere og eksperimentere med dem. Du ønsker måske et bredt billedformat - eller dit kamera (eller andre udsendelsesmaterialer) kan kræve det. Hvis det er tilfældet, skal du sørge for at ændre disse oplysninger i din encoder og også billedformatet, der er angivet i exec-ffmpeg-sektionen af nginx.conffilen, som jeg har leveret; ellers får du nogle fede videofeeds.

Når din encoder er sat op, kan du teste det hele. Start encoderen med dit webcam eller en slags testfoder kørende på det. Du kan se din udsendelse på dette tidspunkt med VLC-afspiller ved hjælp af URL'er som:

http://my-ip/live/my-stream-key/index.m3u8
http://my-ip/mobile/my-stream-key/index.m3u8

Disse er til henholdsvis dine primære og dine mobile videostreams. Erstat din IP og stream nøgle i overensstemmelse hermed.

Når du har udsendt din første stream, skal du kontrollere (via ssh eller ftp), at din live-udsendelse blev optaget i /video_recordingsmappen på din Vultr VPS. Du kan også prøve at afspille denne optagede fil i VLC med en URL som:

rtmp://my-ip/vod/filename.flv

Nginx-statistikker er også tilgængelige (med Nginx stub_status). For at se besøgs-/seerstatistik skal du gå til:

http://my-ip/stats

For at se din video på en webside skal du bruge en indlejrbar afspiller. Der er mange indlejrbare afspillere tilgængelige, som vil afspille HLS-video. Jeg har brugt JW Player i nogle år nu, men den gratis version vil ikke spille HLS. Flowplayer og Bitdash af Bitmovin (blandt andre løsninger) er generøse nok til at tilbyde en ikke-kommerciel version af deres spillere gratis, som vil gøre din HLS-stream indlejret på en webside. Til denne artikel har jeg prøvet dem begge og fundet dem begge til at fungere ganske godt med min Vultr/Nginx-baserede videoserver. Jeg vil kort vise, hvordan jeg fik Flowplayer i gang med min testbed-maskine.

Hvis du vil bruge live HLS-streaming på en almindelig, vedvarende eller kommerciel måde, vil jeg opfordre dig til at købe en licens fra Flowplayer eller hvilken spiller du vælger at bruge. Du vil få en spiller, som har færre begrænsninger, flere funktioner og kan mærkes til din organisation. Du får også støtte - hvilket kan være meget vigtigt. Bortset fra Vultr VPS, er dette virkelig den eneste omkostning forbundet med projektet.

Før du gør noget andet, er det vigtigt at tage sig af det, der kaldes "cross-domain" begrænsninger, som ellers ville lukke ned for din mulighed for at streame til en webside/hjemmeside. Opret en crossdomain.xmlfil i din nginx/htmlmappe og læg instruktioner i den for at tillade data at flyde mellem domæner:

sudo nano /usr/local/nginx/html/crossdomain.xml

Kopiér først (fra denne side) og indsæt derefter (højreklik) i nano-editor-feltet følgende XML-data:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

Tryk på Ctrl + O for at skrive ud, derefter Ctrl + X for at gemme filen på disken og afslutte.

Jeg fik fat i HTML5 (version 6.0.3) af Flowplayer, som gav mig et antal filer og en mappe, når den blev pakket ud. Jeg uploadede alle filerne og mappen til en undermappe af Nginx/HTML-rodmappen, som jeg kaldte "flowplayer". Den nøjagtige vej var /usr/local/nginx/html/flowplayer.

For at teste vores video, når den er indlejret på en webside, skal du oprette et par HTML-filer i roden af ​​Nginx/HTML-mappen ved hjælp af nano og udfylde dem med følgende indhold.

Fil:

sudo nano /usr/local/nginx/html/hls.html

HTML-kode:

<!doctype html>
<head>
<link rel="stylesheet" href="#">
</head>

<body>
640x480 664kbps (live) Desktop Browsers<br>
<div style="width:640px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
<br><br>
480x360 464kbps (mobile) Mobile Browsers <br>
<div style="width:480px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
</body>

Fil:

sudo nano /usr/local/nginx/html/hls_progressive.html

HTML-kode:

<!doctype html>
<head>
<link rel="stylesheet" href="#">
<style> .flowplayer { width: 640px; } </style>
</head>

<body>
<div class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src=""> 
<source type="application/x-mpegurl" src="">
</video>
</div>
<br>
</body>

Sørg for at erstatte "my-ip" og "my-stream-key" med dine data.

Du skal erstatte flowplayer/skin/functional.css"#"-tegnet i stilarket med stien href="#". Selvstudiesoftwaren fjerner stien. Du skal udfylde en URL i src=""del - det bliver skrabet ud af tutorial software, brug http://my-ip/live/my-stream-key/index.m3u8og http://my-ip/mobile/my-stream-key/index.m3u8hhv. Du skal også tilføje script- srctags i hovedet for både jquery-1.11.2.min.jsog for flowplayer.min.js. Mærkerne bliver fjernet af tutorial-softwaren. Du kan finde ud af, hvordan du laver disse tags, ved at se på example htmlfilen, der følger med Flowplayer-sættet.

Start encoderen med dit webcam eller en slags testfoder kørende på det. Du kan se din udsendelse i en browser ved hjælp af følgende URL'er:

http://my-ip/hls.html
http://my-ip/hls_progressive.html

Den første side viser simpelthen hver af dine streams - den primære og den mobile platform. Du vil være i stand til at starte dem begge og se dem. Du vil bemærke, at den mobile platformstrøm er mindre i størrelse. Disse trin er kun for at sikre, at alt kører.

Den anden side viser en enkelt strøm. Men det er sat op på en måde, som kaldes "progressiv streaming". Hvad dette betyder er, at når en seer afspiller videoen, forsøger både serveren og afspilleren at give seeren streamen med høj bithastighed og høj kvalitet, hvis seernes forbindelse kan opretholde den. Hvis deres forbindelse er dårlig, og den ikke kan opretholde forbindelsen, ruller den ned til at vise streamingen med lavere bithastighed (mobil), som er 200 kbps lavere i båndbredde. Hvis du ville, kunne du oprette mere graduerede, progressive streams med ffmpeg og konfigurere dem ved hjælp af mit eksempel.

Jeg har testet denne konfiguration på en enkelt kerne, 1 GB Vultr VPS, og jeg fandt ud af, at med en enkelt livestream, plus den transvurderede mobilstream, den skaber med ffmpeg, var cpu-bruget mindre end 35 %, og det havde kun forbrugt 100 MB min 1GB ram. Det er nu en meget effektiv opsætning.

Hvis du planlægger at streame video, som er meget større i pixeldimensioner end SD, kan du opleve, at du skal bruge en mere kraftfuld VPS. Jeg var nysgerrig efter dette og kørte min mainstream op til 1280x960 pixels og 2Mbps - hvilket satte ekstra belastning på tingene. Men VPS'en brugte stadig kun 50% CPU, og hukommelsesforbruget forblev på 100MB. Jeg tilføjede et dusin seere/browsere, og det gjorde næsten ingen forskel i belastningen på VPS'en - kun den brugte båndbredde steg. Jeg er sikker på, at oprettelse af yderligere transvurderede streams med ffmpeg ville fortsætte med at belaste systemet yderligere.

Jeg har brugt denne type server i produktionsmiljøer med mellem 50 og 100 samtidige brugere og fandt ud af, at ressourceforbruget steg meget lidt med stigende seerforbindelser. Eksperimenter med det. Men jeg tror, ​​at de fleste brugere ville være glade for at bruge en single-core, 1GB VPS. Nyd din nye HLS-streamingserver!


Sådan installeres Squid Proxy på CentOS

Sådan installeres Squid Proxy på CentOS

Squid er et populært, gratis Linux-program, der giver dig mulighed for at oprette en webproxy til videresendelse. I denne vejledning vil du se, hvordan du installerer Squid på CentOS for at gøre dig

Sådan installeres Memcached på Ubuntu 14.04

Sådan installeres Memcached på Ubuntu 14.04

Memcached er et højtydende databasesystem, der kan hjælpe med at superlade din applikation. Den er meget hurtig, da den ikke skriver til disken, men i stedet t

Opsætning af Fail2ban Ubuntu x64

Opsætning af Fail2ban Ubuntu x64

Fail2ban er et program, der overvåger login-aktivitet på din server og blokerer stødende IP-adresser. Som standard blokerer den IP-adresser i 10 minutter

Konfigurer Red5 Media Server på Ubuntu 16.04

Konfigurer Red5 Media Server på Ubuntu 16.04

Bruger du et andet system? Red5 er en open source medieserver implementeret i Java, der giver dig mulighed for at køre Flash multi-bruger applikationer såsom live streamin

Sådan installeres Vanilla Forum på Ubuntu 16.04

Sådan installeres Vanilla Forum på Ubuntu 16.04

Bruger du et andet system? Vanilla forum er en open source forumapplikation skrevet i PHP. Det er en fuldt tilpasselig, nem at bruge og understøtter ekstern

Sådan installeres Tiny Tiny RSS Reader på en FreeBSD 11 FAMP VPS

Sådan installeres Tiny Tiny RSS Reader på en FreeBSD 11 FAMP VPS

Bruger du et andet system? Tiny Tiny RSS Reader er en gratis og open source selv-hostet webbaseret nyhedsfeed (RSS/Atom) læser og aggregator, designet til at allo

How to Install Wiki.js on FreeBSD 11

How to Install Wiki.js on FreeBSD 11

Using a Different System? Wiki.js is a free and open source, modern wiki app built on Node.js, MongoDB, Git and Markdown. Wiki.js source code is publicl

Sådan installeres Microweber på CentOS 7

Sådan installeres Microweber på CentOS 7

Bruger du et andet system? Microweber er en open source træk og slip CMS og online shop. Microweber-kildekoden er hostet på GitHub. Denne guide vil vise dig

Installation af Microweber på Ubuntu 16.04

Installation af Microweber på Ubuntu 16.04

Bruger du et andet system? Microweber er en open source træk og slip CMS og online shop. Microweber-kildekoden er hostet på GitHub. Denne guide vil vise dig

Sådan installeres Mattermost 4.1 på CentOS 7

Sådan installeres Mattermost 4.1 på CentOS 7

Bruger du et andet system? Mattermost er et open source, selvhostet alternativ til Slack SAAS-meddelelsestjenesten. Med andre ord, med Mattermost er du ca

Sådan installeres dotCMS på Ubuntu 16.04

Sådan installeres dotCMS på Ubuntu 16.04

Bruger du et andet system? DotCMS er et open source, enterprise-grade content management system skrevet i Java. Den indeholder næsten alle nødvendige funktioner

Sådan installeres Pagekit 1.0 CMS på en FreeBSD 11 FAMP VPS

Sådan installeres Pagekit 1.0 CMS på en FreeBSD 11 FAMP VPS

Bruger du et andet system? Pagekit 1.0 CMS er et smukt, modulært, udvideligt og let, gratis og open source Content Management System (CMS) med

Sådan installeres BigTree CMS på en Fedora 26 LAMP VPS

Sådan installeres BigTree CMS på en Fedora 26 LAMP VPS

Bruger du et andet system? BigTree CMS 4.2 er et hurtigt og let, gratis og open source, enterprise-grade content management system (CMS) med omfattende

Lad os kryptere på Plesk

Lad os kryptere på Plesk

Plesk-kontrolpanelet har en meget flot integration til Lets Encrypt. Lets Encrypt er en af ​​de eneste SSL-udbydere, der udleverer certifikater komplet

Lader kryptere på cPanel

Lader kryptere på cPanel

Lets Encrypt er en certifikatmyndighed dedikeret til at levere SSL-certifikater gratis. cPanel har bygget en pæn integration, så du og din klient

Sådan installeres Concrete5 på CentOS 7

Sådan installeres Concrete5 på CentOS 7

Bruger du et andet system? Concrete5 er et open source CMS, som tilbyder mange karakteristiske og nyttige funktioner til at hjælpe redaktører med at producere indhold nemt og

Sådan installeres GoAccess på Ubuntu 16.04

Sådan installeres GoAccess på Ubuntu 16.04

Bruger du et andet system? GoAccess er en open source weblog-analysator. Du kan bruge det til analyse af logs på realtidsbasis i enten terminalen eller

Sådan installeres YOURLS på CentOS 7

Sådan installeres YOURLS på CentOS 7

YOURLS (Your Own URL Shortener) er en open source URL-forkortelse og dataanalyseapplikation. I denne artikel vil vi dække installationsprocessen

Konfigurer Nagios på Ubuntu: Del 1 - Nagios Server

Konfigurer Nagios på Ubuntu: Del 1 - Nagios Server

Denne artikel er en del af en 2-delt serie om installation og konfiguration af Nagios på Ubuntu 14.04. Del 1: Nagios Server Del 2: Oversigt over fjernvært Nagio

Sådan installeres Laravel GitScrum på CentOS 7

Sådan installeres Laravel GitScrum på CentOS 7

Laravel GitScrum eller GitScrum er et open source-produktivitetsværktøj designet til at hjælpe udviklingsteams med at implementere Scrum-metoden på en måde, der ligner t.

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Kunstig intelligens er ikke i fremtiden, det er her lige i nuet I denne blog Læs, hvordan kunstig intelligens-applikationer har påvirket forskellige sektorer.

DDOS-angreb: et kort overblik

DDOS-angreb: et kort overblik

Er du også et offer for DDOS-angreb og forvirret over forebyggelsesmetoderne? Læs denne artikel for at løse dine spørgsmål.

Har du nogensinde spekuleret på, hvordan tjener hackere penge?

Har du nogensinde spekuleret på, hvordan tjener hackere penge?

Du har måske hørt, at hackere tjener mange penge, men har du nogensinde spekuleret på, hvordan tjener de den slags penge? lad os diskutere.

Revolutionære opfindelser fra Google, der vil gøre dit liv lettere.

Revolutionære opfindelser fra Google, der vil gøre dit liv lettere.

Vil du se revolutionerende opfindelser fra Google, og hvordan disse opfindelser ændrede livet for ethvert menneske i dag? Læs derefter til bloggen for at se opfindelser fra Google.

Fredag ​​Essential: Hvad skete der med AI-drevne biler?

Fredag ​​Essential: Hvad skete der med AI-drevne biler?

Konceptet med selvkørende biler til at køre på vejene ved hjælp af kunstig intelligens er en drøm, vi har haft i et stykke tid nu. Men på trods af flere løfter er de ingen steder at se. Læs denne blog for at lære mere...

Teknologisk singularitet: En fjern fremtid for menneskelig civilisation?

Teknologisk singularitet: En fjern fremtid for menneskelig civilisation?

Efterhånden som videnskaben udvikler sig i et hurtigt tempo og overtager en stor del af vores indsats, stiger risikoen for at udsætte os selv for en uforklarlig Singularitet. Læs, hvad singularitet kunne betyde for os.

Udvikling af datalagring – Infografik

Udvikling af datalagring – Infografik

Opbevaringsmetoderne for dataene har været under udvikling, kan være siden fødslen af ​​dataene. Denne blog dækker udviklingen af ​​datalagring på basis af en infografik.

Funktioner af Big Data Reference Architecture Layers

Funktioner af Big Data Reference Architecture Layers

Læs bloggen for at kende forskellige lag i Big Data-arkitekturen og deres funktionaliteter på den enkleste måde.

6 fantastiske fordele ved at have smarte hjemmeenheder i vores liv

6 fantastiske fordele ved at have smarte hjemmeenheder i vores liv

I denne digitalt drevne verden er smarte hjemmeenheder blevet en afgørende del af livet. Her er et par fantastiske fordele ved smarte hjemmeenheder om, hvordan de gør vores liv værd at leve og enklere.

macOS Catalina 10.15.4-tillægsopdatering forårsager flere problemer end at løse

macOS Catalina 10.15.4-tillægsopdatering forårsager flere problemer end at løse

For nylig udgav Apple macOS Catalina 10.15.4 en supplerende opdatering for at løse problemer, men det ser ud til, at opdateringen forårsager flere problemer, hvilket fører til mursten af ​​mac-maskiner. Læs denne artikel for at lære mere