Ubuntu 22.04 Nginx RTMP Kullanarak Video Akış (Streaming) Sunucusu Nasıl Kurulur?
Başlarken
Video akışı için birçok kullanım durumu vardır. Twitch gibi hizmet sağlayıcılar , akışın web keşfi ve topluluk yönetimi yönlerini ele almak için çok popülerdir ve OBS Studio gibi ücretsiz yazılımlar , birden fazla farklı akış kaynağından gerçek zamanlı olarak video bindirmelerini birleştirmek için yaygın olarak kullanılır. Bu platformlar çok güçlü olsa da bazı durumlarda diğer servis sağlayıcılara bağlı olmayan bir akışa ev sahipliği yapabilmek isteyebilirsiniz.
Bu öğreticide, Nginx web sunucusunu, farklı uygulamalarda bağlanabilen ve görüntülenebilen bağımsız bir RTMP video akışını barındıracak şekilde nasıl yapılandıracağınızı öğreneceksiniz. Gerçek Zamanlı Mesajlaşma Protokolü olan RTMP, çoğu internet video akışının temellerini tanımlar. Aynı teknolojiyi kullanan daha modern platformları destekleyen HLS ve DASH akışlarını nasıl barındıracağınızı da öğreneceksiniz.
Önkoşullar
Bu kılavuzu tamamlamak için ihtiyacınız olacak:
- Bir Ubuntu 22.04 sunucusu ve sudo ayrıcalıklara sahip root olmayan bir kullanıcı. Ubuntu 20.04 sunucu kurulduktan sonra ilk yapılması gerekenler kılavuzumuzda bu ayrıcalıklara sahip bir kullanıcının nasıl kurulacağı hakkında daha fazla bilgi edinebilirsiniz. Henüz bir sunucunuz yoksa NARWEB VDS sunucularını incleyebilirsiniz.
- Nginx kurulumu için ise şu yazımıza bakabilirsiniz: Ubuntu 20.04 üzerine Nginx nasıl kurulur?
Bu yazı, URL’ler ve ana bilgisayar adları için “alan adınız”ı kullanır. Öğretici boyunca çalışırken bunu kendi alan adınızla(domain) veya IP adresinizle değiştirin.
Adım 1 — Nginx-RTMP’yi Yükleme ve Yapılandırma
Çoğu modern akış aracı, bir internet video akışının temel parametrelerini tanımlayan RTMP protokolünü destekler. Nginx web sunucusu, varsayılan olarak web sayfalarına HTTP erişimi sağlamasına benzer şekilde, özel bir URL’den minimum yapılandırmayla bir RTMP akışı sağlamanıza izin veren bir modül içerir. Nginx RTMP modülü, Nginx’e otomatik olarak dahil edilmez, ancak Ubuntu 22.04 ve diğer birçok Linux dağıtımında onu ek bir paket olarak kurabilirsiniz.
Paket listelerinizi güncellemek ve Nginx modülünü kurmak için root olmayan bir kullanıcı olarak aşağıdaki komutları çalıştırarak başlayın :
sudo apt update
sudo apt install libnginx-mod-rtmp
Modülü yüklemek otomatik olarak bir akış sağlamaya başlamaz. Nginx yapılandırma dosyanıza, akışın nerede ve nasıl kullanılabileceğini tanımlayan bir yapılandırma bloğu eklemeniz gerekecek.
veya favori metin düzenleyicinizi kullanarak nano
, Nginx’in ana yapılandırma dosyasını açın /etc/nginx/nginx.conf
ve bu yapılandırma bloğunu dosyanın sonuna ekleyin:
sudo nano /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
. . .
rtmp {
server {
listen 1935;
chunk_size 4096;
allow publish 127.0.0.1;
deny publish all;
application live {
live on;
record off;
}
}
}
listen 1935
1935
RTMP’nin standart olan bağlantı noktasındaki bağlantıları dinleyeceği anlamına gelir .chunk_size 4096
RTMP’nin de standart olan 4 KB bloklar halinde veri göndereceği anlamına gelir.allow publish 127.0.0.1
vedeny publish all
diğer kullanıcıların kendi akışlarını zorlamasını önlemek için sunucunun yalnızca aynı sunucudan video yayınlanmasına izin vereceği anlamına gelir.application live
/live
URL yolunda kullanılabilecek bir uygulama bloğu tanımlar .live on
canlı modu etkinleştirir, böylece birden fazla kullanıcı aynı anda akışınıza bağlanabilir, bu da video akışının temel bir varsayımıdır.record off
Nginx-RTMP’nin kayıt işlevini devre dışı bırakır, böylece tüm akışlar varsayılan olarak diske ayrı olarak kaydedilmez.
Dosyayı kaydedin ve kapatın. nano kullanıyorsanız CTRL+X, Y ENTER
Bu, RTMP yapılandırmanızın başlangıcını sağlar. Varsayılan olarak, 1935 bağlantı noktasını dinler; bu, güvenlik duvarınızda bu bağlantı noktasını açmanız gerektiği anlamına gelir. İlk sunucu kurulumunuzun bir parçası olarak yapılandırdıysanız , ufw aşağıdaki komutu çalıştırın:
sudo ufw allow 1935/tcp
Artık Nginx’i değişikliklerinizle yeniden yükleyebilirsiniz:
sudo systemctl reload nginx.service
Artık çalışan bir RTMP sunucunuz var. Bir sonraki bölümde, hem yerel hem de uzak kaynaklardan RTMP sunucunuza video akışını ele alacağız.
Adım 2 — Videoyu RTMP Sunucunuza Gönderme
RTMP sunucunuza video göndermenin birden çok yolu vardır. Seçeneklerden biri, bir video dosyasını doğrudan sunucunuzda oynatmak için popüler bir komut satırı ses-video yardımcı programı olan ffmpeg’i kullanmaktır. Sunucuda zaten bir video dosyanız yoksa, YouTube gibi akış platformlarından video yakalamak için bir komut satırı aracı olan youtube-dl’i kullanarak bir tane indirebilirsiniz. youtube-dl
kullanabilmek için, sunucunuzda güncel bir Python kurulumuna ihtiyacınız olacak.
İlk önce Python’u ve paket yöneticisini kurun pip
:
sudo apt install python3-pip
Ardından, youtube-dl
yüklemek için kullanın pip
:
sudo pip install youtube-dl
Artık YouTube’dan bir video indirmek için youtube-dl kullanabilirsiniz . Aklınızda herhangi bir video yoksa, NARWEB VDS tanıtan bu videoyu deneyin :
youtube-dl https://www.youtube.com/watch?v=Pvss0ydMS6E -f mp4
Not: Bazen, ERROR: unable to download video data: HTTP Error 403: Forbidden
. yazan bir hatayla karşılaşırsınız. Bunu yaşarsanız, doğru URL’ye sahip olduğunuzu iki kez kontrol edin. URL’niz doğruysa, komutu ikinci kez çalıştırmak işe yarayacaktır. Bu, youtube-dl aracılığıyla YouTube ile bağlantı oluşturmanın bir tuhaflığıdır.
Çıktınız, indirdiği video ve ses akışlarını tek bir dosyada birleştiren youtube-dl olarak dönecektir, bu normaldir:
[youtube] iom_nhYQIYk: Downloading webpage
[download] Destination: Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4
[download] 100% of 7.90MiB in 01:39
Artık mevcut dizininizde …mp4 gibi bir başlığa sahip bir video dosyanız var. Akış(streaming) için yükleyin ffmpeg
:
sudo apt install ffmpeg
Ve ffmpeg
RTMP sunucunuza göndermek için kullanın:
ffmpeg -re -i "NARWEB VDS (Virtual Dedicated Server) Hosting.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://localhost/live/stream
Bu ffmpeg
komutu, videoyu akışa uygun bir formata hazırlamak için birkaç şey yapıyor. Bu bir ffmpeg
öğretici değildir, bu nedenle çok yakından incelemenize gerek yoktur, ancak çeşitli seçenekleri aşağıdaki gibi anlayabilirsiniz:
-re
girişin yerel kare hızında okunacağını belirtir.-i "NARWEB VDS (Virtual Dedicated Server) Hosting.mp4"
giriş dosyamızın yolunu belirtir .-c:v
olarak ayarlanmıştır , bu , YouTube’dan yerel olarak aldığınız video ideo biçimini kopyaladığınız-c:a
başka parametrelere sahiptiraac -ar 44100 -ac 1
, çünkü audio’yu RTMP dostu bir formatta yeniden örneklemeniz gerekir .aac
yaygın olarak desteklenen bir ses codec bileşenidir,44100
hz ortak bir frekanstır ve-ac 1
uyumluluk amacıyla AAC belirtiminin ilk sürümünü belirtir.-f flv
RTMP ile maksimum uyumluluk için videoyu bir format kapsayıcısında sarar .
Video, 1. Adımda yapılandırma bloğunu rtmp://localhost/live/stream
tanımladığınız için gönderilmiştir ve bu video için rastgele seçilmiş bir URL’dir.
Not: Topluluk tarafından yönetilen komut örnekleri kataloğu olan ffmprovisr’denffmpeg
seçenekler hakkında daha fazla bilgi edinebilir veya resmi belgelere başvurabilirsiniz.
Video akışı sırasında ffmpeg
zaman kodlarını yazdıracaktır:
frame= 127 fps= 25 q=-1.0 size= 405kB time=00:00:05.00 bitrate= 662.2kbits/s speed=frame= 140 fps= 25 q=-1.0 size= 628kB time=00:00:05.52 bitrate= 931.0kbits/s speed=frame= 153 fps= 25 q=-1.0 size= 866kB time=00:00:06.04 bitrate=1173.1kbits/s speed=
Bu standart ffmpeg
çıktısıdır. Videoyu farklı bir biçime dönüştürüyorsanız, bunlar videonun ne kadar verimli bir şekilde yeniden örneklendiğini anlamak için yardımcı olabilir, ancak bu durumda, bunun tutarlı bir şekilde oynatıldığını görmek istersiniz. fps= 25
Bu örnek videoyu kullanarak, kesin artışlar elde etmelisiniz .
ffmpeg çalışırken, bir video oynatıcıdan RTMP akışınıza bağlanabilirsiniz. Yerel olarak yüklenmiş , veya başka bir medya oynatıcınız varsa VLC
, mpv
medya oynatıcınızda URL’yi açarak akışınızı görüntüleyebilmelisiniz . Videoyu oynatmayı bitirdikten sonra akışınız sona erecek . Süresiz olarak döngüye devam etmesini istiyorsanız, komutunuzun başına -stream_loop -1 ekleyebilirsiniz.
Artık statik video kaynaklarını komut satırından yayınlamayı öğrendiğinize göre, bir masaüstünde OBS kullanarak dinamik kaynaklardan video akışı yapmayı öğreneceksiniz.
Adım 3 — OBS aracılığıyla Sunucunuza Video Akışı (Opsiyonel)
ffmpeg
Oynatmak istediğiniz hazırlanmış bir videonuz olduğunda, üzerinden akış yapmak uygundur, ancak canlı akış çok daha dinamik olabilir. Canlı akış için en popüler yazılım OBS veya Open Broadcaster Software’dir – ücretsiz, açık kaynak kodlu ve çok güçlüdür.
OBS bir masaüstü uygulamasıdır ve sunucunuza yerel bilgisayarınızdan bağlanacaktır.
OBS’yi kurduktan sonra, bunu yapılandırmak, akışınıza eklemek istediğiniz masaüstü pencerelerinizi ve ses kaynaklarınızı özelleştirmek ve ardından bir akış hizmeti için kimlik bilgilerini eklemek anlamına gelir. Bu eğitim, tercihinize bağlı olarak akış yapılandırmanızı kapsamayacaktır ve varsayılan olarak, yalnızca masaüstünüzün tamamını yayınlayarak çalışan bir demoya sahip olabilirsiniz. Akış hizmeti kimlik bilgilerinizi ayarlamak için OBS’nin ayarlar menüsünü açın, Streaming seçeneğine gidin ve aşağıdaki seçenekleri girin:
Streaming Service: Custom
Server: rtmp://alan_adiniz/live
Play Path/Stream Key: obs_stream
obs_stream
keyfi olarak seçilmiş bir yoldur, bu durumda videonuz şurada mevcut olacaktır . Kimlik doğrulamayı etkinleştirmeniz gerekmez, ancak Adım 1’de yapılandırdığınız IP beyaz listesine ek bir giriş eklemeniz gerekir. rtmp://alan_adiniz/live/obs_stream
Sunucuya geri dönün, Nginx’in ana yapılandırma dosyasını açın ve yerel IP adresiniz için /etc/nginx/nginx.conf
ek bir giriş ekleyin . allow publish
Yerel IP adresinizi bilmiyorsanız, IP’m nedir gibi bir siteye gitmek en iyisidir, bu size nereden eriştiğinizi söyleyebilir:
sudo nano /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
. . .
allow publish 127.0.0.1;
allow publish local_IP_adresiniz;
deny publish all;
. . .
Dosyayı kaydedip kapatın, ardından Nginx’i yeniden yükleyin:
sudo systemctl reload nginx.service
Artık OBS’nin ayarlar menüsünü kapatabilir Start Streaming
ve ana arayüzden tıklayabilirsiniz! Akışınızı daha önce olduğu gibi bir medya oynatıcıda görüntülemeyi deneyin. Artık video akışının temellerini iş başında anladığınıza göre, sunucunuzu üretime daha hazır hale getirmek için sunucunuza birkaç özellik daha ekleyebilirsiniz. rtmp://alan_adiniz/live/obs_stream
Adım 4 — Konfigürasyonunuza İzleme Ekleme (Opsiyonel)
Artık Nginx-RTMP modülünü kullanarak video akışı yapacak şekilde yapılandırılmış Nginx’e sahip olduğunuza göre, bir sonraki ortak adım RTMP istatistik sayfasını etkinleştirmektir. Ana dosyanıza giderek daha fazla yapılandırma ayrıntısı eklemek yerine nginx.conf
, Nginx, sites-available/
. Bu durumda, adında bir tane oluşturacaksınız rtmp
:
sudo nano /etc/nginx/sites-available/rtmp
Aşağıdaki içerikleri ekleyin: /etc/nginx/sites-available/rtmp
server {
listen 8080;
server_name localhost;
# rtmp stat
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /var/www/html/rtmp;
}
# rtmp control
location /control {
rtmp_control all;
}
}
Dosyayı kaydedin ve kapatın. Bu stat.xsl
yapılandırma bloğundaki dosya, tarayıcınızda bir RTMP istatistik sayfasını biçimlendirmek ve görüntülemek için kullanılır. libnginx-mod-rtmp
Daha önce kurduğunuz kitaplık tarafından sağlanır , ancak varsayılan olarak sıkıştırılmış olarak gelir, bu nedenle sıkıştırmayı açmanız /var/www/html/rtmp
ve örnek yapılandırmayla eşleşmesi için dizine koymanız gerekir. Bu seçeneklerden herhangi biri hakkında ek bilgileri Nginx-RTMP belgelerinde bulabileceğinizi unutmayın .
/var/www/html/rtmp
Dizini oluşturun ve ardından stat.xsl.gz
aşağıdaki komutlarla dosyayı açın:
sudo mkdir /var/www/html/rtmp
sudo cp /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl /var/www/html/rtmp/stat.xsl
Son olarak, eklediğiniz istatistik sayfasına erişmek için güvenlik duvarınızda başka bir bağlantı noktası açmanız gerekecektir. Yönerge özellikle listen
port ile yapılandırılmıştır 8080
, bu nedenle bu port üzerinden Nginx’e erişmek için bir kural eklemeniz gerekecektir. Ancak, muhtemelen başkalarının istatistik sayfanıza erişmesini istemezsiniz, bu nedenle yalnızca kendi IP adresiniz için izin vermek en iyisidir. Aşağıdaki komutu çalıştırın:
sudo ufw allow from IP_adresiniz to any port http-alt
Ardından, bu yeni yapılandırmayı etkinleştirmeniz gerekecek. Nginx’in kuralı, onları etkinleştirmeye veya devre dışı bırakmaya karar verdiğinizde , dosyalardan sites-available/
başka bir klasöre sembolik bağlantılar (kısayollar gibi) oluşturmaktır. sites-enabled/
için tam yolları kullanarak şu bağlantıyı yapın:
sudo ln -s /etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp
Artık değişikliklerinizi işlemek için Nginx’i yeniden yükleyebilirsiniz:
sudo systemctl reload nginx.service
Artık RTMP istatistik sayfasını kontrol etmek için bir tarayıcıya gidebilmelisiniz . Video akışı sırasında sayfayı ziyaret edin ve yenileyin ve akış istatistikleri değiştikçe izleyin.http://alan_adiniz:8080/stat
Artık video akışınızı nasıl izleyeceğinizi ve üçüncü taraf sağlayıcılara nasıl ileteceğinizi öğrendiniz. Son bölümde, üçüncü taraf akış platformları veya bağımsız medya oynatıcı uygulamaları kullanmadan doğrudan bir tarayıcıda nasıl sağlanacağını öğreneceksiniz.
Adım 5 — Tarayıcılar için Modern Akışlar Oluşturma (İsteğe Bağlı)
Son bir adım olarak, kullanıcıların doğrudan bir web tarayıcısı kullanarak sunucunuzdan video akışı yapabilmeleri için daha yeni akış protokolleri için destek eklemek isteyebilirsiniz. HTTP tabanlı video akışları oluşturmak için kullanabileceğiniz iki protokol vardır: Apple’ın HLS ve MPEG DASH . Her ikisinin de avantajları ve dezavantajları vardır, bu nedenle muhtemelen ikisini de desteklemek isteyeceksiniz.
Nginx-RTMP modülü her iki standardı da destekler. Sunucunuza HLS ve DASH desteği eklemek için dosyanızdaki rtmp
bloğu değiştirmeniz gerekecektir nginx.conf
. /etc/nginx/nginx.conf
Kullanarak veya tercih ettiğiniz düzenleyiciyi açın nano
, ardından aşağıdaki vurgulanan yönergeleri ekleyin:
sudo nano /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
. . .
rtmp {
server {
. . .
application live {
live on;
record off;
hls on;
hls_path /var/www/html/stream/hls;
hls_fragment 3;
hls_playlist_length 60;
dash on;
dash_path /var/www/html/stream/dash;
}
}
}
. . .
Dosyayı kaydedin ve kapatın. Ardından, bunu dosyanızın altına ekleyin sites-available/rtmp
:
sudo nano /etc/nginx/sites-available/rtmp
/etc/nginx/sites-available/rtmp
. . .
server {
listen 8088;
location / {
add_header Access-Control-Allow-Origin *;
root /var/www/html/stream;
}
}
types {
application/dash+xml mpd;
}
Not: Başlık Access-Control-Allow-Origin *
, varsayılan olarak devre dışı bırakılan CORS veya Çapraz Kaynaklı Kaynak Paylaşımını etkinleştirir. Bu, sunucunuzdaki verilere erişen herhangi bir web tarayıcısına, sunucunun diğer bağlantı noktalarından veya etki alanlarından kaynak yükleyebileceğini bildirir. HLS ve DASH istemcileriyle maksimum uyumluluk ve diğer birçok web dağıtımında ortak bir yapılandırma geçişi için CORS gereklidir .
Dosyayı kaydedin ve kapatın. Burada bağlantı noktası kullandığınızı unutmayın; bu 8088
, bağlantı noktasında 80
veya 443
. Şimdilik güvenlik duvarınızda bu bağlantı noktasını da açmak isteyeceksiniz:
sudo ufw allow 8088/tcp
Son olarak, stream
Nginx’in HLS ve DASH için gerekli dosyaları oluşturabilmesi için web kökünüzde yapılandırma bloğuyla eşleşecek bir dizin oluşturun:
sudo mkdir /var/www/html/stream
Nginx konfigurasyonu yeniden yukleyin:
sudo systemctl reload nginx
Artık http://alan_adiniz:8088/hls/stream.m3u8
adresinde bir HLS akışınız ve http://alan_adiniz:8088/dash/stream.mpd
adresinde bir DASH akışınız olmalıdır . Bu uç noktalar, modern API’leri desteklemek için RTMP video beslemenizin üstünde gerekli tüm meta verileri oluşturur.
Bitirirken
Bu eğitimde kullandığınız yapılandırma seçeneklerinin tümü Nginx RTMP Wiki sayfasında belgelenmiştir . Nginx modülleri tipik olarak ortak sözdizimini paylaşır ve çok geniş bir yapılandırma seçenekleri kümesi sunar ve buradan ayarlarınızı değiştirmek için belgelerini inceleyebilirsiniz.
Neredeyse tüm internet video akışları RTMP, HLS ve DASH üzerinde uygulanmaktadır ve bu eğitimde keşfettiğiniz yaklaşımı kullanarak akışınızı diğer yayın hizmetleri aracılığıyla sağlayabilir veya seçtiğiniz herhangi bir şekilde gösterebilirsiniz.