Nginx-RTMP aracılığıyla çevrimiçi yayın: birkaç hazır tarif.

Canlı video akışı gerçekten büyük bir şey. Akıllı telefonunuzda canlı yayın uygulamasını anında çalıştırmaktan daha kolay ne olabilir? Doğrudan sizi veya çevrenizde gerçekleşen bir olayı yayınlayacak… Ve siz bir videoyu yayınlarken arkadaşlarınız da onu mobil cihazlarından izliyor. Ve bunu gerçekleştirmek için ihtiyacınız olan tek şey akıllı telefonunuzdaki kamera ve dahili mikrofon… Çok eğlenceli değil mi?

Canlı yayın, kullanıcıların arkadaşlarıyla bağlantı kurması ve markaların müşterileriyle etkileşim kurması ve onlara ulaşması için farklı bir yöntem sundu.

Ancak işletmeniz veya startup'ınız, çok fazla kaynak ayırmadan ve geliştiricilerin saatlerce çalışmasına gerek kalmadan Android için canlı akışı nasıl kolayca uygulayabilir? Canlı yayının arkasında hangi teknoloji duruyor ve onu gerçeğe dönüştürüyor?

Bu sorulara kapsamlı yanıtlar bulmak için konuyu derinlemesine inceleyelim ve ayrıca uygulamanıza canlı video akışı özelliği ekleme sürecini kolaylaştıran ve hızlandıran kullanıma hazır çözümler hakkında daha fazla bilgi edinelim.

Canlı akışın özellikleri nelerdir?

Kullanıcının videoları istediği zaman seçip izleyebileceğini varsayan isteğe bağlı video formatının aksine, canlı yayın videoları zaman içinde belirli bir ana bağlanır ve kaydedilirken görüntülenir.

İşte canlı yayın süreci nasıl görünüyor. Video ve ses, video oynatıcının ve medya sunucusunun değiş tokuş ettiği mesajlar aracılığıyla aktarılır. Video oynatıcı önce medya sunucusuna bağlanır. Sunucu videonun bir kısmını oynatıcıya aktarır. Bu video parçası mevcut oynatma süresine karşılık gelir. Birkaç saniyelik bir arabellek, videonun gecikme veya kesinti olmadan oynatılmasını sağlar. Bu işlem web yayınının devam ettiği süre boyunca sürekli olarak tekrarlanır.

Ancak canlı yayın hiçbir zaman medya dosyalarını bir bütün olarak aktarmaz (böylece bant genişliğinden tasarruf edilir). Bunun yerine dijital video, ses ve verilerin aktarımından ve akışından sorumlu medya sunucuları aracılığıyla etkinleştirilir. Canlı akış, kaynak video dosyalarına koruma sağlar çünkü bunlar izleyicinin bilgisayarına kopyalanamaz. Ek yazılımın yardımıyla canlı yayın, canlı sohbeti ve soru-cevap işlemlerini de destekler.

Medya verilerini iletmek için mevcut olan tek bir format yoktur. Bunun yerine seçebilirsiniz o teknik ihtiyaçlarınıza en uygun olanı.

Hangi video akışı teknolojileri mevcut?

Uygulamanızda canlı yayını etkinleştirmenin birden fazla yolu vardır. Aşağıda mevcut teknolojilere kısaca göz atacağız. Bu şekilde, temel özelliklerini ve sunmak için en iyi oldukları içerik türünü ayırt edebileceksiniz:

  • RTMP Protokolü

Gerçek Zamanlı Mesajlaşma Protokolü (veya sadece RTMP), video ve ses akışlarının ve gerçek zamanlı veri mesajlarının web üzerinden yüksek performanslı aktarımı için geliştirildi. Gerçek zamanlı akış, Flash sunucusu ile Flash oynatıcı arasında iki yönlü bir bağlantı kurularak etkinleştirilir.

Adobe Flash Player, video ve ses oynatmayı destekleyen en yaygın RTMP istemcisidir. Şu anda AMF, SWF, FLV ve F4V (Adobe Flash Player formatlarıyla uyumlu) formatlarında video akışları ve AAC ve MP3 formatında ses sağlayan ürün ve teknolojilerin geliştirilmesine yönelik açık kaynaklı bir spesifikasyon olarak mevcuttur.

  • HTTP tabanlı akış protokolleri (HLS ve HDS)

HLS formatı MPEG2-TS'yi temel alır ve iOS cihazlarına akışla ilgilidir. HTML5'in bir parçası değil. HLS, birden fazla akışı meta veri bilgileriyle birleştirir ve farklı medya verileri arasında kolayca geçiş yapar.

HDS, videolar için Adobe formatını kullanır ve MPEG-4 dosyalarının parçalarını sunar. MPEG formatı, meta verilerin ve ses ve video akışlarının farklı konumlarda saklanmasına olanak tanır. HTTP Dinamik Akışı, büyük medya kitaplıkları için kullanışlı bir teknolojidir. Bant genişliğinin azaltılmasına yardımcı olur, pil ömründen tasarruf sağlar ve HLS'ye kıyasla daha iyi bir kullanıcı deneyimi sağlar.

  • Silverlight akış protokolü

