red5 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
red5 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

25 Mart 2010 Perşembe

Red5 "Error decoding buffer" hatası

İstemci tarafından(flash, dhtml...) red5 tarafında oluşturulmuş olan remote shared object'e bağlanan bir değişken soChatRoom olsun. Shared object üzerinde bir işlem yapmak istediğimizde ise, bu metodun send metoduna değişken olarak complex(ya da decode edilemeyecek tipte, örneğin openlaszlo için lz.button) bir parametre gönderilirse,

soChatRoom.send('writeMessage', new lz.button(canvas,{text:'button'}));

şu şekilde bir hata alıyor ve ardından red5 uygulaması ile bağlantının kesiliyor olmanız gerekir :

ERROR] [NioProcessor-2] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder - Error decoding buffer
org.red5.server.net.protocol.ProtocolException: Error during decoding


...

yapmamız gereken :

parametre olarak text gönderilmeli ve yapılacak complex işlemler send ile çağırılan metodun içerisinde yapılmalıdır.

23 Mart 2010 Salı

Red5'te bir odaya bağlanırken ve bağlantı kesilirken method çağırım sırası

Red5 uygulamalarında oda kavramı aslında scope(IScope)'dan ibarettir.
Örneğin istemci tarafından rtmp://127.0.0.1:1935/Red5Application/room1 şeklinde Red5 uygulamıza bağlandığımızda, Red5Application üzerindeki room1 scope'una ya da odasına bağlanmış oluyoruz. Red5Application da tabi ki bir scope'tur aslında.

Yukarıdaki url'yi kullanarak red5 uygulamamıza bağlandığımızda ve ardından bağlantıyı kestiğimizde, red5 tarafında çağırılan methodlar sırasıyla şu şekildedir :

(rtmp://127.0.0.1:1935/Red5Application/room1 için)

bağlantı kurulduğu zaman
-------------------------
roomStart : room1
connect : Red5Application
connect : room1
roomJoin : room1

bağlantı kesildiği zaman
---------------------------
disconnect : room1
roomDisconnect : room1
roomLeave : room1
roomStop : Red5Application
disconnect : Red5Application

17 Mart 2010 Çarşamba

Red5 Rtmp Portları

Bir flash istemci ugulamasının Red5 uygulaması ile iletişiminde rtmp protokolü kullanılıyor. Red5 rtmp ve http hizmetini öntanımlı olarak şu portlardan verir :

http : 5080
rtmp : 1935
rtmpt : 8088 (Tunneled Rtmp). 1935 portunun kapalı olduğu ve 80(http) portundan erişime izin verildiği durumlarda, http portu üzerinden rtmp hizmeti vermek için kullanılır.
rtmps : 8443(Secure Rtmp) Bu tür rtmp protokolünde, veriler https üzerinden şifrelenerek gönderilir.
Not : Red5 rtmps'i 8443'ten sunuyor ancak flash öntanımlı olarak 443'ten rtmps'yi deniyor. Bunun için, ya red5 tarafında rtmps portu $red5-home/conf/red.properties içerisinde 443 olarak değiştirilmeli ya da flash tarafında bağlantı URL'sine rtmps için kullanılacak olan port 8443 olarak belirtilmelidir.

28 Şubat 2010 Pazar

Red5 Uygulamaları İçin Birkaç İpucu

1-) Shared Object Servisini kullanma
Temel Application sınıfı(ApplicationAdapter sınıfından türetilmiş) dışında, herhangi bir sınıf gerçekleştiriminde SharedObject işlemi yapabilmek için Shared Object servisinin kullanımı şu şekildedir :

Application sınıfında direk olarak çağırılabilien getSharedObject metodu başka bir sınıfta


ISharedObjectService service = (ISharedObjectService) ScopeUtils
.getScopeService(scope,
ISharedObjectService.class,
false);
service.getSharedObject(...);

şeklinde kullanılabilir

2-) red5-web.xml içerisinde tanımlı bir bean'i herhangi bir sınıf içerisinde kullanma

singleton="true" />


şeklindeki bir bean, başka bir sınıf tanımı içerisinde şu şekilde kullanılabilir :

