Nastavte Nginx na Ubuntu na streamovanie živého HLS videa

HTTP Live Streaming (HLS) je veľmi robustný streamovací video protokol implementovaný spoločnosťou Apple Inc. HLS využíva HTTP transakcie, ktoré prechádzajú cez firewally, proxy servery a môžu byť ľahko distribuované cez CDN. Preto je táto technológia schopná osloviť oveľa väčšie publikum ako RTP alebo iné protokoly založené na UDP. Veľká časť živého vysielania online videa je dnes hosťovaná drahými systémami, ktoré používajú HLS, ale vo všeobecnosti sú drahé a vyžadujú veľa serverových zdrojov. Tento tutoriál vám ukáže, ako nastaviť veľmi cenovo dostupný Ubuntu 14.04 VULTR VPS na živé vysielanie HLS iba pomocou softvéru s otvoreným zdrojovým kódom.

Prvým krokom je prečítať a nastaviť váš server podľa dokumentu Vultr Doc „ Setup Nginx-RTMP on Ubuntu 14.04 “. Pokyny v tomto dokumente boli v čase písania najkomplexnejšie pre fázu nastavenia. Chcel by som spomenúť, že možno budete chcieť nahradiť „nginx-1.7.5“ „nginx-1.9.4“ alebo čímkoľvek, čo je k dispozícii najnovšia verzia Nginx. Ďalším návrhom je skompilovať Nginx so stavovým modulom HTTP stub, aby ste si dali možnosť neskôr sledovať, koľko živých divákov HLS máte.

Namiesto kompilácie s:

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

Použite tento reťazec v postupe uvedenom v dokumente s nevyhnutným predpokladom:

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

Príklad v tomto návode vytvorí „živé“ aj „mobilné“ (optimalizované) prúdy a použije ffmpeg (nainštalovaný v predchádzajúcom návode) na vygenerovanie toku HLS s upravenou bitovou rýchlosťou a optimalizovaným pre mobilné zariadenia. Príklad tiež ukáže, ako prinútiť server, aby automaticky zaznamenával vaše živé vysielanie a aby vám umožnil prehrávať nahrávky ako službu opakovaného prehrávania videa na požiadanie (VOD).

Najprv vytvorte štruktúry priečinkov potrebné na uchovávanie živých a mobilných manifestov HLS a fragmentov videa:

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

Pravdepodobne je dobré mať zapnutý firewall, ak ste tak ešte neurobili. Ak áno, musíte povoliť prenos do portov používaných Nginx a HLS. Ak chcete zatiaľ bežať bez brány firewall, ignorujte sekciu ufw nižšie.

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

Streamovanie HLS vyžaduje výrazne odlišnú konfiguráciu Nginx od konfigurácie RTMP v prvom článku. Upravte svoj nginx.confsúbor tak, aby používal nasledujúce, nahraďte „my-ip“ a „my-stream-key“ svojimi informáciami. Pre „my-stream-key“ môžete použiť čokoľvek chcete, je to len slovo, ktoré je jedinečné a pre vás užitočné. Možno budete chcieť najskôr zálohovať svoj pôvodný konfiguračný súbor a potom vložiť moje dodané konfiguračné informácie do editora a nahradiť všetko, čo tam bolo:

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

Nový 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;
}   
}
}

Ukončite stlačením klávesov Ctrl + X. Ak chcete uložiť zmeny, povedzte „áno“.

You can find clear instructions and examples of the variables possible in this nginx.conf file if you query your favorite search engine for "nginx-rtmp directives". I've been using nginx-rtmp with HLS for some years now, without using the "allow publish" and "deny publish" directives and I've seen zero instances of people using/invading my video servers. So I did not include those directives here. Read about and add these directives if you would like.

After changing the nginx.conf file, you must restart Nginx to use the new configuration:

sudo service nginx restart

Watch closely for any Nginx error messages and address any errors which may have been caused by miss-spelling, folder ownership, or permissions issues. If you have no error messages, then you're ready to create your encode stream.