Bu video akış formatı, Adobe Flash gibi zengin İnternet uygulamaları ve film çalıştırmak için kullanılır. Microsoft Silverlight artık Chrome tarayıcısında çalışmamasına rağmen Internet Explorer ve Mozilla Firefox'ta mevcuttur.

  • MPEG-DASH

MPEG-DASH, HTTP sunucularından gelen medya için yüksek kaliteli canlı ve isteğe bağlı video akışı sağlar. Biçim, her iki akış türü için video segmentleri arasına reklam eklenmesine olanak tanır. Medya içeriği bir kez şifrelenir ve farklı DRM (Dijital Haklar Yönetimi) şemalarının yardımıyla istemci bilgisayara iletilir.

  • Aşamalı indirme akışı

Aşamalı indirme ile medya içeriği bir sunucudan istemci bilgisayara HTTP protokolü aracılığıyla aktarılır. Dosya barındırmak veya izlemek için bir medya dosyasını indirmek için herhangi bir akış sunucusuna ihtiyaç duymaz. Aşamalı indirme, tam bir video indirme işleminden önce videonun oynatılmasını sağlar.

4K videonun yükselişi, kullanıcıların kalite standartları ve sorunsuz deneyime yönelik yüksek beklentileri, yeni etkili platformların geliştirilmesi ve daha hızlı İnternet bağlantısı, video akış formatlarına yönelik talepleri daha katı hale getiriyor. Mevcut teknolojilerin çeşitliliğine bakılmaksızın, geliştiriciler arasında en yaygın ve favori akış protokollerinden biri olan RTMP'ye odaklanacağız.

Peki RTMP protokolü nedir ve neden bu kadar iyidir?

Macromedia (şu anda Adobe) tarafından oluşturulan Gerçek Zamanlı Mesajlaşma Protokolü, uyarlanabilir bit hızı akışını (ABS) sağlar. Bant genişliği değiştiğinde video kalitesi otomatik olarak buna göre ayarlanır. RTMP, kararlı bağlantının ve düşük gecikmenin korunmasına öncelik veren İletim Kontrol Protokolünü (TCP) temel alır. İçeriğin türüyle ilgili olarak RTMP, hem önceden kaydedilmiş hem de canlı medya verilerinin ve metin bilgilerinin iletilmesine olanak tanır.

Üstelik RTMP yalnızca mobil akış için kullanılamaz. RTMP sunucusu medya verilerini hem web uygulamalarına hem de mobil cihazlara gönderebilir.

Çoğu zaman sağladığı aşağıdaki avantajlardan dolayı övülür:

  • Canlı akış için özel olarak optimize edilmiştir

RTMP'nin sağladığı en büyük fayda, video ve ses veri aktarımının optimizasyonudur. Akış için, canlı akış için hayati önem taşıyan ve ara belleğe alma gerektirmeyen düşük gecikmeli içerik aktarımına uygun özel 1935 bağlantı noktasını kullanır.

  • Olgun bir teknolojidir

RTMP, 10 yılı aşkın süredir canlı yayın için kullanılıyor. Bir geliştirici için RTMP Sunucusunu kurmak kolay bir iştir. Bir kullanıcı için aynı anda farklı formatlarda video akışı etkinleştirilir. Oyuncu doğrulama gibi güvenlik özellikleri de uygulanır.

  • Yayınlanan videonun herhangi bir bölümünü izleyebilirsiniz

Tüm RTMP sunucuları, gelen medya akışlarının kaydedilmesine olanak tanır ve videoları baştan görüntüleme olanağı sağlar. Kullanıcı, yayının geçerli anına kadar videonun bazı bölümlerini atlayabilir. Bu özellik özellikle uzun videolar (10 dakikadan fazla) için kullanışlıdır ve herhangi bir bölümüne kolayca geçiş yapılmasına olanak tanır.

  • En popüler gerçek zamanlı akış protokolüdür

RTMP, donanım bağımlılığı gerektirmeyen ve Windows, Mac, Linux, Android, iOS ve Windows mobile ile uyumlu, platformdan bağımsız bir protokoldür. Ayrıca PlayStation, Xbox One ve PS Vita gibi oyun cihazlarında da yaygın olarak kullanılmaktadır.

RTMP nasıl çalışır?

Basit bir ifadeyle RTMP akışı aşağıdaki üç öğeden oluşur:

  • Bir medya akışı oluşturan ve RTMP protokolüyle bir sunucuya yayın yapan bir istemci. İstemci "yayıncıları" olarak, FFMPEG tabanlı oynatıcılar, VLC Oynatıcı, YouTube istemcileri ve AVLib tabanlı çözüm gibi farklı platformlardaki birçok uygulamayı kullanabilirsiniz.
  • Gelen bir akışı işleyen ve gerektiğinde işleme ve kaydetme işlemlerini gerçekleştiren bir sunucu. Sunucu ayrıca diğer istemcilere yayın sağlar. Sunucular arasında en iyi seçenekler Wowza Medya Sunucusu, Flussonic Medya Sunucusu ve Basit RTMP Sunucusu olacaktır.
  • İzleyiciler, yayınlanan akışları izleyebilen tüm istemcileri temsil eder. Bu tür medya akışlarını görüntülemek için RTMP protokolünü destekleyen herhangi bir oynatıcıyı kullanabilirsiniz. İyi haber şu ki, mevcut tüm platformlar için şu anda kullanılan oynatıcıların neredeyse tamamı RTMP akışlarını destekliyor. Flash Player, VLC veya Media Player Classic'i seçebilirsiniz.