IScope scope = Red5.getConnectionLocal().getScope();
SampleClass sc= (SampleClass)scope.getContext().getBean("myBean");

3-) Shared Object sendMessage kullanımı
Mevcut bir shared object için, Sunucu Tarafından(Red5) istemci tarafındaki bir methoda(openlaszlo, flex vs..) parametre şu şekilde gönderilebilir :

Red5
---------

ISharedObject sharedObject= this.getSharedObject(scope, "mySharedObject");
List list= new Arraylist();
sharedObject.sendMessage("clientMethod",list);


Openlaszlo
---------------


Debug.write("param %w Red5'ten geliyor",param);

26 Aralık 2009 Cumartesi

Temel bir Red5 Uygulaması Sınıf ve Methodları

Bu girdide basit bir red5 uygulamasının Application isimli sınıfında ne gibi sınıflar, arayüzler ve methodlar kullanılabileceğinden bahsedeceğim.
İlk olarak söylenilecek şey : herbir red5 uygulaması ApplicationAdapter isimli sınıftan türetilir.

Red5
-------
Sınıflar - Arayüzler
====================
IConnection -> Uygulamaya bağlanan herbir istemcinin sahip olduğu bağlantıdır. Red5 uygulamasının birden fazla bağlantısı olabilir. Aynı zamanda istemcilerin de birden fazla rtmp, soap, wsdl vs. bağlantısı olabilir.
IScope -> IConnection nesnesi üzerinde yer alan faaliyet alanlarıdır. Red5 üzerindeki herbir odayı IScope nesnesi olarak düşünebiliriz.
ISharedObject-> Sunucuda oluşturulan ve istemcilerden bağlanılan, uygulamaya ve bu shared obect'e bağlanan tüm istemciler tarafından ortak olarak kullanılan nesnedir.
ISharedObjectListener -> Shared object üzerinde yapılan işlemleri dinlemek için kullanılan interface'dir.

Metotlar
=============
appStart (IScope scope) -> Red5 uygulaması başlatıldığında ilk olarak çağrılacak methodtur.
appStop (IScope scope) -> Red5 uygulaması kapatıldığı zaman çağrılacak olan methodtur.
connect (IConnection conn, IScope scope, Object []params) -> Herhangi bir istemcinin ilgili Red5 uygulamasına bağlandığı zaman çağırılacak olan methodtur. Shared object'lerin yaratılması ya da istemcinin bilgilerinin alınması gibi işlemler bu method içerisinde yapılır.
disconnect (IConnection conn, IScope scope) -> İstemcilerin uygulamadan bağlantıyı kestiği zaman çağırılacak olan methodtur.

Bir sonraki girdide ise basit bir red5 uygulamasında shared object nasıl yaratılır ve openlaszlo platformu tarafından bu shared object'e nasıl erişilip kullanılabileceği konulardan bahsedeceğim.

21 Şubat 2009 Cumartesi

Vidyokonferansa Devam

Bir süredir Red5 ve Vidyokonferansa dair çalışmalarımıza ara vermiştik. Artık bu işe kaldığımız yerden devam edeceğiz (biz = ben, Necdet ve Kemal Hocam). Tecrübelerimizi bu blogdan ya da buradan bildireceğim yeni bir blogdan paylaşacağız. Bizi izlemeye devam edin ;)

4 Mayıs 2008 Pazar

Red5 uygulaması ama nasıl ?

Kaç gündür red5 uygulamasından bahsediyoruz, ama bir red5 uygulaması nasıldır, neye benzer, bu konuda hicbir açıklama yapmadık. Şimdi temel bir red5 uygulamasının yapısı nasıldır, hangi dosya ve dizinlerden oluşur ve bunlar ne işe yarar vs. bunlardan bahsedeceğim.

