Sett opp Nginx på Ubuntu for å streame live HLS-video

Sett opp Nginx på Ubuntu for å streame live HLS-video

HTTP Live Streaming (HLS) er en veldig robust videoprotokoll for streaming implementert av Apple Inc. HLS bruker HTTP-transaksjoner som krysser brannmurer, proxyer og enkelt kan distribueres gjennom CDN-er. Derfor er denne teknologien i stand til å nå et mye større seerpublikum enn RTP eller andre UDP-baserte protokoller. Mye av livestreaming av video på nettet i dag er vert for dyre systemer som bruker HLS, men de er generelt dyre og krever mye serverressurser. Denne opplæringen vil vise deg hvordan du setter opp en svært rimelig Ubuntu 14.04 VULTR VPS for å gjøre HLS live streaming-arrangementer med kun åpen kildekode-programvare.

Det første trinnet er å lese og sette opp serveren din i henhold til Vultr Doc " Setup Nginx-RTMP on Ubuntu 14.04 ". Instruksjonene i det dokumentet var de mest omfattende for oppsettstadiet, i skrivende stund. Jeg vil nevne at du kanskje ønsker å erstatte "nginx-1.7.5" med "nginx-1.9.4" eller hva den nyeste versjonen av Nginx er tilgjengelig. Det andre forslaget er å kompilere Nginx med HTTP-stubstatusmodulen for å gi deg selv muligheten til å overvåke hvor mange live HLS-seere du har senere.

I stedet for å kompilere med:

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

Bruk denne strengen i prosedyren som er skissert i forutsetningsdokumentet:

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

Eksemplet i denne opplæringen vil lage både "live" og "mobil" (optimalisert) strømmer og vil bruke ffmpeg (installert i forrige opplæring) for å generere den bithastighetsjusterte, mobiloptimerte HLS-strømmen. Eksemplet vil også vise hvordan du får serveren til å ta opp live-strømmene dine automatisk og lar deg spille av opptakene som en video on demand (VOD) replay-tjeneste.

Først oppretter du mappestrukturene som er nødvendige for å holde de levende og mobile HLS-manifestene og videofragmentene:

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

Det er sannsynligvis en god idé å ha brannmuren slått på hvis du ikke allerede har gjort det. I så fall må du tillate trafikk inn i portene som brukes av Nginx og HLS. Hvis du vil kjøre uten brannmuren foreløpig, ignorer ufw-delen nedenfor.

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

HLS-streaming krever en vesentlig forskjellig Nginx-konfigurasjon fra RTMP-konfigurasjonen i den første artikkelen. Rediger nginx.conffilen din for å bruke følgende, og bytt ut "my-ip" og "my-stream-key" med informasjonen din. Du kan bruke alt du vil for "my-stream-key", det er bare et ord som er unikt og nyttig for deg. Det kan være lurt å sikkerhetskopiere den opprinnelige konfigurasjonsfilen først, og deretter lime inn min medfølgende konfigurasjonsinformasjon i redigeringsprogrammet, og erstatte alt som 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;
}   
}
}

Trykk Ctrl + X for å avslutte. Si "ja" for å lagre endringene.

Du kan finne klare instruksjoner og eksempler på mulige variabler i denne nginx.conffilen hvis du spør etter "nginx-rtmp-direktiver" i din favorittsøkemotor. Jeg har brukt nginx-rtmp med HLS i noen år nå, uten å bruke "allow publish" og "deny publish"-direktivene, og jeg har sett null tilfeller av folk som bruker/invaderer videoserverne mine. Så jeg tok ikke med disse direktivene her. Les om og legg til disse direktivene hvis du ønsker det.

Etter å ha endret nginx.conffilen, må du starte Nginx på nytt for å bruke den nye konfigurasjonen:

sudo service nginx restart

Se nøye etter eventuelle Nginx-feilmeldinger og adresser eventuelle feil som kan ha vært forårsaket av stavefeil, mappeeierskap eller problemer med tillatelser. Hvis du ikke har noen feilmeldinger, er du klar til å lage kodestrømmen.