En karmaşık ve kaynak yoğun olanı yayıncı uygulamalarıdır. 'Yayın akışı', medya işlemeyi, karıştırmayı, kodlamayı ve RTMP protokolü üzerinden bir sunucuya daha fazla akışı içerir. Önemli ölçüde platforma ve donanıma bağlıdır ve çok sayıda destekleyici kaynak gerektirir.

RTMP protokolüyle mümkün olduğunca fazla veri iletmek için video ve ses farklı boyutlardaki parçalara bölünür. Varsayılan boyutlar ses için 64 bayt ve video için 128 bayttır. Video yığın boyutları, kullanıcı ile sunucu arasındaki etkileşim formatına göre belirlenir.

Medya parçaları daha sonra tek bir bağlantı üzerinden serpiştirilir ve çoğullanırken, bir kanalın bant genişliği ve gecikme süresiyle ilişkilendirilir. Yayıncıdan sunucuya gelen akış, farklı veri türlerini (örn. video, ses hizmeti vb.) içeren küçük veri bloklarından oluşur. RTMP akışı aynı anda birkaç farklı veri bloğunu aktarabilir, böylece hem videoyu hem de sesi kapsülleyebilir ve uzaktan prosedür çağrılarına olanak tanır.

İstemci akışı RTMP oynatıcısında açtığında RTMP Sunucusuna bir istek gönderilir. Bir oturum başlatılır ve hizmet verileri alışverişi gerçekleşir. İstemci RTMP oynatıcı, devam eden akışla ilgili hizmet veri paketlerinin gerekli kısmını aldığında, RTMP ortam akışının kodunu çözmeye, arabelleğe almaya ve görüntülemeye başlar.

RTMP ile medyanın herhangi bir geçici depolama alanında saklanmasına gerek yoktur. İstemciler ve sunucular arasında doğrudan akışa devam eder. Bant genişliği kapasitesi izin veriyorsa aynı akış, istek gönderen çok sayıda istemciye yönlendirilir. Bir ağa birden fazla medya sunucusu bağlanırsa akış kapasitesi artar. Akış işlemi, sunucu veya oynatıcı oturumu bitirene kadar devam eder.

Android uygulamanızda video akışı yapmak için RTMP'yi nasıl kullanabilirsiniz?

RTMP protokolünü destekleyen herhangi bir oynatıcının yardımıyla herhangi bir platformda RTMP akışını izleyebilirsiniz. Android için en popüler üçüncü taraf oynatıcılar MX, VLC ve BS Oynatıcıların yanı sıra FFMPEG'yi destekleyen diğer oynatıcılardır. Uygulamanın içinden RTMP'yi izlemek için geliştiricinin RTMP akışlarını okuyabilen herhangi bir oynatıcı kitaplığını entegre etmesi gerekir. Bunlar ijkPlayer ve VLC SDK'dır.

Onix ekibi, video akışı için kolay ve güzel bir çözüm bulmaya teknolojik katkılarda bulundu ve Android RTMP akışı için Onix'in kendi harici kütüphanesi olan AVLib'i oluşturdu.

Android uygulamaları için canlı yayında bunun nasıl çalıştığını ve bu fikrin nasıl ortaya çıktığını görelim.

AVLib, Android RTMP akışına ilişkin temel sorunu nasıl çözüyor?

https://rtmplib-android.com/

Android geliştirici ekibimiz AVLib fikrine neredeyse tesadüfen geldi, ancak harika bir sonuç ve etki yarattı. Android cihazlar için video ve sesin RTMP sunucularına yayınlanmasına yönelik bir özellik ekleme görevi üzerinde çalışırken ciddi bir sorunla karşılaştılar. Müşterinin gereksinimleri, uygulamanın bir Android kamera aracılığıyla video ve ses verilerini maksimum kapasitede aktarabilmesi gerektiğini belirtti. Ayrıca, daha eski mobil cihazlara sahip kullanıcıların bunu kullanabilmesi ve bir kullanıcı için bir takım uygun kullanılabilirlik ayarlarına sahip olabilmesi için, minimum sürüm olarak Android 4.0 desteğinin etkinleştirilmesi de gerekliydi.

Onix ekibi, mevcut hem ticari hem de açık kaynaklı akış kitaplıkları üzerinde derin bir araştırma ve karşılaştırma gerçekleştirdi. Ama tatmin edici bir sonuç yok. Piyasada teknik ihtiyaçlarımızı tam anlamıyla karşılayabilecek benzer bir çözümün olmadığı ortaya çıktı. Ekip üyeleri, Android için RTMP akışını destekleyebilecek kendi harici kitaplıklarını oluşturma kararına hızla vardılar. Şu anda kullanımda olan çok sayıda Android cihazı ve işletim sistemi sürümü olduğundan, bu kitaplık, mevcut tüm Android kullanıcılarının akış ihtiyaçlarını desteklemek üzere oluşturuldu.