You must have a video encoder in order to create the stream. I use OBS (Open Broadcaster Software) - which is open-source and works well for me. There are other solutions to choose from, which are outside the scope of this tutorial. I will not cover everything about configuring an RTMP video encoder. They all require roughly the same input variables though. The key settings you'll need to input in order to use my exact nginx.conf configuration and to function well across most players/browsers/platforms are as follows:

  1. Encoder-x264
  2. Variable bitrate (not CBR or Constant Bit Rate), Quality highest
  3. Max bitrate-600kbps
  4. Audio-Codec-AAC
  5. Audio-Format-44.1khz
  6. Audio-bitrate-64kbps
  7. FMS URL-"rtmp://my-ip:1935/live"
  8. Stream Key-"my-stream-key"
  9. Resolution-640x480
  10. FPS (frames per second)-30
  11. CFR (Constant Frame Rate) - Yes
  12. Keyframe interval-2 seconds (one keyframe every 2 seconds)
  13. x264 Encoding Profile-baseline (may work with main—depends on player used)
  14. x264 CPU Present-veryfast

I recommend trying different encoders and experimenting with them. You may desire a wide aspect ratio-or your camera (or other broadcast) materials may demand it. If so, be sure to change this info in your encoder and also the aspect ratio listed in the exec-ffmpeg section of the nginx.conf file which I've supplied; otherwise you'll get some goofy looking video feeds.

Once your encoder is set up, you can test it all. Start the encoder up with your webcam or some kind of test-fodder running on it. You can view your broadcast at this point with VLC player using URL's such as:

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

In order to view your video on a webpage you'll need an embeddable player. There are many embeddable players available which will play HLS video. I have used JW Player for some years now, but the free version will not play HLS. Flowplayer and Bitdash by Bitmovin (among other solutions) are generous enough to offer a non-commercial version of their players for free which will render your HLS stream embedded in a webpage. For this article, I have tried them both and found them both to work quite well with my Vultr/Nginx-based video server. I will briefly show how I got Flowplayer going with my testbed machine.

If you are going to use live HLS streaming in any regular, sustained, or commercial way, I would encourage you to purchase a license from Flowplayer or whichever player you decide to use. You will get a player which has fewer restrictions, more features, and can be branded to your organization. You'll also get support - which can be very important. Other than the Vultr VPS, this is really the only cost associated with the project.

Before you do anything else, it's important to take care of what is called "cross-domain" restrictions, which would otherwise shut down your ability to stream to a webpage/website. Create a crossdomain.xml file in your nginx/html folder and put instructions in it to allow data to flow between domains:

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

Najprv skopírujte (z tejto stránky) a potom vložte (kliknutím pravým tlačidlom myši) do poľa nano editora nasledujúce údaje XML:

<?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>

Stlačte Ctrl + O na zápis a potom Ctrl + X na uloženie súboru na disk a ukončenie.

Chytil som HTML5 (verziu 6.0.3) Flowplayeru, ktorý mi po rozbalení poskytol množstvo súborov a priečinok. Všetky súbory a priečinok som nahral do podpriečinka koreňového priečinka Nginx/HTML, ktorý som nazval „flowplayer“. Presná cesta bola /usr/local/nginx/html/flowplayer.

Ak chcete otestovať naše video pri vložení na webovú stránku, vytvorte niekoľko súborov HTML v koreňovom adresári priečinka Nginx/HTML pomocou nano a naplňte ich nasledujúcim obsahom.

Súbor:

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

HTML kód:

<!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>

Súbor:

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

HTML kód:

<!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>

Nezabudnite nahradiť „my-ip“ a „my-stream-key“ svojimi údajmi.

V flowplayer/skin/functional.cssšablóne so štýlmi musíte nahradiť znak „#“ cestou href="#". Výukový softvér oddeľuje cestu. V časti musíte vyplniť URL adresu src=""- zbavuje ju výukový softvér, použitie http://my-ip/live/my-stream-key/index.m3u8a http://my-ip/mobile/my-stream-key/index.m3u8, resp. Musíte tiež pridať srcznačky skriptu do hlavy pre oba jquery-1.11.2.min.jsa pre flowplayer.min.js. Značky odstraňuje výukový softvér. Ako vytvoriť tieto značky nájdete v example htmlsúbore, ktorý je súčasťou súpravy Flowplayer.