Du må ha en videokoder for å lage strømmen. Jeg bruker OBS (Open Broadcaster Software) - som er åpen kildekode og fungerer bra for meg. Det er andre løsninger å velge mellom, som ligger utenfor denne veiledningen. Jeg vil ikke dekke alt om å konfigurere en RTMP-videokoder. De krever alle omtrent de samme inngangsvariablene. Nøkkelinnstillingene du må legge inn for å bruke min eksakte nginx.confkonfigurasjon og fungere godt på tvers av de fleste spillere/nettlesere/plattformer er som følger:

  1. Encoder-x264
  2. Variabel bitrate (ikke CBR eller konstant bithastighet), høyest kvalitet
  3. Maks bithastighet - 600 kbps
  4. Audio-Codec-AAC
  5. Lydformat-44,1 khz
  6. Lydbithastighet - 64 kbps
  7. FMS URL-"rtmp://my-ip:1935/live"
  8. Strømnøkkel - "min-strømnøkkel"
  9. Oppløsning - 640x480
  10. FPS (bilder per sekund)-30
  11. CFR (Constant Frame Rate) - Ja
  12. Nøkkelbildeintervall - 2 sekunder (ett nøkkelbilde hvert 2. sekund)
  13. x264-kodingsprofil-grunnlinje (kan fungere med hoved-avhenger av spilleren som brukes)
  14. x264 CPU Present-veldig rask

Jeg anbefaler å prøve forskjellige kodere og eksperimentere med dem. Du kan ønske deg et bredt sideforhold - eller kameraet (eller andre kringkastingsmaterialer) kan kreve det. I så fall, sørg for å endre denne informasjonen i koderen din og også sideforholdet oppført i exec-ffmpeg-delen av nginx.conffilen som jeg har levert; ellers får du noen klønete videofeeder.

Når koderen er satt opp, kan du teste alt. Start koderen med webkameraet ditt eller en slags testfôr som kjører på den. Du kan se sendingen din på dette tidspunktet med VLC-spiller ved å bruke URL-er som:

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

These are for your main and your mobile video streams, respectively. Substitute your IP and stream key accordingly.

After you've successfully broadcasted your first stream check (via ssh or ftp) that your live broadcast was recorded in the /video_recordings folder on your Vultr VPS. You can also try playing this recorded file in VLC with a URL like:

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

Nginx stats are also available (with Nginx stub_status). To view visitor/viewer stats, access:

http://my-ip/stats

For å se videoen din på en nettside trenger du en innebygd spiller. Det er mange innebygde spillere tilgjengelig som vil spille av HLS-video. Jeg har brukt JW Player i noen år nå, men gratisversjonen vil ikke spille HLS. Flowplayer og Bitdash av Bitmovin (blant andre løsninger) er sjenerøse nok til å tilby en ikke-kommersiell versjon av spillerne sine gratis som vil gjengi HLS-strømmen din innebygd i en nettside. For denne artikkelen har jeg prøvd dem begge og funnet at de begge fungerer ganske bra med min Vultr/Nginx-baserte videoserver. Jeg vil kort vise hvordan jeg fikk Flowplayer i gang med testbed-maskinen min.

Hvis du skal bruke direkte HLS-streaming på en vanlig, vedvarende eller kommersiell måte, vil jeg oppfordre deg til å kjøpe en lisens fra Flowplayer eller hvilken spiller du velger å bruke. Du vil få en spiller som har færre begrensninger, flere funksjoner og som kan merkes til din organisasjon. Du vil også få støtte - noe som kan være veldig viktig. Bortsett fra Vultr VPS, er dette egentlig den eneste kostnaden forbundet med prosjektet.

Før du gjør noe annet, er det viktig å ta vare på det som kalles "cross-domain"-restriksjoner, som ellers ville stengt ned muligheten for å strømme til en nettside/nettside. Lag en crossdomain.xmlfil i nginx/htmlmappen din og legg instruksjoner i den for å la data flyte mellom domener:

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

Kopier først (fra denne siden) og lim deretter inn (høyreklikk) i nanoredigeringsfeltet 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>

Trykk Ctrl + O for å skrive ut, deretter Ctrl + X for å lagre filen på disk og avslutte.

Jeg tok tak i HTML5 (versjon 6.0.3) av Flowplayer som ga meg en rekke filer og en mappe når den ble pakket ut. Jeg lastet opp alle filene og mappen til en undermappe av Nginx/HTML-rotmappen som jeg kalte "flowplayer". Den nøyaktige veien var /usr/local/nginx/html/flowplayer.