Ancak belirli bir görevi kesinlikle gerekli ölçüde çözen tek seferlik bir araç oluşturmaya zaman harcamak hiçbir zaman mantıklı değildir. Peki ya benzer bir durum tekrarlanırsa? Neden teknolojinin sunduğu en iyi şeyleri kullanıp iyi test edilmiş bir yazılım ürünü oluşturmayasınız?

Zarif, esnek ve basit bir çözüm geliştirmeyi amaçladık; böylece herhangi bir üçüncü taraf Android ekibi veya RTMP kitaplığı arayan bir geliştirici, tekerleği yeniden icat etmek zorunda kalmadan bunu bir uygulamaya kolayca entegre edebilir. Ve başardık! AVLib beklediğimiz tüm özellikleri bir araya getiriyor ve video yayınının temel görevini kapsamlı bir şekilde çözüyor.

AVLib nasıl geliştirildi ve neden güvenilir bir RTMP kitaplığıdır?

AVLib, gerçekten gurur duyduğumuz bir RTMP kütüphanesidir. Müşterinin her karmaşıklık seviyesinde canlı yayın gereksinimlerini çözen bir yazılım ürünüdür. Android Studio için hemen mobil uygulamaya entegre edilen, kullanıma hazır bir araçtır.

AVLib, aşağıdaki ilkelere dayanan kullanışlı ve istikrarlı bir çözümü temsil eder:

  • Uygulamayla kolay entegrasyon

Bir Android geliştiricisi için AVLib'in entegrasyon sürecini tamamlamak ve bir uygulamaya canlı özellik akışı eklemek yaklaşık bir saat sürecektir.

  • Maksimum kapasite

RTMP kütüphanesini hayata geçirmek ve yüksek kapasite potansiyeliyle güçlendirmek için ekibimiz C programlama dilini seçti. Konveyör mantığından kodlamaya, RTMP ile çalışmaya ve işlemeye kadar AVLib'e dahil olan her bir fonksiyon saf C kullanılarak oluşturulmuştur.

  • Kullanıcı arayüzü özel oluşturulmuş kitaplık

AVLib esnektir ve kullanıcı arayüzü tasarımı (ör. düğmeler, metin) ve video ayarlarında (ör. çerçeve çözünürlüğü, ses, codec kalitesi, bit hızları) müşteri ihtiyaçlarına göre kolayca ayarlanabilir.

  • Mevcut tüm Android cihaz türlerinin desteği

Bu RTMP kitaplığı hiçbir bağımlılığı olmayan tek bir .aar dosyası olarak gelir. AVLib, çeşitli Android cihazlarla uyumlu olduğundan ve Android işletim sistemi sürüm 4.0 ve üzerini desteklediğinden emin olmak için test edildi.

AVLib'in özellikleri hakkında daha fazla ayrıntıyı bulabilirsiniz.

AVLib'in geliştirme süreci gerçekten zorluklarla doluydu ve Android ekibimizin düşünmesi ve çabalaması gerekiyordu.

  • Aksiyon kameralarından yayın mı yapıyorsunuz? Evet!

AVLib'in kendine özgü özelliklerinden biri, aksiyon kameralarından anında video ve ses akışı yapabilmesidir. Bu özelliği etkinleştirmek için iki ağ arayüzüyle aynı anda çalışmanız gerekir. yan C'deki modülün. Görev başarıyla tamamlandı ancak Android işletim sisteminin kaynak kodunun kapsamlı bir şekilde araştırılmasını ve sürekli hata ayıklamayı gerektiriyordu.

  • Yayın yaşam döngüsünü oluşturma

Geliştirme aşamasında karşılaştığımız bir diğer önemli zorluk da kameranın sorunsuz çalışmasını ve yaşam döngüsünün farklı cihazlarda işlenmesini sağlamaktı. Bu oldukça zaman alıcıydı ve çok sayıda inceleme çalışması gerektiriyordu.

Başlangıçta, RTMP (Gerçek Zamanlı Mesajlaşma Protokolü), ses ve video akışlarını, metin mesajlarını ve diğer verileri web üzerinden iletmek için Adobe Systems tarafından oluşturuldu. Çalışmasının ana prensibi, sunucu ile kullanıcının Flash Player'ı arasındaki etkileşimi başlatmaktır. RTMP, TCP'yi temel alır; bu, yüksek önceliğinin istikrarlı bağlantının sürdürülmesinde ve düşük gecikmeli etkileşim sağlanmasında yattığı anlamına gelir. Düzgün akışlar yayınlamak ve mümkün olduğunca fazla veri iletmek için RTMP sunucusu, bilgileri parçalara böler. Daha sonra, kullanıcı ile sunucu arasındaki etkileşimin biçimine bağlı olarak parçaların boyutu tanımlanır.

RTMP'nin daha ilginç yanı, bir medya oturumu sırasında veri paketlerini ileten farklı sanal kanalları içermesidir. Bu kanallar şunları içerebilir: RPC istekleri ve sonuçları için bir kanal, kontrol mesajları için bir kanal, ses ve video akışı için kanallar. Üstelik birbirlerine herhangi bir teknik sorun yaşatmadan aynı anda çalışabiliyorlar.