SUNUCU TARAFI
-----------------------------
Öncelikle daha önceki yazıda bahsettiğim red5 kurulumunu yaptığınızı varsayıyorum. Örnek bir red5 uygulaması "/usr/local/red5-trunk2/doc/templates/myapp/" de WEB-INF dizininde bulunuyor. Şimdilik sadece bu dosyaların içerisindeki bazı yerleri değiştireceğiz ve uygun yere koyacağız. Yaratacağımız yeni uygulamamızın adı "uygulama" olsun."/usr/local/red5-trunk2/dist/weapps/uygulama" dizini içine, bulunduğumuz .../myapp/ içindeki WEB-INF dizinini kopyalayın. Dosyalardaki değişiklikleri /usr/local/red5-trunk2/dist/weapps/uygulama/WEB-INF içinde yapacağız.

1-) log4j.properties : Bu dosya, uygulamadaki log4j kütüphanelerinin kullanacağı ayar dosyasıdır.
Örneğin : "log4j.appender.FLOG2.Threshold=DEBUG" buna benzer satırlardan oluşur. Şu an bu dosya bizi çok ilgilendirmiyor.

2-) red5-web.properties : Uygulama dizini ve sanal host ile ilgili ayarlamalar bu dosyada yapılır. Buradaki contextPath virtualHosts değişkenleri red5-web.xml dosyasından okunuyor.
webapp.contextPath=/myapp olan kısmı
webapp.contextPath=/uygulama yapın ve kaydedin.

3-) web.xml : Jetty/Tomcat Servlet makinasının ilk olarak okuyacağı dosyadır. Bu dosyadaki "webpprootkey" değişkeni uygulamamızın yapısını tanımlar.

webAppRootKey
/myapp
olan kısmı

webAppRootKey
/uygulama
yapın ve kaydedin.

4-) red5-web.xml : Yazmış olduğumuz Java sınıfların yolları ile ilgili ayarlar, sanal-host ve uygulamaya özel servislerin ayarları bu dosyada yapılır.

(< id="web.handler">class="the.path.to.my.Application"
singleton="true" />

(< id="myhandler.service">class="the.path.to.my.Application"
singleton="true" /> )
olan kısmı

(< id="web.handler">class="org.uygulama"

singleton="true" />
< id="myhandler.service">class="org.uygulama"

singleton="true" /> )yapın ve kaydedin.

Yaptığımız bu değişikliğe göre; "yazacağımız Java sınıfının yolu org.uygulama şeklindedir" demiş olduk. Sınıfı yazarken de bu hiyerarşiye göre oluşturacağız.

Şimdi eclipse, netbeans vs. hangi editörü kullanıyorsak, uygulama adında bir Java projesi oluşturuyoruz. Sonra bu projede de org paketi ve bunun içinde de uygulama isimli java sınıfımızı oluşturuyoruz. Yazacağımız kodun hatasız derlenebilmesi için, yazacağımız sınıfta kullanacağımız Red5 sınıflarını barındıran Red5.jar' ın projemize eklenmesi gerekiyor. Kullandığınız editöre göre Red5.jar'ı red5 dizininden projemize ekliyoruz (bendeki yeri : /usr/local/red5-trunk2). "uygulama.java" dosyamıza şunu yapıştırıyoruz :

package org;

import org.red5.server.adapter.ApplicationAdapter;

public class uygulama extends ApplicationAdapter {
public String mesaj (String mesaj)
{
return mesaj;
}
}
Şu anda bilmemiz gereken ilk şey; bir red5 sınıfı ApplicationAdapter sınıfından türetilir, metoda bakınca ne yaptığını sanırım herkes anlamıştır :) Şimdi uygulama.java dosyamızı derliyoruz(Netbeans' da F9 ile). Projemiz nerede oluşturuldu ise build vs. dizini içinde classes isimli bir dizini bulup, bu dizini red5 dizinimizdeki projemiz içine kopyalıyoruz (/usr/local/red5-trunk2/dist/weapps/uygulama/WEB-INF). Projemizdeki son yapı şu şekilde olmalı :

  • uygulama
    • WEB-INF
      • classes (dizin)
      • log4j.properties
      • red5-web.properties
      • red5-web.xml
      • web.xml

İSTEMCİ TARAFI
------------------------------
Tamam uygulamamızı red5 sunucusuna ekledik ama oluşturduğumuz Java dosyasına yapması gereken işi nasıl yaptıracağız? Bunu da Flash ile yapıyoruz. Flash dökümanları oluşturabileceğimiz Macromedia Flash 8 Wine ile pek güzel kurulup çalıştırılabiliyor. MF 8' i kurduğununuzu varsayarak bir flash dökümanı oluşturuyoruz ve şunu yapıştırıyoruz :

nc = new NetConnection();
nc.connect("rtmp://127.0.0.1/uygulama");
nc.onResult = function (obj) {
trace("Mesaj = " + obj) ;
};
nc.call("mesaj", nc, "Bu bizim ilk Red5 uygulamamız") ;

sonra ctrl+enter a basıyoruz ve mesajımız karşımıza geliyor. Tut ki gelmedi, o zaman Red5' i başlatmamışsınızdır :)./usr/local/red5-trunk2/dist içinde "./red5.sh" deyip red5' i çalıştırıyoruz. Şimdi tekrar deneyelim, çalışmış olmalı. İlk basit Red5 uygulamımız hazırdır :)

