Canlı HLS Video Akışı için Ubuntu Üzerinde Nginx Kurulumu

HTTP Live Streaming (HLS), Apple Inc. tarafından uygulanan çok sağlam bir akış video protokolüdür. HLS, güvenlik duvarlarını, proxy'leri dolaşan ve CDN'ler aracılığıyla kolaylıkla dağıtılabilen HTTP işlemlerini kullanır. Bu nedenle, bu teknoloji RTP veya diğer UDP tabanlı protokollerden çok daha geniş bir görüntüleme kitlesine ulaşabilir. Bugün çevrimiçi canlı video akışı çoğu HLS kullanan pahalı sistemler tarafından barındırılmaktadır, ancak genellikle pahalıdır ve çok fazla sunucu kaynağı gerektirir. Bu eğitici, yalnızca açık kaynaklı yazılım kullanarak HLS canlı akış etkinlikleri yapmak için çok uygun fiyatlı bir Ubuntu 14.04 VULTR VPS'nin nasıl kurulacağını gösterecektir.

İlk adım, Vultr Doc " Ubuntu 14.04'te Nginx-RTMP Kurulumu " na göre sunucunuzu okumak ve ayarlamaktır . Bu dokümandaki talimatlar, yazma aşamasında kurulum aşaması için en kapsamlı olanlardır. "Nginx-1.7.5" yerine "nginx-1.9.4" ya da Nginx'in en son sürümü ne olursa olsun koymak isteyebileceğinizden bahsedebilirim. Diğer öneri, kendinize daha sonra kaç tane canlı HLS görüntüleyici izleyebilmenizi sağlamak için Nginx'i HTTP saplama durumu modülü ile derlemektir.

Şununla derlemek yerine:

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

Önkoşul belgesinde belirtilen prosedürde bu dizeyi kullanın:

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

Bu öğreticideki örnek hem "canlı" hem de "mobil" (optimize edilmiş) akışlar oluşturacak ve bit hızı ayarlı, mobil olarak optimize edilmiş HLS akışını oluşturmak için ffmpeg (önceki öğreticide yüklü) kullanacaktır. Örnek ayrıca sunucunun canlı akışlarınızı otomatik olarak kaydetmesine ve kayıtları isteğe bağlı video (VOD) yeniden oynatma hizmeti olarak oynatmanıza izin vermeyi de gösterecektir.

İlk olarak, canlı ve mobil HLS bildirimlerini ve video parçalarını tutmak için gerekli klasör yapılarını oluşturun:

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

Henüz yapmadıysanız, güvenlik duvarınızın açık olması muhtemelen iyi bir fikirdir. Öyleyse, Nginx ve HLS tarafından kullanılan bağlantı noktalarında trafiğe izin vermelisiniz. Şimdilik güvenlik duvarı olmadan çalıştırmak istiyorsanız, aşağıdaki ufw bölümünü yok sayın.

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

HLS akışı, ilk makaledeki RTMP yapılandırmasından çok farklı bir Nginx yapılandırması gerektirir. Bilginizi nginx.conf"my-ip" ve "my-stream-key" ile değiştirerek aşağıdakileri kullanmak için dosyanızı düzenleyin. "My-stream-key" için istediğiniz her şeyi kullanabilirsiniz, bu sadece size özel ve yardımcı olan bir kelimedir. Önce orijinal yapılandırma dosyanızı yedekleyin, ardından sağlanan yapılandırma bilgilerimi düzenleyiciye yapıştırın, orada bulunan her şeyi değiştirin:

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

Yeni 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;
}   
}
}

Çıkmak için Ctrl + X tuşlarına basın . Değişiklikleri kaydetmek için "evet" deyin.