For å teste videoen vår når den er innebygd i en nettside, lag et par HTML-filer i roten av Nginx/HTML-mappen ved å bruke nano og fyll dem med følgende innhold.

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>

Pass på å erstatte "my-ip" og "my-stream-key" med dataene dine.

Du må erstatte flowplayer/skin/functional.css"#"-tegnet i stilarket med banen href="#". Opplæringsprogramvaren fjerner banen. Du må fylle inn en URL i src=""delen - den fjernes av opplæringsprogramvaren, bruk http://my-ip/live/my-stream-key/index.m3u8og http://my-ip/mobile/my-stream-key/index.m3u8henholdsvis. Du må også legge til skriptkoder srci hodet for både jquery-1.11.2.min.jsog for flowplayer.min.js. Taggene blir fjernet av opplæringsprogramvaren. Du kan finne ut hvordan du lager disse taggene ved å se på example htmlfilen som følger med Flowplayer-settet.

Start koderen med webkameraet ditt eller en slags testfôr som kjører på den. Du kan se sendingen din i en nettleser ved å bruke følgende nettadresser:

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

Den første siden viser ganske enkelt hver av strømmene dine - den viktigste og den mobile plattformen. Du vil kunne starte dem begge og se dem. Du vil legge merke til at mobilplattformstrømmen er mindre i størrelse. Disse trinnene er bare for å sikre at alt kjører.

Den andre siden viser en enkelt strøm. Men det er satt opp på en måte som kalles «progressiv streaming». Hva dette betyr er at når en seer spiller av videoen, prøver både serveren og spilleren å gi seeren strømmen med høy bithastighet og høy kvalitet hvis seerforbindelsen kan opprettholde den. Hvis tilkoblingen deres er dårlig og den ikke kan opprettholde tilkoblingen, ruller den ned til å vise strømmen med lavere bithastighet (mobil) som er 200 kbps lavere i båndbredde. Hvis du ønsket, kan du lage mer graderte, progressive strømmer med ffmpeg og konfigurere dem ved å bruke eksemplet mitt.

Jeg har testet denne konfigurasjonen på en enkelt kjerne, 1 GB Vultr VPS, og jeg fant ut at med en enkelt live-stream, pluss den transvurderte mobilstrømmen den oppretter med ffmpeg, var cpu-bruken mindre enn 35 % og den hadde kun forbrukt 100 MB min 1GB ram. Nå er det et veldig effektivt oppsett.

Hvis du planlegger å streame video som er mye større i pikseldimensjoner enn SD, kan du finne ut at du må bruke en kraftigere VPS. Jeg var nysgjerrig på dette og kjørte hovedstrømmen min opp til 1280x960 piksler og 2Mbps - noe som la ekstra belastning på ting. Men VPS-en brukte fortsatt bare 50 % CPU og minnebruken holdt seg på 100 MB. Jeg la til et dusin seere/nettlesere, og det gjorde nesten ingen forskjell i belastningen på VPS-en – bare båndbredden som ble brukt gikk opp. Jeg er sikker på at å lage flere transvurderte strømmer med ffmpeg vil fortsette å legge ekstra belastning på systemet.

Jeg har brukt denne typen server i produksjonsmiljøer med mellom 50 og 100 samtidige brukere og funnet ut at ressursbruken økte veldig lite med økende seertilkoblinger. Eksperimenter med det. Men jeg tror at de fleste brukere ville vært fornøyd med å bruke en enkeltkjerne, 1 GB VPS. Nyt din nye HLS-streamingserver!


Opprette en Jekyll-blogg på Ubuntu 16.04

Opprette en Jekyll-blogg på Ubuntu 16.04

Bruker du et annet system? Jekyll er et flott alternativ til WordPress for blogging eller deling av innhold. Det krever ingen databaser, og det er veldig enkelt, jeg

Slik installerer du Squid Proxy på CentOS

Slik installerer du Squid Proxy på CentOS

Squid er et populært, gratis Linux-program som lar deg lage en webproxy for videresending. I denne veiledningen vil du se hvordan du installerer Squid på CentOS for å gjøre deg om

Slik installerer du Memcached på Ubuntu 14.04

Slik installerer du Memcached på Ubuntu 14.04