24 Nisan 2008 Perşembe

Pardus' a Red5 ve Openmeetings Kurulumu

Daha once bahsettiğim gibi vidyokonferans yazılımı olarak Openmeetings' e donmuştuk. Openmeetings aslında bir Red5 uygulaması. Red5' le biraz ilgilendiğiniz zaman ne kadar faydalı bir eser olduğunu göreceksiniz :) Şimdi Pardus' a (aslında çoğu linux türevi işletim sistemlerine) Red5 ve Openmeetings kurulumu nasıl olur, ondan bahsedeyim biraz.

RED5 KURULUMU
______________

1-) Red5 kurumunda Java inşa aracı Ant kullanılıyor. Bunun için elbette jdk yüklü olması gerekir. Minimum jdk1.5 kurulu olması gerekir sistemde ( "java -version" ile öğrenilebilir). Eğer kurulu değilse pisi paket yöneticisinden "sun-jdk" paketi kurulmalı.
2-) Konsolda "wget http://apache.mirror.transip.nl/ant/binaries/apache-ant-1.7.0-bin.tar.gz" ile Ant 1.7 ' i indiriyoruz ve /usr/local/ant şeklinde açıyoruz. Daha sonra "export ANT_HOME = /usr/local/ant" diyoruz ve ANT_HOME değişkenine indirdiğimiz dizinin yolunu veriyoruz.
3-) Tekrar konsolda "svn co http://svn1.cvsdude.com/osflash/red5/java/server/trunk red5-trunk" ile red5' in 0.6.3 sürümünü svn' den çekiyoruz (red5' in 0.7.0 sürümü de var ancak ona openmeetings kurulamıyor)
4-) Konsolda indirdiğimiz red5-trunk dizini içine geliyoruz ve "/usr/local/ant/bin/ant" komutu ile bir süre red5' in derlenmesini bekliyoruz.
5-) Derleme sonucunda red5-trunk dizini içinde "dist" diye bir dizin oluşacak. Bu dizini "cp -R red5-trunk/dist /usr/local/red5 " yazarak /usr/local içine atıyoruz. Sonra sırayla "cd /usr/local/red5" "chmod 755 red5.sh" ve "./red5.sh" komutlarını veriyoruz.
6-) Eğer bir problem yoksa "http://127.0.0.1:5080 ' de red5 test sayfası sorunsuz bir şekilde karşımıza çıkacaktır.

OPENMEETİNGS KURULUMU
______________________

Şimdi gelelim Openmeetings kurulumuna. Openmeetings kurulumu oldukça basit. Kullanıcı bilgilerinin tutulması için bir veritabanı sunucusu gerekli. mysql-server veya postgresql-server paketi yeterli. "http://code.google.com/p/openmeetings/wiki/InstallationOfRelease05" bu adreste kurulum yönergelerini sırayla yaparsanız adres satırında "http://127.0.0.1:5080/openmeetings/install" da openmeetings kurulum sayfasını göreceksiniz.
Hepsi bu :) Bir süre red5 kurulumu ile uğraştığımdan dolayı, böyle bir yazının ilgilenenler için faydalı olacağını düşündüm.