nginx.confSık kullandığınız arama motorunuzu "nginx-rtmp yönergeleri" için sorgularsanız, bu dosyadaki olası değişkenlere ilişkin açık talimatları ve örnekleri bulabilirsiniz . Nginx-rtmp'yi HLS ile birkaç yıldır "yayınlamaya izin ver" ve "yayınlamayı reddet" direktiflerini kullanmadan kullanıyorum ve video sunucularımı kullanan / istila eden kişilerin sıfır örneğini gördüm. Bu yüzden bu direktifleri buraya dahil etmedim. İsterseniz bu yönergeleri okuyun ve ekleyin.

Dosyayı değiştirdikten sonra nginx.conf, yeni yapılandırmayı kullanmak için Nginx'i yeniden başlatmanız gerekir:

sudo service nginx restart

Herhangi bir Nginx hata mesajını yakından izleyin ve yanlış yazım, klasör sahipliği veya izin sorunlarından kaynaklanabilecek hataları ele alın. Hata mesajınız yoksa kodlama akışınızı oluşturmaya hazırsınız demektir.

Akışı oluşturmak için bir video kodlayıcınız olmalıdır. Açık kaynak kodlu ve benim için iyi çalışan OBS (Open Broadcaster Software) kullanıyorum. Bu öğreticinin kapsamı dışında kalan başka çözümler de vardır. Bir RTMP video kodlayıcı yapılandırma hakkında her şeyi ele almayacağım. Hepsi de aynı giriş değişkenlerini gerektirir. Tam nginx.confyapılandırmamı kullanmak ve çoğu oyuncu / tarayıcı / platformda iyi çalışabilmek için girmeniz gereken temel ayarlar aşağıdaki gibidir:

  1. Encoder-x264
  2. Değişken bit hızı (CBR veya Sabit Bit Hızı değil), Kalite en yüksek
  3. Maksimum bit hızı-600kbps
  4. Audio-Codec-AAC
  5. Ses Formatı-44.1khz
  6. Görsel-bit hızı-64kbps
  7. FMS URL- "rtmp: // my-ip: 1935 / live"
  8. Akış Anahtarı - "akışım anahtarı"
  9. Çözünürlük-640x480
  10. FPS (saniye başına kare) -30
  11. CFR (Sabit Kare Hızı) - Evet
  12. Ana kare aralığı-2 saniye (2 saniyede bir ana kare)
  13. x264 Kodlama Profili taban çizgisi (ana ile çalışabilir - kullanılan oynatıcıya bağlıdır)
  14. x264 CPU Sunumu çok hızlı

Farklı kodlayıcıları denemenizi ve onlarla denemenizi öneririz. Geniş bir en / boy oranı isteyebilirsiniz veya kameranız (veya başka bir yayın) malzemeniz bunu isteyebilir. Öyleyse, kodlayıcınızdaki bu bilgileri ve sağladığım nginx.confdosyanın exec-ffmpeg bölümünde listelenen en boy oranını değiştirdiğinizden emin olun ; aksi halde aptal görünümlü video yayınları alırsınız.

Kodlayıcınız ayarlandıktan sonra hepsini test edebilirsiniz. Kodlayıcıyı web kameranızla veya üzerinde çalışan bir çeşit test yemiyle başlatın. Yayınınızı aşağıdaki gibi URL'leri kullanarak VLC oynatıcı ile görüntüleyebilirsiniz:

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

Bunlar sırasıyla ana ve mobil video akışlarınız içindir. IP ve akış anahtarınızı uygun şekilde değiştirin.

İlk akış kontrolünüzü başarıyla yayınladıktan sonra (ssh veya ftp aracılığıyla) canlı yayınınızın /video_recordingsVultr VPS'nizdeki klasöre kaydedildiğini kontrol edin . Bu kaydedilen dosyayı aşağıdaki gibi bir URL ile VLC'de oynatmayı da deneyebilirsiniz:

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

Nginx istatistikleri de mevcuttur (Nginx stub_status ile). Ziyaretçi / görüntüleyici istatistiklerini görüntülemek için şunlara erişin:

http://my-ip/stats

