Kamera girdisini yakalamaFlash Player 9 ve üstü, Adobe AIR 1.0 ve üstü Harici video dosyalarına ek olarak, kullanıcının bilgisayarına takılı bir kamera, ActionScript kullanarak görüntüleyip işleyebileceğiniz bir video verisi kaynağı görevi görebilir. Camera sınıfı, bilgisayar kamerasıyla çalışılması için ActionScript'te yerleşik bulunan bir mekanizmadır. Camera sınıfını anlamaCamera nesnesi, kullanıcının yerel kamerasına bağlanmanıza ve yerel olarak (geri kullanıcıya) veya uzaktan bir sunucuya (örn. Flash Media Server) videoyu yayınlamanıza olanak sağlar. Camera sınıfını kullanarak, kullanıcının kamerası hakkında şu tür bilgilere erişebilirsiniz:
Camera sınıfı, kamera nesneleriyle çalışılmasına yönelik çok sayıda yararlı yöntem ve özellik içerir. Örneğin, statik Camera.names özelliği, kullanıcının bilgisayarında geçerli olarak takılı olan kamera adlarının dizisini içerir. Geçerli olarak etkin olan kameranın adını görüntülemek için name özelliğini de kullanabilirsiniz. Not: Ağ içinde kamera videosu akışı gerçekleştirirken, her zaman ağ kesintileriyle ilgilenmeniz gerekir. Ağ kesintileri özellikle mobil aygıtlarda çeşitli nedenlerden dolayı meydana gelebilir.
Ekranda kamera içeriğini görüntülemeBir kameraya bağlanılması, video yüklemek için NetConnection ve NetStream sınıflarının kullanılmasından daha az kod gerektirebilir. Flash Player ile bir kullanıcının kamerasına erişmek için öncelikle kullanıcıdan kameraya bağlanma izni almanız gerektiğinden, kamera sınıfı hemen incelikli de olabilir. Şu kod, kullanıcının yerel kamerasına bağlanmak için, Camera sınıfını nasıl kullanabileceğinizi gösterir: var cam:Camera = Camera.getCamera(); var vid:Video = new Video(); vid.attachCamera(cam); addChild(vid); Not: Camera sınıfı bir yapıcı yöntemine sahip değildir. Yeni bir Camera örneği oluşturmak için, statik Camera.getCamera() yöntemini kullanırsınız.
Kamera uygulamanızı tasarlamaBir kullanıcının kamerasına bağlanan uygulama yazarken kodunuzda şunları açıklamanız gerekir:
Bir kullanıcının kamerasına bağlanmaBir kullanıcının kamerasına bağlanırken birinci adım, Camera türünde bir değişken oluşturup bu değişkeni statik Camera.getCamera() yönteminin döndürme değerine başlatarak yeni bir kamera örneği oluşturulmasıdır. Sonraki adım ise, yeni bir video nesnesi oluşturulup buna Camera nesnesinin eklenmesidir. Üçüncü adım, görüntüleme listesine video nesnesinin eklenmesidir. Camera sınıfı DisplayObject sınıfını genişletmeyip söz konusu sınıf doğrudan görüntüleme listesine eklenemediğinden, adım 2 ve 3'ü uygulamanız gerekir. Kameranın yakalanan videosunu görüntülemek için yeni bir video nesnesi oluşturup attachCamera() yöntemini çağırırsınız. Aşağıdaki kod bu üç adımı gösterir: var cam:Camera = Camera.getCamera(); var vid:Video = new Video(); vid.attachCamera(cam); addChild(vid); Bir kullanıcının kamerası takılı değilse, uygulamanın herhangi bir şey görüntülemeyeceğini unutmayın. Gerçek yaşamda, uygulamanız için ek adımlar uygulamanız gerekir. Daha fazla bilgi için, bkz. Kameraların takılı olduğunu doğrulama ve Kamera erişimi için izinleri algılama. Kameraların takılı olduğunu doğrulamaBir kamera örneğinde herhangi bir yöntemi veya özelliği kullanmaya çalışmadan önce, kullanıcının bir kamera taktığını doğrulamak istersiniz. Kullanıcının takılı bir kameraya sahip olup olmadığını kontrol etmenin iki yolu vardır:
Camera sınıfı, DisplayObject sınıfını genişletmediğinden, addChild() yöntemi kullanılarak doğrudan görüntüleme listesine eklenemez. Kameranın yakalanan videosunu görüntülemek için yeni bir Video nesnesi oluşturmanız ve Video örneğinde attachCamera() yöntemini çağırmanız gerekir. Bu kod parçası, varsa, kamerayı nasıl ekleyebileceğinizi gösterir; kamera yoksa, uygulama herhangi bir şey görüntülemez: var cam:Camera = Camera.getCamera(); if (cam != null) { var vid:Video = new Video(); vid.attachCamera(cam); addChild(vid); } Kamera erişimi için izinleri algılamaAIR uygulama sanal alanında, uygulama kullanıcının izni olmadan herhangi bir kameraya erişebilir. Ancak, Android'de uygulama uygulama açıklayıcısında Android CAMERA iznini belirtmelidir. Flash Player uygulamasının kamera çıktısını görüntüleyebilmesi için öncelikle kullanıcının açıkça Flash Player'a kameraya erişme izni vermesi gerekir. attachCamera() yöntemi çağrıldığında, Flash Player uygulaması, Flash Player'ın kameraya veya mikrofona erişmesine izin verip vermeyeceğini kullanıcıya soran Flash Player Ayarları iletişim kutusunu görüntüler. Kullanıcı İzin Ver düğmesini tıklatırsa, Flash Player uygulaması Sahne Alanı'nda Video örneğinde kameranın çıktısını görüntüler. Kullanıcı Reddet düğmesini tıklatırsa, Flash Player kameraya bağlanamaz ve Video nesnesi herhangi bir şey görüntülemez. Kullanıcının, Flash Player uygulamasının kameraya erişmesine izin verip vermediğini algılamak istiyorsanız, aşağıdaki kodda görüldüğü gibi kameranın status olayını (StatusEvent.STATUS) dinleyebilirsiniz: var cam:Camera = Camera.getCamera(); if (cam != null) { cam.addEventListener(StatusEvent.STATUS, statusHandler); var vid:Video = new Video(); vid.attachCamera(cam); addChild(vid); } function statusHandler(event:StatusEvent):void { // This event gets dispatched when the user clicks the "Allow" or "Deny" // button in the Flash Player Settings dialog box. trace(event.code); // "Camera.Muted" or "Camera.Unmuted" } Kullanıcı İzin Ver veya Reddet öğesini tıklattığı anda statusHandler() işlevi çağrılır. İki yöntemden birini kullanarak, kullanıcının hangi düğmeyi tıklattığını algılayabilirsiniz:
Gönderilecek durum olayını kontrol ederek, kameraya erişilmesini kabul eden veya reddeden kullanıcıyı işleyen kod yazabilir ve uygun şekilde kamerayı silebilirsiniz. Örneğin, kullanıcı Reddet düğmesini tıklatırsa, kullanıcıya video sohbetine katılmak istiyorsa İzin Ver'i tıklatması gerektiğini belirten bir mesaj görüntüleyebilir veya sistem kaynaklarında yer açmak için görüntüleme listesinde Video nesnesinin silindiğinden emin olabilirsiniz. AIR'de, bir Camera nesnesi kamera kullanma izni dinamik olmadığı için durum olayları göndermez. Video kalitesini en üst düzeye çıkarmaVarsayılan olarak, yeni Video sınıfı örnekleri 320 piksel genişlikte ve 240 piksel yüksekliktedir. Video kalitesini en üst düzeye çıkarmak için, her zaman video nesnenizin kamera nesnesiyle döndürülen videoyla aynı boyutlarda olduğundan emin olmanız gerekir. Aşağıdaki kod parçasında görüldüğü gibi, Camera sınıfının width ve height özelliklerini kullanarak kamera nesnesinin genişlik ve yüksekliğini alabilir, video nesnesinin width ve height özelliklerini kamera nesnelerinin boyutlarıyla eşleşecek şekilde ayarlayabilir veya kameranın genişlik ve yüksekliğini Video sınıfının yapıcı yöntemine iletebilirsiniz: var cam:Camera = Camera.getCamera(); if (cam != null) { var vid:Video = new Video(cam.width, cam.height); vid.attachCamera(cam); addChild(vid); } getCamera() yöntemi, kamera nesnesinin başvurusunu (veya kullanılabilir kamera yoksa null değerini) döndürdüğünden, kullanıcı kamerasına erişilmesini reddetse de kameranın yöntemlerine ve özelliklerine erişebilirsiniz. Böylece kameranın yerel yükseklik ve genişliğini kullanarak video örneğinin boyutunu ayarlayabilirsiniz. var vid:Video; var cam:Camera = Camera.getCamera(); if (cam == null) { trace("Unable to locate available cameras."); } else { trace("Found camera: " + cam.name); cam.addEventListener(StatusEvent.STATUS, statusHandler); vid = new Video(); vid.attachCamera(cam); } function statusHandler(event:StatusEvent):void { if (cam.muted) { trace("Unable to connect to active camera."); } else { // Resize Video object to match camera settings and // add the video to the display list. vid.width = cam.width; vid.height = cam.height; addChild(vid); } // Remove the status event listener. cam.removeEventListener(StatusEvent.STATUS, statusHandler); } Tam ekran modu hakkında bilgi almak için, Sahne Alanı özelliklerini ayarlama bölümündeki tam ekran modu konusuna bakın. Oynatma koşullarını izlemeKamera sınıfı, Camera nesnesinin geçerli durumunu izlemenize olanak sağlayan birçok özellik içerir. Örneğin, şu kod, bir Timer nesnesini ve görüntüleme listesindeki metin alanı örneğini kullanarak çok sayıda kamera özelliğini görüntüler: var vid:Video; var cam:Camera = Camera.getCamera(); var tf:TextField = new TextField(); tf.x = 300; tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); if (cam != null) { cam.addEventListener(StatusEvent.STATUS, statusHandler); vid = new Video(); vid.attachCamera(cam); } function statusHandler(event:StatusEvent):void { if (!cam.muted) { vid.width = cam.width; vid.height = cam.height; addChild(vid); t.start(); } cam.removeEventListener(StatusEvent.STATUS, statusHandler); } var t:Timer = new Timer(100); t.addEventListener(TimerEvent.TIMER, timerHandler); function timerHandler(event:TimerEvent):void { tf.text = ""; tf.appendText("activityLevel: " + cam.activityLevel + "\n"); tf.appendText("bandwidth: " + cam.bandwidth + "\n"); tf.appendText("currentFPS: " + cam.currentFPS + "\n"); tf.appendText("fps: " + cam.fps + "\n"); tf.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); tf.appendText("loopback: " + cam.loopback + "\n"); tf.appendText("motionLevel: " + cam.motionLevel + "\n"); tf.appendText("motionTimeout: " + cam.motionTimeout + "\n"); tf.appendText("quality: " + cam.quality + "\n"); } Saniyenin her 1/10'unda (100 milisaniyede) Timer nesnesinin timer olayı gönderilir ve timerHandler() işlevi görüntüleme listesinde metin alanını günceller. |
|