RTMP ve RTSP

Veri aktarımı açısından RTSP adı verilen iyi bilinen başka bir protokol daha vardır. Şimdi RTMP ve RTSP protokolleri arasındaki farklara bir göz atalım.

RTSP'nin (Gerçek Zamanlı Yayın Protokolü) temel amacı, akış sunucularının faaliyetlerini sürdürmektir. Ayrıca bu protokol, istemci ile sunucu arasında etkileşim kurar. RTSP, son kullanıcıların oynat, duraklat ve durdur gibi basit komutlarla medya oturumunu kontrol etmesine olanak tanır. Ayrıca, istemcilerin indirmenin tamamlanmasını beklemeden herhangi bir parçadan video izlemesine olanak tanır.

RTMP de yukarıda belirtilen özellikleri sürdürmektedir. Ancak RTMP sunucusu, RTMP protokolü aracılığıyla istemcinin oturumu başlatmasından oturumun kapanmasına kadar yaptığı her işlemi izleyebilir. Bu şekilde, RTMP içindeki raporları daha kesin hale getirir ve belirli bir medya oturumu sırasında kullanıcının etkinliğinin tam bir resmini sunar. Aynı şekilde RTMP, RTSP de canlı yayın yapma yeteneğine sahiptir. Ancak, akışlı veri iletimi RTSP'nin ana görevi değildir, bu nedenle bu amaç için bazı ek protokollere ihtiyaç duyar.

Nasıl çalışır?

RTMP çalışmasının prensibi basittir. RTMP akışını başlatmak için RTMP sunucusu ile istemci RTMP oynatıcısı arasında etkileşimin kurulması yeterlidir. Bu iletişim kurulduktan sonra sunucu, medyayı sabit bir bayt akışı olarak iletmeye başlar. Bu işlem, sunucu veya oynatıcı oturumu bitirene kadar devam eder.

İşin iyi yanı, RTMP protokolünün çok esnek olması ve çeşitli formatlarda ses, video ve metin bilgilerinin sağlanması yeteneklerine ait olmasıdır. Örneğin, RTMP protokolü MP4 ve FLV formatlarında video akışını, MP3 ve AAC formatında ses akışını sağlar. Üstelik bu protokol sayesinde RTMP sunucusu mobil cihazların yanı sıra web uygulamalarına da medya gönderir. Bu amaçla kullanıcının tarayıcısında veya mobil cihazında Flash Player'ın yüklü olması gerekir. Daha sonra akışın tüm medya bilgilerini içeren swf dosyası Flash Player tarafından oynatılacaktır. Ancak RTMP protokolünün en büyük faydalarından biri canlı ve isteğe bağlı akışa uygulanabilmesidir. Bu akış süreçlerinin her birine bir göz atalım.

Canlı yayın

Canlı video akışı, RTMP protokolünün temel özelliklerine aittir. Onun yardımıyla videonuzu kayıt işlemi sırasında canlı olarak yayınlayabilirsiniz. Canlı yayın esas olarak spor etkinlikleri, gösteriler, konserler vb. için kullanılmaktadır. Bu durumda RTMP protokolü tam anlamıyla yeri doldurulamaz. HTTP protokolüyle karşılaştırıldığında akışta gerçek zamanlı gecikme süresi düşüktür ve on saniyeden fazla gecikmesi profesyonel canlı akış için uygun değildir.

Canlı akışa yönelik olağanüstü RTMP işlevselliğinin daha canlı bir örneğini inceleyelim. Örneğin, RTMP protokolünü destekleyen popüler IP kameralar yerleşik hoparlörlere sahiptir, böylece yalnızca videoyu canlı olarak görmekle kalmaz, aynı zamanda yayın sürecine dahil olabilir ve yayıncılara fikirlerinizi ifade edebilirsiniz.

İsteğe bağlı akış

İsteğe bağlı akış, kullanıcıların seçilen medya içeriğini ne zaman izleyeceklerini seçmelerine olanak tanır; bu, bu içeriği yayınlandığı sırada gözlemlemek yerine kendileri için daha uygundur. Kural olarak, isteğe bağlı video (VOD) birkaç nedenden dolayı kullanılır: HD kalitesi adına çevrimiçi izleyici sayısı az olduğunda, düşük İnternet bağlantı hızında bile sorunsuz bir şekilde oynatıldığı için. RTMP protokolüyle VOD bile daha verimlidir. Öncelikle multicast desteği sağlıyor. Çalışma ağınızda tek bir akış olmasını ve bunu birden fazla kullanıcıya sağlamak istiyorsanız RTMP ile her kullanıcı için ayrı bağlantı oluşturmanıza gerek kalmaz. HTTP veya CDN gibi diğer protokollerde bu özellik yoktur. Ayrıca RTMP, bağlantı sorunları durumunda kullanıcıların video akışına yeniden bağlanmasını sağlar. Bağlantı sorunları sırasında video arabellekten oynatılır ve kullanıcı yeniden bağlandığında arabellek dolmaya başlar ve bu şekilde video akışında sık sık duraklamalar önlenir.