Memcached er et databasesystem med høy ytelse som kan hjelpe deg med å overlade applikasjonen din. Den er veldig rask siden den ikke skriver til disken, men i stedet t

Installere InfluxDB på Ubuntu 14

Installere InfluxDB på Ubuntu 14

Introduksjon InfluxDB er en åpen kildekode, distribuert, tidsseriedatabase uten eksterne avhengigheter. Ja, du leser ingen eksterne avhengigheter par

Oppsett av Fail2ban Ubuntu x64

Oppsett av Fail2ban Ubuntu x64

Fail2ban er et program som overvåker påloggingsaktivitet på serveren din og blokkerer støtende IP-adresser. Som standard vil den blokkere IP-adresser i 10 minutter

Sett opp Red5 Media Server på Ubuntu 16.04

Sett opp Red5 Media Server på Ubuntu 16.04

Bruker du et annet system? Red5 er en åpen kildekode medieserver implementert i Java som lar deg kjøre Flash flerbrukerapplikasjoner som live streamin

Hvordan installere Vanilla Forum på Ubuntu 16.04

Hvordan installere Vanilla Forum på Ubuntu 16.04

Bruker du et annet system? Vanilla forum er en åpen kildekode-forumapplikasjon skrevet i PHP. Det er en fullt tilpassbar, enkel å bruke og støtter ekstern

Hvordan installere Kanboard på Ubuntu 18.04 LTS

Hvordan installere Kanboard på Ubuntu 18.04 LTS

Bruker du et annet system? Introduksjon Kanboard er et gratis og åpen kildekodeprogram for prosjektledelse som er designet for å forenkle og visualisere

Hvordan installere Kanboard på Debian 9

Hvordan installere Kanboard på Debian 9

Bruker du et annet system? Introduksjon Kanboard er et gratis og åpen kildekodeprogram for prosjektledelse som er designet for å forenkle og visualisere

Hvordan installere Tiny Tiny RSS-leser på en FreeBSD 11 FAMP VPS

Hvordan installere Tiny Tiny RSS-leser på en FreeBSD 11 FAMP VPS

Bruker du et annet system? Tiny Tiny RSS Reader er en gratis og åpen kildekode selvhostet nettbasert nyhetsfeed (RSS/Atom) leser og aggregator, designet for å allo

Hvordan installere Gitea på Debian 9

Hvordan installere Gitea på Debian 9

Bruker du et annet system? Gitea er et alternativt åpen kildekode, selvdrevet versjonskontrollsystem drevet av Git. Gitea er skrevet på Golang og er

Hvordan installere Wiki.js på FreeBSD 11

Hvordan installere Wiki.js på FreeBSD 11

Bruker du et annet system? Wiki.js er en gratis og åpen kildekode, moderne wiki-app bygget på Node.js, MongoDB, Git og Markdown. Wiki.js kildekode er offentlig

Hvordan installere Gitea på Ubuntu 18.04

Hvordan installere Gitea på Ubuntu 18.04

Bruker du et annet system? Gitea er et alternativt, selvdrevet versjonskontrollsystem med åpen kildekode drevet av git. Gitea er skrevet på Golang og er

Hvordan installere Thelia 2.3 på Debian 9

Hvordan installere Thelia 2.3 på Debian 9

Bruker du et annet system? Thelia er et åpen kildekodeverktøy for å lage e-business-nettsteder og administrere nettinnhold skrevet i PHP. Thelia kildekode i

Hvordan installere MODX Revolution på en Ubuntu 16.04 LAMP VPS

Hvordan installere MODX Revolution på en Ubuntu 16.04 LAMP VPS

Bruker du et annet system? MODX Revolution er et raskt, fleksibelt, skalerbart, gratis og åpen kildekode, enterprise-grade Content Management System (CMS) skrevet i

Slik installerer du Mattermost 4.1 på CentOS 7

Slik installerer du Mattermost 4.1 på CentOS 7

Bruker du et annet system? Mattermost er et åpen kildekode, selvdrevet alternativ til Slack SAAS-meldingstjenesten. Med andre ord, med Mattermost kan du ca

Hvordan installere Pagekit 1.0 CMS på en FreeBSD 11 FAMP VPS

Hvordan installere Pagekit 1.0 CMS på en FreeBSD 11 FAMP VPS