Videonuzu bir web sayfasında izlemek için gömülebilir bir oynatıcıya ihtiyacınız olacaktır. HLS video oynatacak birçok gömülebilir oynatıcı var. JW Player'ı birkaç yıldır kullanıyorum, ancak ücretsiz sürüm HLS oynatmıyor. Flowplayer ve Bitdash by Bitmovin (diğer çözümlerin yanı sıra), oyuncularının ticari olmayan bir sürümünü ücretsiz sunacak kadar cömerttir ve bu da HLS akışınızı bir web sayfasına yerleştirir. Bu makale için, ikisini de denedim ve Vultr / Nginx tabanlı video sunucumla oldukça iyi çalıştıklarını gördüm. Flowplayer'ı test edilmiş makinemle nasıl çalıştırdığımı kısaca anlatacağım.

Canlı HLS akışını düzenli, sürekli veya ticari bir şekilde kullanacaksanız, Flowplayer'dan veya hangi oynatıcıyı kullanmaya karar verdiğinizden bir lisans satın almanızı öneririm. Daha az kısıtlamaya, daha fazla özelliğe sahip olan ve kuruluşunuza markalanabilecek bir oyuncu alacaksınız. Ayrıca çok önemli olabilecek destek alırsınız. Vultr VPS dışında, bu gerçekten projeyle ilişkili tek maliyet.

Başka bir şey yapmadan önce, "web alanları arası" kısıtlamaları olarak adlandırılan ve aksi takdirde bir web sayfasına / web sitesine akış yapma yeteneğinizi kapatacak olan şeylerle ilgilenmeniz önemlidir. Klasörünüzde bir crossdomain.xmldosya oluşturun nginx/htmlve verilerin alanlar arasında akmasına izin vermek için talimatlar yerleştirin:

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

Önce (bu sayfadan) kopyalayın ve ardından aşağıdaki XML verilerini nano editör alanına yapıştırın (sağ tıklayın):

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

Yazmak için Ctrl + O tuşlarına , ardından dosyayı diske kaydetmek ve çıkmak için Ctrl + X tuşlarına basın .

Sıkıştırıldığında bana bir dizi dosya ve klasör veren HTML5'i (sürüm 6.0.3) aldım. Tüm dosyaları ve klasörü "flowplayer" adını verdiğim Nginx / HTML kök klasörünün bir alt klasörüne yükledim. Kesin yol buydu /usr/local/nginx/html/flowplayer.

Bir web sayfasına yerleştirildiğinde videomuzu test etmek için nano kullanarak Nginx / HTML klasörünün kökünde birkaç HTML dosyası oluşturun ve bunları aşağıdaki içeriklerle doldurun.

Dosya:

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

HTML Kodu:

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

Dosya:

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

HTML Kodu:

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

Verilerinizle "my-ip" ve "my-stream-key" ifadelerini kullandığınızdan emin olun.

flowplayer/skin/functional.cssStil sayfasındaki "#" işareti yolunu değiştirmeniz gerekir href="#". Öğretici yazılım yolu çıkarır. Sen bir URL girmelisiniz src=""o öğretici yazılım, kullanım ile çıkarılır ediliyor - parçası http://my-ip/live/my-stream-key/index.m3u8ve http://my-ip/mobile/my-stream-key/index.m3u8sırasıyla. Ayrıca komut eklemeniz gerekir srcher ikisi için kafasında etiketleri jquery-1.11.2.min.jsve için flowplayer.min.js. Etiketler öğretici yazılım tarafından çıkarılıyor. example htmlFlowplayer kitinde bulunan dosyaya bakarak bu etiketlerin nasıl biçimlendirileceğini bulabilirsiniz.

Kodlayıcıyı web kameranızla veya üzerinde çalışan bir çeşit test yemiyle başlatın. Aşağıdaki URL'leri kullanarak yayınınızı bir tarayıcıda görüntüleyebilirsiniz:

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