RTMP uygulamaları

Açıkçası, tüm bu bilgiler RTMP'nin nasıl uygulanacağını merak etmenize neden oluyor. Bu, platformlar arası bir protokoldür ve Windows, Mac, Linux, Android, Windows Mobile, iOS'ta çalışır. Konsolunuz var ve oyun oynamaktan hoşlanıyor musunuz? Xbox One, PlayStation ve PS Vita gibi cihazlar için RTMP servislerini rahatlıkla kullanabilirsiniz.

RTMP protokolüne uygun platformların çeşitliliği nedeniyle, var uygulanması için birçok seçenek. Komut satırı uygulamasından tam özellikli açık kaynak uygulamasına kadar değişebilirler.

Komut satırı uygulaması

RTMPDump aracı, RTMP akışlarının kaydedilmesi, canlı yayın ve isteğe bağlı video ile mükemmel bir şekilde başa çıktığı için komut satırı uygulaması için kullanılır. Ayrıca RTMPDump, Linux, Android, Mac OS X ve Microsoft'ta kullanılabilen açık kaynaklı bir araçtır. Bu yardımcı program, küçük boyutu ve şifrelenmiş RTMP olan RTMPE'nin ve RTMPS - güvenli RTMP'nin şifresini çözme yeteneği nedeniyle çok popülerdir.

RTMPDump paketinde üç program bulunur: rtmpdump, rtmpsrv ve rtmpsuck. Bu programların her biri belirli işlevleri yerine getirir. Örneğin rtmpdump, RTMP sunucularına bağlantı kurmak ve akışın kendisini yakalamak için kullanılır; rtmpsuck akışı da yakalayabilir veya rtmpdump için önemli parametrelerin toplanmasına yardımcı olabilir. Rtmpsrv'nin ana işlevi bağlantıları ve akışları takip etmektir.

Tam uygulama

Tam uygulamayla daha fazla ilgileniyorsanız, şu üç yazılıma ihtiyacınız olacak: canlı video kodlayıcı, medya akış sunucusu ve video istemci uygulaması. Hangi canlı video kodlayıcıyı kuracağınızı bilmiyor musunuz? Ardından Flash Media Live Encoder, FFmpeg, WireCast, Wowza Transcoder, Nimble Streamer Transcoder arasında seçim yapabilirsiniz. Ancak lütfen en popülerinin Adobe web sitesinden ücretsiz olarak indirilebilen Flash Media Live Encoder olduğunu unutmayın.

Video istemci uygulamasına gelince, Adobe Flash Player en çok tavsiye edilen değişkendir. Ücretsiz bir RTMP oynatıcısıdır ve bir tarayıcıdan, hatta mobil cihazdan eklenti olarak çalışır. Flash Player uygundur Windows için, OS X, Chrome OS ve Linux. Alternatif seçenekler Gnash ve VLC medya oynatıcısıdır. Her ikisi de açık kaynaklı medya oynatıcılarıdır. Gnash'ın, Linux'ta RTMP akışında Flash Player'ın yerini alma şansı var. VLC medya oynatıcı ise RTMP akışlarını yalnızca kısmen sürdürebildiğinden evrensel değildir.

Adobe Flash Media Server, Wowza Streaming Engine, Flussonic Media Server gibi RTMP sunucularının oldukça iyi sunucular olduğu iddia ediliyor. Ancak Java'ya RTMP Modülü ile Nginx gibi ücretsiz RTMP sunucusu veya aynı zamanda açık kaynaklı bir RTMP sunucusu olan Red5 kurabilirsiniz.

RTMP protokolüyle ilgili en sık karşılaşılan sorunların üstesinden nasıl gelinir?

RTMP protokolünün tüm bariz avantajlarına rağmen bazı dezavantajları da vardır. HTTP protokolünden çok farklı olması nedeniyle HTML5 tarafından desteklenmez. Ayrıca, RTMP protokolü iDevices üzerinde zayıf çalışır ve video akışının kalitesini etkiler. Bu durumda Apple cihazlarında HLS protokolünü kullanmak daha iyidir. HLS ve RTMP'nin çalışma prensipleri oldukça benzerdir ancak HLS durumunda akış, küçük HTTP tabanlı dosyalar serisine bölünür. Başlangıçta bu protokol Quicktime, iOS ve Safari tarayıcısı için geliştirildi. Ancak artık HLS protokolü birçok platformda da kullanılabiliyor. Protokol, bant genişliği sınırlamalarıyla çok iyi başa çıkıyor ve video kalitesini buna göre uyarlıyor. Video dağıtım hızı göz önüne alındığında, gecikme süresi yirmi saniye olduğundan HLS en iyi değişken olmayacaktır.