Spustite kódovač pomocou webovej kamery alebo nejakého testovacieho zariadenia. Svoje vysielanie môžete zobraziť v prehliadači pomocou nasledujúcich adries URL:

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

Na prvej stránke sa jednoducho zobrazuje každý z vašich streamov – hlavný aj ten z mobilnej platformy. Budete ich môcť spustiť a zobraziť. Všimnete si, že stream mobilnej platformy má menšiu veľkosť. Tieto kroky slúžia len na to, aby ste sa uistili, že všetko beží.

Druhá stránka zobrazuje jeden stream. Je to však nastavené spôsobom, ktorý sa nazýva „progresívne streamovanie“. To znamená, že keď divák prehráva video, server aj prehrávač sa snažia poskytnúť divákovi stream s vysokou bitovou rýchlosťou a vysokou kvalitou, ak to spojenie divákov dokáže udržať. Ak je ich pripojenie slabé a nedokáže udržať pripojenie, zobrazí sa tok s nižšou bitovou rýchlosťou (mobilný), ktorý má o 200 kbps nižšiu šírku pásma. Ak by ste chceli, mohli by ste vytvoriť viac odstupňovaných, progresívnych streamov pomocou ffmpeg a nakonfigurovať ich pomocou môjho príkladu.

Túto konfiguráciu som testoval na jednom jadre, 1GB Vultr VPS, a zistil som, že pri jedinom živom streame plus trans-hodnotený mobilný stream, ktorý vytvára pomocou ffmpeg, bolo využitie procesora menej ako 35 % a spotrebovalo iba 100 MB moja 1GB ram. Teraz je to veľmi efektívne nastavenie.

Ak plánujete streamovať video, ktoré má oveľa väčšie rozmery v pixeloch ako SD, možno zistíte, že budete musieť použiť výkonnejšie VPS. Bol som na to zvedavý a spustil som svoj hlavný stream s rozlíšením 1280 x 960 pixelov a 2 Mb/s, čo zvýšilo záťaž. Ale VPS stále využívalo iba 50% CPU a využitie pamäte zostalo na 100 MB. Pridal som tucet divákov/prehliadačov a nespôsobilo to takmer žiadny rozdiel v zaťažení VPS – zvýšila sa iba použitá šírka pásma. Som si istý, že vytváranie ďalších trans-rated streamov pomocou ffmpeg by naďalej zaťažovalo systém.

Použil som tento typ servera v produkčných prostrediach s 50 až 100 súbežnými používateľmi a zistil som, že využitie zdrojov sa s rastúcim počtom pripojení divákov zvýšilo len veľmi málo. Experimentujte s tým. Myslím si však, že väčšina používateľov by bola spokojná s použitím jednojadrového VPS s kapacitou 1 GB. Užite si svoj nový streamovací server HLS!


Leave a Comment

Ako nainštalovať Memcached na Ubuntu 14.04

Ako nainštalovať Memcached na Ubuntu 14.04

Memcached je vysokovýkonný databázový systém, ktorý môže pomôcť naplniť vašu aplikáciu. Je to veľmi rýchle, pretože nezapisuje na disk, ale namiesto toho t

Inštalácia InfluxDB na Ubuntu 14

Inštalácia InfluxDB na Ubuntu 14

Úvod InfluxDB je open source, distribuovaná databáza časových radov bez externých závislostí. Áno, čítali ste odsek bez externých závislostí

Nastavte Fail2ban Ubuntu x64

Nastavte Fail2ban Ubuntu x64

Fail2ban je program, ktorý monitoruje prihlasovaciu aktivitu na vašom serveri a blokuje problematické IP adresy. V predvolenom nastavení zablokuje adresy IP na 10 minút

Ako nainštalovať Gitea na Debian 9

Ako nainštalovať Gitea na Debian 9

Používate iný systém? Gitea je alternatívny open source systém na správu verzií s vlastným hosťovaním, ktorý používa Git. Gitea je napísaná v Golangu a je

Ako nainštalovať Wiki.js na FreeBSD 11