İlk sayfa akışlarınızın her birini gösterir - ana sayfa ve mobil platform. İkisini de başlatabilir ve görüntüleyebilirsiniz. Mobil platform akışının daha küçük olduğunu fark edeceksiniz. Bu adımlar sadece her şeyin çalıştığından emin olmak içindir.

İkinci sayfa tek bir akışı gösterir. Ancak "aşamalı akış" adı verilen bir şekilde kurulur. Bunun anlamı, bir izleyici videoyu oynattığında, hem sunucunun hem de oynatıcının izleyici bağlantısı videoyu sürdürebiliyorsa izleyiciye yüksek bit hızlı, yüksek kaliteli akış sağlamaya çalışır. Bağlantıları zayıfsa ve bağlantıyı sürdüremezse, bant genişliğinde 200 kbps daha düşük olan düşük bit hızı (mobil) akışını göstermek için aşağı yuvarlanır. İsterseniz, ffmpeg ile daha dereceli, aşamalı akışlar oluşturabilir ve bunları örneğimi kullanarak yapılandırabilirsiniz.

Bu yapılandırmayı tek bir çekirdek, 1GB Vultr VPS üzerinde test ettim ve tek bir canlı akışla ve ffmpeg ile oluşturduğu trans-derecelendirilmiş mobil akışla, cpu kullanımının% 35'ten az olduğunu ve yalnızca 100MB benim 1GB koçum. Şimdi bu çok verimli bir kurulum.

SD'den piksel boyutlarında çok daha büyük olan video akışını planlıyorsanız, daha güçlü bir VPS kullanmanız gerekebilir. Bunu merak ettim ve ana akışımı 1280x960 piksele ve 2Mbps'ye kadar yayınladım - şeylere ek yük koydu. Ancak VPS hala sadece% 50 CPU kullandı ve bellek kullanımı 100MB'da kaldı. Bir düzine izleyici / tarayıcı ekledim ve VPS'deki yükte neredeyse hiçbir fark yaratmadı - sadece kullanılan bant genişliği arttı. Ffmpeg ile ek trans-rated akışlar oluşturmanın sisteme ek yük koymaya devam edeceğinden eminim.

Bu tür sunucuyu 50 ila 100 eşzamanlı kullanıcısı olan üretim ortamlarında kullandım ve artan görüntüleyici bağlantılarıyla kaynak kullanımının çok az arttığını gördüm. Onunla deney yapın. Ancak çoğu kullanıcının tek çekirdekli 1 GB VPS kullanmaktan memnun olacağını düşünüyorum. Yeni HLS akış sunucunuzun tadını çıkarın!



Leave a Comment

CentOS 7de LibreNMS Kullanarak Cihazlarınızı İzleyin

CentOS 7de LibreNMS Kullanarak Cihazlarınızı İzleyin

CentOS 7 üzerinde LibreNMS kullanarak ağ cihazlarınızı etkili bir şekilde izleyin. Ağ izleme için gerekli adımları ve yapılandırmaları öğrenin.

Counter-Strike: Global Offensive Server Nasıl Kurulur?

Counter-Strike: Global Offensive Server Nasıl Kurulur?

Counter-Strike: Global Offensive sunucusu kurmak için gerekli adımlar. Gerekli araçlar ve yükleme süreci hakkında bilgi.

Ubuntu 16.04 LTS Üzerinde OpenNMS Kurulumu

Ubuntu 16.04 LTS Üzerinde OpenNMS Kurulumu

OpenNMS, çok sayıda cihazı izlemek ve yönetmek için kullanılabilen bir açık kaynak ağ yönetim platformudur. Ubuntu 16.04 LTS üzerinde OpenNMS kurulumu için tüm adımları keşfedin.

Ubuntu 16.04te LibreNMS Kullanarak Cihazlarınızı İzleyin

Ubuntu 16.04te LibreNMS Kullanarak Cihazlarınızı İzleyin

Farklı Bir Sistem mi Kullanıyorsunuz? LibreNMS tam özellikli bir açık kaynak ağ izleme sistemidir.

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?