RTMP protokolünün bir diğer dezavantajı bant genişliği sorunlarına karşı savunmasız olmasıdır. Bazen düşük bant genişliği medya akışında kesintilere neden olabilir, hatta internet bağlantı hızı yeterli değilse yayın başlamayabilir. Sınırlı bant genişliğiyle yayın yapmanın alternatif bir yolu Dash kullanmaktır. Dash, yüksek kaliteli medya yayını sağlayan uyarlanabilir bir bit hızı akış teknolojisidir. Bu teknik, belirli bir kullanıcının bant genişliğini teşhis edebilir ve video kalitesini bağlantı hızına göre uyarlayabilir. Ayrıca videoyu birçok bit hızında kodlayan bir kodlayıcı olmadan da yapamaz. Daha sonra uygun kaynaklar nedeniyle oyuncu tarafından farklı kodlamalar değiştirilir. Sonuç olarak, çok az ara belleğe alma elde edilir ve harika bir video deneyimi elde edilir. Örneğin ulusal düzeydeki önemli olayların akışını sağlamak için bu tekniğin tüm faydalarını tahmin etmek zordur.

RTMP protokolünün bir diğer dezavantajı, Flash Player eklentisinin kurulu olması gerekliliğidir; bu eklenti olmadan RTMP medya aktarımı imkansızdır. Ayrıca CDN akış hizmetleri için RTMP uygulanırken bazı sorunlar yaşanmaktadır.

RTMP protokolü veya uygulanmasıyla ilgili hâlâ sorularınız mı var? biz de size bu konuda yardımcı olacağız ve tüm faydalarını pratikte göstereceğiz.

Geçenlerde Roman Harutyunyan'ın (@rarutyunyan) nginx için harika modülü: nginx-rtmp-module hakkında “nginx tabanlı çevrimiçi yayın sunucusu” konusuna rastladım. Modülün yapılandırılması çok kolaydır ve video kayıtlarını yayınlamak ve nginx'e dayalı canlı yayın yapmak için bir sunucu oluşturmanıza olanak tanır.

Modülün kendisi hakkında GitHub'daki sayfasından okuyabilirsiniz, ancak birkaçını vermek istiyorum basit örnekler kullanmak. Umarım bu konu video yapımına yeni başlayanlara (benim gibi) yardımcı olur.

Kısaca RTMP hakkında

RTMP (Gerçek Zamanlı Mesajlaşma Protokolü), Adobe'nin tescilli bir yayın protokolüdür. Varsayılan aktarım TCP'dir (bağlantı noktası 1935). RTMP'yi HTTP (RTMPT) içinde kapsüllemek de mümkündür. RTMP istemcisi öncelikle Adobe Flash Player'dır.
Video codec bileşeni - H.264, ses codec bileşeni AAC, nellymoser veya MP3, MP4 veya FLV kapları.

Video yayınlama

Başka bir deyişle isteğe bağlı video (VOD). Bunu rtmp bölümündeki (sunucu (…)) nginx.conf dosyasına eklemeniz yeterli.
uygulama vodu ( oynat /var/videos; )

(Not: tabi ki bölümün vod olarak adlandırılmasına gerek yok)
Artık /var/videos klasörüne doğru formatta bir video dosyası koyabilir ve kaynağı oynatıcıya "besleyebilirsiniz", örneğin rtmp://server/vod/file.flv. Anladığım kadarıyla MP4 yerel olarak video geri sarmayı destekliyor, FLV'nin ayrıca indekslenmesi gerekecek.

Çevrimiçi yayın

Yayınlama için aynı RTMP protokolünü kullanarak sunucuya bir video ve ses akışı gönderebiliriz. Müşterilerimiz de yayını izleyebilecek. Bunu yapmak için sunucuya bir bölüm eklemeniz gerekir:

Uygulama yayında (1.2.3.4'ün yayınlanmasına izin ver; 192.168.0.0/24'ün yayınlanmasına izin ver; tümünün yayınlanmasını reddet; tümünün oynatılmasına izin ver; yayında; )

Yayın yapacağımız makinede öncelikle DirectShow cihazlarının bir listesini almamız gerekiyor. Başlat - Çalıştır - cmd, ffmpeg/bin klasörüne gidin ve şunu çalıştırın:
ffmpeg -list_devices doğru -f dshow -i kukla

Kaynağınızın adı Rusça harfler içeriyorsa berbat karakterler olarak görünebilir. Gerçek yöneticiler iconv'yi kullanıyor ve benim gibi sıradan adamlar Lebedev'in web sitesindeki saçmalıkları çözüyor. FFmpeg" okunabilir bir yazıt beslemeniz gerekiyor.

Artık video ve ses kaynağının adını bilerek, onu ffmpeg kullanarak yakalayabilir ve sunucuya gönderebilirsiniz.

Web kamerası

En azından video kaynağını, codec bileşenini ve sunucuyu belirtmeniz gerekir:
ffmpeg -f dshow -i video = "Web kamerası C170" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

“Webcam C170” yerine listedeki kameranızın adını değiştirmeniz gerekir.
-an anahtarı, bir ses akışı aktarmadığımız anlamına gelir. Bir ses akışı gerekiyorsa başlangıç ​​satırı şuna benzer:
ffmpeg -f dshow -i video = "Web kamerası C170" -f dshow -i audio = "Mikrofon..." -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv "rtmp://1.2 .3.4/live/test.flv live=1"
Burada libfaac codec'i, örnekleme hızı 44100, 2 kanal (stereo) kullanıyoruz. AAC (libmp3lame codec bileşeni) yerine MP3 kullanabilirsiniz.

Analog kamera