Ako nainštalovať Wiki.js na FreeBSD 11

Používate iný systém? Wiki.js je bezplatná a open source moderná wiki aplikácia postavená na Node.js, MongoDB, Git a Markdown. Zdrojový kód Wiki.js je verejný

Ako nainštalovať Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Ako nainštalovať Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Používate iný systém? Pagekit 1.0 CMS je krásny, modulárny, rozšíriteľný a ľahký, bezplatný a open source systém na správu obsahu (CMS) s

Ako nainštalovať MODX Revolution na FreeBSD 11 FAMP VPS

Ako nainštalovať MODX Revolution na FreeBSD 11 FAMP VPS

Používate iný systém? MODX Revolution je rýchly, flexibilný, škálovateľný, open source podnikový systém správy obsahu (CMS) napísaný v PHP. To i

Ako nainštalovať Concrete5 na CentOS 7

Ako nainštalovať Concrete5 na CentOS 7

Používate iný systém? Concrete5 je open source CMS, ktorý ponúka mnoho charakteristických a užitočných funkcií, ktoré pomáhajú redaktorom jednoducho vytvárať obsah

Ako nainštalovať a nakonfigurovať ArangoDB na CentOS 7

Ako nainštalovať a nakonfigurovať ArangoDB na CentOS 7

Používate iný systém? Úvod ArangoDB je open source databáza NoSQL s flexibilným dátovým modelom pre dokumenty, grafy a hodnoty kľúča. to je

Ako nainštalovať Laravel GitScrum na CentOS 7

Ako nainštalovať Laravel GitScrum na CentOS 7

Laravel GitScrum alebo GitScrum je nástroj na zvýšenie produktivity s otvoreným zdrojom určený na pomoc vývojovým tímom implementovať metodiku Scrum podobným spôsobom.

Ako nainštalovať PowerDNS na CentOS

Ako nainštalovať PowerDNS na CentOS

Úvod V tomto návode Vultr sa naučíte, ako nainštalovať PowerDNS. PowerDNS je program na spustenie vlastných nameserverov. Je veľmi užitočné, keď

Ako nainštalovať Flarum Forum na FreeBSD 12

Ako nainštalovať Flarum Forum na FreeBSD 12

Používate iný systém? Flarum je bezplatný a otvorený softvér fóra novej generácie, vďaka ktorému je online diskusia zábavná. Zdrojový kód Flarum je hostovaný o

Nainštalujte WordPress na OpenBSD 6.2

Nainštalujte WordPress na OpenBSD 6.2

Úvod WordPress je dominantný redakčný systém na internete. Poháňa všetko od blogov až po zložité webové stránky s dynamickým obsahom

Ako nainštalovať Harbour na CentOS 7

Ako nainštalovať Harbour na CentOS 7

Harbor je open source server registrov podnikovej triedy, ktorý ukladá a distribuuje obrazy Docker. Harbor rozširuje open source Docker Distribution b

Ako nainštalovať Crate.IO na CentOS 7

Ako nainštalovať Crate.IO na CentOS 7

Crate.IO alebo Crate je open source škálovateľný dátový sklad orientovaný na dokumenty, ktorý kombinuje štandardné rozhranie SQL s Elasticsearch, čím vám prináša

Ako nainštalovať NextCloud 9 na CentOS 7

Ako nainštalovať NextCloud 9 na CentOS 7

NextCloud, ako už názov napovedá, je sľubnou alternatívou iného open source riešenia hostenia súborov OwnCloud. V tomto článku vám ukážem ho

Vyhľadajte malvér a vírusy na CentOS pomocou ClamAV a Linux Malware Detect

Vyhľadajte malvér a vírusy na CentOS pomocou ClamAV a Linux Malware Detect

Linux Malware Detect a ClamAV sú dva účinné nástroje na jednoduché vyhľadávanie škodlivého softvéru a vírusov na serveri VPS. V tomto článku nainštalujeme robota

Nainštalujte Apache Maven na Ubuntu 18.04

Nainštalujte Apache Maven na Ubuntu 18.04