Bruker du et annet system? Pagekit 1.0 CMS er et vakkert, modulært, utvidbart og lett, gratis og åpen kildekode Content Management System (CMS) med

Hvordan installere BigTree CMS på en Fedora 26 LAMP VPS

Hvordan installere BigTree CMS på en Fedora 26 LAMP VPS

Bruker du et annet system? BigTree CMS 4.2 er et raskt og lett, gratis og åpen kildekode, enterprise-grade content management system (CMS) med omfattende

Hvordan installere MODX Revolution på en FreeBSD 11 FAMP VPS

Hvordan installere MODX Revolution på en FreeBSD 11 FAMP VPS

Bruker du et annet system? MODX Revolution er et raskt, fleksibelt, skalerbart, åpen kildekode, enterprise-grade Content Management System (CMS) skrevet i PHP. Det jeg

Hvordan installere Concrete5 på CentOS 7

Hvordan installere Concrete5 på CentOS 7

Bruker du et annet system? Concrete5 er et åpen kildekode CMS som tilbyr mange karakteristiske og nyttige funksjoner for å hjelpe redaktører med å produsere innhold enkelt og

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 akkurat i nåtiden I denne bloggen Les hvordan kunstig intelligens-applikasjoner har påvirket ulike sektorer.

DDOS-angrep: en kort oversikt

DDOS-angrep: en kort oversikt

Er du også et offer for DDOS-angrep og forvirret over forebyggingsmetodene? Les denne artikkelen for å løse spørsmålene dine.

Har du noen gang lurt på hvordan hackere tjener penger?

Har du noen gang lurt på hvordan hackere tjener penger?

Du har kanskje hørt at hackere tjener mye penger, men har du noen gang lurt på hvordan tjener de den slags penger? la oss diskutere.

Revolusjonerende oppfinnelser fra Google som vil gjøre livet ditt enkelt.

Revolusjonerende oppfinnelser fra Google som vil gjøre livet ditt enkelt.

Vil du se revolusjonerende oppfinnelser fra Google og hvordan disse oppfinnelsene forandret livet til alle mennesker i dag? Les deretter til bloggen for å se oppfinnelser fra Google.

Fredag ​​Essential: Hva skjedde med AI-drevne biler?

Fredag ​​Essential: Hva skjedde med AI-drevne biler?

Konseptet med selvkjørende biler som skal ut på veiene ved hjelp av kunstig intelligens er en drøm vi har hatt en stund nå. Men til tross for flere løfter, er de ingen steder å se. Les denne bloggen for å lære mer...

Teknologisk singularitet: en fjern fremtid for menneskelig sivilisasjon?

Teknologisk singularitet: en fjern fremtid for menneskelig sivilisasjon?

Ettersom vitenskapen utvikler seg raskt og tar over mye av innsatsen vår, øker også risikoen for å utsette oss for en uforklarlig singularitet. Les hva singularitet kan bety for oss.

Evolusjon av datalagring – infografikk

Evolusjon av datalagring – infografikk

Lagringsmetodene for dataene har vært i utvikling kan være siden fødselen av dataene. Denne bloggen dekker utviklingen av datalagring på grunnlag av en infografikk.

Funksjonaliteter til Big Data Reference Architecture Layers

Funksjonaliteter til Big Data Reference Architecture Layers

Les bloggen for å kjenne ulike lag i Big Data Architecture og deres funksjoner på den enkleste måten.

6 fantastiske fordeler ved å ha smarte hjemmeenheter i livene våre

6 fantastiske fordeler ved å ha smarte hjemmeenheter i livene våre

I denne digitaldrevne verden har smarthusenheter blitt en avgjørende del av livet. Her er noen fantastiske fordeler med smarthusenheter om hvordan de gjør livet vårt verdt å leve og enklere.

macOS Catalina 10.15.4 tilleggsoppdatering forårsaker flere problemer enn å løse

macOS Catalina 10.15.4 tilleggsoppdatering forårsaker flere problemer enn å løse

Nylig lanserte Apple macOS Catalina 10.15.4 en tilleggsoppdatering for å fikse problemer, men det ser ut til at oppdateringen forårsaker flere problemer som fører til muring av mac-maskiner. Les denne artikkelen for å lære mer