Kameranızın analog çıkışı varsa, onu bir yakalama cihazı kullanarak bilgisayarınıza bağlayabilirsiniz. Dealextreme'den ucuz bir PAL kamera ve USB yakalama kartı kullanıyorum.

Ffmpeg -r pal -s pal -f dshow -i video = "USB2.0 ATV" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

Ekran yakalama

Burada iki seçenek var: FFSplit'i yükleyin veya FFmpeg ile ekran yakalama kaydediciyi kullanın.
FFSplit'in kullanımı daha kolaydır çünkü kullanıcı dostu bir GUI'ye sahiptir ancak XP/2003 altında çalışmaz.

İkinci yöntemi seçmeye karar verirseniz, FFmpeg başlangıç ​​​​satırı şöyle görünecektir:
ffmpeg -f dshow -i video = "ekran yakalama-kaydedici" -c:v libx264 -an -r 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
Ses akışı sanal ses yakalayıcı ile yakalanabilir.


Bir uygulamada ekran yakalama örneği

Naklen yayın

Doğal olarak FFmpeg video veya ses dosyasını (veya akışını) sunucuya aktarabilirsiniz. Aşağıdaki örnekte MJPEG videoyu uzaktaki bir kameradan aktarıyoruz:
ffmpeg -f mjpeg -i video="http://iiyudana.miemasu.net/nphMotionJpeg?Resolution=320x240&Quality=Standard" -c:v libx264 -f flv "rtmp://1.2.3.4/live/test.flv live =1"
Ancak bu tür amaçlar için, ara bağlantıyı ortadan kaldırmak ve akışı sunucunun kendisine çekmek için RTMP sunucusunun kendisindeki push seçeneğini kullanmak daha mantıklıdır.


Japonya'da bazı web kamerası

Ayarlama, problem çözme

-önceden ayarlanmış ad H.264'ün çeşitli sıkıştırma/hız oranı ayarları vardır: ultra hızlı, süper hızlı, çok hızlı, daha hızlı, hızlı, orta, yavaş, daha yavaş, çok yavaş. Bu nedenle performansı artırmak istiyorsanız şunları kullanmalısınız:
-önceden ayarlanmış ultra hızlı
-crf sayı Bit hızını ve kaliteyi doğrudan etkiler. 0 ile 51 arasındaki değerleri kabul eder; sayı ne kadar yüksek olursa resim kalitesi o kadar düşük olur. Varsayılan 23, 18 - kayıpsız kalite. CRF 6 oranında azaldığında bit hızı kabaca iki katına çıkar.

-R sayı Giriş ve çıkış FPS'sini ayarlar. Görüntüyü yakaladığınız kaynaklar için -r yerine bunu ayarlayabilirsiniz. -tekrar yerel FPS'yi kullanmak için.

-rtbufsize sayı gerçek zamanlı arabellek boyutu. Sürekli olarak arabellek taşması ve çerçeve düşüşü mesajları alıyorsanız, büyük bir arabellek (örn. 100000k) ayarlayabilirsiniz ancak bu, iletim gecikmesini artırabilir.

-pix_fmt renk modelini belirtir. Resim yerine siyah bir kare görüyorsanız ancak ses çalışıyorsa, ayarlamayı deneyin. yuv420p veya yuv422p.

-S genişlikxyükseklik giriş ve çıkış görüntü boyutu.

-G sayı Anladığım kadarıyla bu, anahtar kareler arasındaki maksimum kare sayısıdır. Eğer FPS'niz çok düşükse yayının başlama gecikmesini azaltmak için bu değeri daha düşük ayarlayabilirsiniz.

-keyint_min sayı Anahtar kareler arasındaki minimum kare sayısı.

-vf "kırp=w:h:x:y" videoyu kırp

- sıfır gecikmeyi ayarla Yayın gecikmesini azaltmak için “sihirli” seçeneği. Tam olarak ne işe yaradığını bulamadım (-:

-analiz 0 yayın gecikmesini azaltmaya yardımcı olan süre analizini devre dışı bırakır

Yukarıda tartışılan ses parametrelerine ek olarak, aşağıdakilere ihtiyacınız olabilir: -acodec kopyası ses akışınız MP3/AAC'ye ek kod dönüştürme gerektirmiyorsa.

Örnek: düşük gecikmeli ve sessiz bir web kamerasından yayın yapmak, resmin üst kısmına geçerli saati çizmek

Ffmpeg -r 25 -rtbufsize 1000000k -analiz süresi 0 -s vga -kopyalar -f dshow -i video = "Web kamerası C170" -vf "drawtext=fontfile=verdana.ttf: [e-posta korumalı]:fontsize=48:kutu=1: [e-posta korumalı]:text=%(localtime)" -s 320x240 -c:v libx264 -g 10 -keyint_min 1 -preset UltraFast -tune sıfır gecikme -crf 25 -an -r 3 -f flv "rtmp://1.2.3.4:1935/ canlı/b.flv canlı=1"

Web sitesindeki oyuncu

Burada her şey basit. Örneğin popüler oynatıcılardan birini web sitenize yükleyin

Makaleyi beğendin mi? Arkadaşlarınızla paylaşın!