Úvod Apache Maven je bezplatný a open source nástroj na riadenie projektov používaný pre projekty Java. Môžete jednoducho spravovať zostavovanie projektov, reporting, atď

Ako nainštalovať Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Ako nainštalovať Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Používate iný systém? Subrion 4.1 CMS je výkonný a flexibilný open source systém na správu obsahu (CMS), ktorý prináša intuitívny a prehľadný obsah

Nastavenie Munin pre monitorovanie na CentOS 6 x64

Nastavenie Munin pre monitorovanie na CentOS 6 x64

Munin je aplikácia na monitorovanie a stav servera, ktorá poskytuje dve súčasti: munin – Serverový komponent, v ktorom sa munin-node hlási. Tento program

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Umelá inteligencia nie je v budúcnosti, je tu priamo v súčasnosti V tomto blogu si prečítajte, ako aplikácie umelej inteligencie ovplyvnili rôzne sektory.

Útoky DDOS: Stručný prehľad

Útoky DDOS: Stručný prehľad

Ste aj vy obeťou DDOS útokov a máte zmätok ohľadom metód prevencie? Ak chcete vyriešiť svoje otázky, prečítajte si tento článok.

Zaujímalo vás niekedy, ako hackeri zarábajú peniaze?

Zaujímalo vás niekedy, ako hackeri zarábajú peniaze?

Možno ste už počuli, že hackeri zarábajú veľa peňazí, ale premýšľali ste niekedy nad tým, ako môžu zarábať také peniaze? poďme diskutovať.

Revolučné vynálezy od spoločnosti Google, ktoré vám uľahčia život.

Revolučné vynálezy od spoločnosti Google, ktoré vám uľahčia život.

Chcete vidieť revolučné vynálezy od Google a ako tieto vynálezy zmenili život každého dnešného človeka? Potom si prečítajte na blogu a pozrite si vynálezy spoločnosti Google.

Piatok Essential: Čo sa stalo s autami poháňanými AI?

Piatok Essential: Čo sa stalo s autami poháňanými AI?

Koncept samoriadených áut vyraziť na cesty s pomocou umelej inteligencie je snom, ktorý máme už nejaký čas. Ale napriek niekoľkým prísľubom ich nikde nevidno. Prečítajte si tento blog a dozviete sa viac…

Technologická singularita: vzdialená budúcnosť ľudskej civilizácie?

Technologická singularita: vzdialená budúcnosť ľudskej civilizácie?

Ako sa veda vyvíja rýchlym tempom a preberá veľa nášho úsilia, zvyšuje sa aj riziko, že sa vystavíme nevysvetliteľnej singularite. Prečítajte si, čo pre nás môže znamenať singularita.

Vývoj ukladania dát – Infografika

Vývoj ukladania dát – Infografika

Spôsoby ukladania údajov sa môžu vyvíjať už od zrodu údajov. Tento blog sa zaoberá vývojom ukladania údajov na základe infografiky.

Funkcionality vrstiev referenčnej architektúry veľkých dát

Funkcionality vrstiev referenčnej architektúry veľkých dát

Prečítajte si blog, aby ste čo najjednoduchším spôsobom spoznali rôzne vrstvy architektúry veľkých dát a ich funkcie.

6 úžasných výhod toho, že máme v živote inteligentné domáce zariadenia

6 úžasných výhod toho, že máme v živote inteligentné domáce zariadenia

V tomto digitálnom svete sa inteligentné domáce zariadenia stali kľúčovou súčasťou života. Tu je niekoľko úžasných výhod inteligentných domácich zariadení o tom, ako robia náš život, ktorý stojí za to žiť, a ktorý zjednodušujú.

Aktualizácia doplnku macOS Catalina 10.15.4 spôsobuje viac problémov, ako ich rieši

Aktualizácia doplnku macOS Catalina 10.15.4 spôsobuje viac problémov, ako ich rieši

Spoločnosť Apple nedávno vydala doplnkovú aktualizáciu macOS Catalina 10.15.4 na opravu problémov, ale zdá sa, že táto aktualizácia spôsobuje ďalšie problémy, ktoré vedú k blokovaniu počítačov Mac. Prečítajte si tento článok a dozviete sa viac