LinuxNasıl yapılırSunucu

Ubuntu 22.04 Nginx RTMP Kullanarak Video Akış (Streaming) Sunucusu Nasıl Kurulur?

Başlarken

Nginx logo
Nginx

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:

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 19351935 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 ve deny 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 anlamına gelir .
  • -c:a başka parametrelere sahiptir aac -ar 44100 -ac 1, çünkü audio’yu RTMP dostu bir formatta yeniden örneklemeniz gerekir . aac yaygın olarak desteklenen bir ses codec bileşenidir, 44100hz 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 VLCmpv 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 80veya 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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir