FullScreen Javafx MediaPlayer

hari ini dapat email dari milist javafxprogramming, ada yang bertanya bagaimana untuk membuat mediaplayer di javafx untuk memainkan file multimedia (video) dalam fullscreen mode.  Setelah memberikan jawaban di milist tersebut, kini saatnya saya berbagai dengan anda, bagaimana cara membuat fullscreen player.

Sebenarnya ini sangat simple. Untuk memainkan video dalam format fullscreen, yang perlu dilakukan hanya mengatur properti fitWidth dan fitHeight dari mediaView sedemikian sehingga adalah ukuran dari screen.  Karena saya tidak menghendaki mediaplayer saya, muncul secara langsung dalam format fullscreen, maka yang saya lakukan adalah membinding (bind) nilai kedua properti tersebut (fitWidth dan fitHeight) dengan ukuran Stage. dan Stage inilah yang akan diatur – atur properti fullScreen-nya sehingga dalam keadaan fullScreen atau tidak.

Daripada pusing, mendingan langsung kita coba saja :)

/*
 * MyMediaPlayer.fx
 *
 * Created on 19 Mar 09, 6:30:13
 */

package simplevideoplayer;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.Group;
import javafx.scene.media.MediaView;
import javafx.ext.swing.SwingButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
/**
 * @author Hakim
 */

def mediaURL = "file:///c:/Downloads/video6.flv";
var width:Number = 500;
var height:Number = 300;

def media = Media {
    source: mediaURL
}

def mp = MediaPlayer {
    media: media
    autoPlay: false
}

def mv = MediaView {
    preserveRatio: true
    mediaPlayer: mp
    preserveRatio : false;
    fitWidth : bind width;
    fitHeight: bind height;
}

function play():Void{
    mp.play();
}

function pause():Void{
    mp.pause();
}

function stop():Void{
    mp.stop();
}

def buttonPlay = SwingButton {
    text: "Play"
    action: play
}

def buttonPause = SwingButton {
    text: "Pause"
    action: pause
}

def buttonStop = SwingButton {
    text: "Stop"
    action: stop
}

function fullScreen(){
    stage.fullScreen = not stage.fullScreen;
}

function mouseClicked(e:MouseEvent){
    if (e.clickCount == 2)
        fullScreen();
}

def buttonGroup = HBox{
    content: [buttonPlay, buttonPause, buttonStop]
    translateX: bind (width - buttonPlay.boundsInParent.width*3)/2;
}

var playerGroup:Group = Group{
    content: [mv, buttonGroup]
    onMouseClicked: mouseClicked
}

def scene = Scene {
    content: playerGroup;
}

def stage:Stage = Stage {
    title: "MyApp"
    scene: scene
    width: bind width with inverse
    height: bind height with inverse
    fullScreen : true

}

screenshotnya:
leave-out-all-the-rest

 

did you noticed, how beautyful my code was :) .  yup, ini semua setelah membaca Clean Code -nya Robert C. Martin (lain kali insya Allah aku tulis, bagaimana membuat kode program yang clean, menurut buku tersebut :) )

18 thoughts on “FullScreen Javafx MediaPlayer

  1. Assalamualaikum.
    Wah ok bgt tuh mz fullscreen JavaFx Mediaplayernya..

    oh y mo tny crnya bwt JavaFx mediaplayer tp dlm 1 stage ada bbrp scene..jd tiap scene diisi 1 video dan klo d run bs muncul bbrp video sekaligus..
    klo bs contoh source codeny jg..

    mohon bantuannya..makasih

  2. wa’alaikumsalaamwarahmatullah, terimakasih :)

    Satu Stage hanya boleh ada satu scene, kalau mau menampilan beberapa video, yang dibutuhkan adalah membuat beberapa mediaplayer (media) saja, terus di taruh dalam (misalnya) HBox atau VBox, yang penting content control.

    cara yang lebih baik adalah dengan membuat kelas (misal kode di atas dibuat dalam kelas tersendiri), terus tinggal buat instance kelas tersbut.

    misal (lain kali kalau ada waktu saya kasih kode programnya):
    def mp1 = mymediaplayer{
    urlfile: “alamat file video”
    …..
    }

    def mp2 = mymediaplayer{
    urlfile: “alamat file video”
    …..
    }

    dan seterusnya…

  3. Da q coba mz tp ttp aj videonya yg kluar cm 1 aj,yg video 2 ga bs kluar..
    kira2 apanya ya yg kurang??
    nich q ksh source codenya, mgkn q bs tau dmn letak kesalahannya..

    /*
    * Main.fx
    *
    * Created on Mar 17, 2009, 11:11:26 PM
    */

    package video;

    import javafx.scene.paint.Color;
    import javafx.scene.media.Media;
    import javafx.scene.media.MediaPlayer;
    import javafx.scene.media.MediaView;
    import javafx.ext.swing.SwingSlider;
    import javafx.scene.layout.VBox;
    import javafx.scene.layout.HBox;
    import javafx.ext.swing.SwingButton;
    import javafx.scene.Scene;
    import java.lang.System;
    import javafx.stage.Stage;
    import javafx.scene.text.Text;
    import javafx.scene.text.Font;
    import javafx.scene.Node;

    var DEFAULT_FRAME_WIDTH = 1024;
    var DEFAULT_FRAME_HEIGHT = 500;

    var media1 = Media {
    source: “file:///D:/iklan/formula.DAT”
    }
    var media2 = Media {
    source: “file:///D:/iklan/mie.DAT”
    }
    var mp1 = MediaPlayer {
    media: media1
    autoPlay: true
    repeatCount: MediaPlayer.REPEAT_FOREVER
    }
    var mp2 = MediaPlayer {
    media: media2
    autoPlay: true
    repeatCount: MediaPlayer.REPEAT_FOREVER
    }
    var mv1 = MediaView {
    preserveRatio: true
    mediaPlayer: mp1
    preserveRatio: false;
    //fitWidth: bind width;
    //fitHeight: bind height;
    }
    var mv2 = MediaView {
    preserveRatio: true
    mediaPlayer: mp2
    preserveRatio: false;
    //fitWidth: bind width;
    //fitHeight: bind height;
    }

    var stage: Stage = Stage {
    title: “Video Advertisment”;
    visible: true;
    width: DEFAULT_FRAME_WIDTH as Integer;
    height:
    DEFAULT_FRAME_HEIGHT + 100 as Integer;

    onClose: function() {
    java.lang.System.exit( 0 );
    }

    scene: Scene {
    fill: Color.BLACK
    content: VBox {
    content: [mv1, mv2]
    }
    }
    }

    mohon bantuannya, makacih

  4. pk versi 1.6, netbeans 6.5…

    smua fileny sdh ada kok..
    wktu q coba kok yg kluar cm video prtm aj, jd yg video kedua ketumpukkan..

    klo pk class timeline bs ga ya??(bwt pndh2 video n timernya)..

    makasih

  5. maksudku javafx versi berapa, bukan javanya. kayaknya yg kamu gunakan masih versi 1.0, coba pakai javafx 1.1, insya Allah pasti jalan.
    kalau di VBox, gak mungkin ketumpukan.
    aku sudah buat yang bisa di drag-drop, simple kok :D

  6. ehmmm ya mz ini msh q coba trs..
    oh ya dr code yg q berikan k mzny kmrn wktu q coba run prtm kali videonya bs kluar multi tampilan,
    tp stlh d coba run lg kok ga bs lg???jd prgrmnya kyk ga stabil gt..
    kira2 programnya perlu q tmbhin pa lg??

    cara bwt ukuran tiap2 mediaplayer berbeda2 gmn y??tp ttp bs nampilin byk video jg???

    makasih..oh ya q tunggu posting CustomNode-nya…

  7. assalamualaikum…

    Mas hakim saya mau tanya,bisa tidak pemutaran media player diatur waktunya menggunakan script ‘Timeline’???
    misalnya gini saya ingin memutar file video 1 yang durasinya 5 menit setelah selesai langsung play yang video 2 yang durasinya 3 menit dan looping ke video 1 lg begitu seterusnya secara otomatis tanpa menggunakan tombol…

    kalo bisa tolong kasih scriptnya juga mas…matur suwun sanget

    • wa’alaikumsalaamwarahmatullah,
      bisa menggunakan timeline (ada atribut timer pada mediaplayer), tapi kalau sekenarionya ingin bisa seperti playlist, berarti tinggal membuat playlist, tinggal simpan urutan file yang akan di mainkan, terus di-play secara berurutan.

  8. var slidePath= “file:///E://video1.MOV”;
    var slide = Media { source: slidePath }

    function slide2Show(slidePath: String)
    {
    println(“Inside function slide2Show ….”);
    slide=Media{source: slidePath}
    }
    var media = Media { source: mediaURL }

    var time1 = 30000ms; // at 10s
    var time2 = 32000ms;
    var time3 = 62000ms;

    var TimersKu:MediaTimer[]=[

    MediaTimer{
    time:time1;
    action: function(MediaTimer) :Void {slide2Show(“file:///E://video2.MOV” ) }
    },
    MediaTimer{
    time:time2;
    action: function(MediaTimer) :Void {slide2Show(“file:///E://video3.MOV” ) }
    },

    script timernya seperti diatas mas hakim tp setelah di run kok kluar error seperti ini..
    Exception in trigger:
    com.sun.media.jmc.OperationUnsupportedException: The operation is not supported
    at com.sun.media.jmc.MediaProvider.addNotificationTime(MediaProvider.java:815)
    at javafx.scene.media.MediaPlayer$10.onChange(MediaPlayer.fx:375)
    at com.sun.javafx.runtime.location.SequenceVariable$4.onAction(SequenceVariable.java:219)
    at com.sun.javafx.runtime.location.SequenceVariable$4.onAction(SequenceVariable.java:216)
    at com.sun.javafx.runtime.location.DependencyIterator.action(AbstractLocation.java:503)
    at com.sun.javafx.runtime.location.DependencyIterator.action(AbstractLocation.java:491)
    at com.sun.javafx.runtime.util.Linkables.iterate(Linkables.java:82)
    at com.sun.javafx.runtime.location.AbstractLocation.iterateChildren(AbstractLocation.java:282)
    at com.sun.javafx.runtime.location.SequenceVariable.notifyListeners(SequenceVariable.java:216)
    at com.sun.javafx.runtime.location.SequenceVariable.replaceSlice(SequenceVariable.java:129)
    at com.sun.javafx.runtime.location.SequenceVariable.access$000(SequenceVariable.java:41)
    at com.sun.javafx.runtime.location.SequenceVariable$1.onReplaceSlice(SequenceVariable.java:81)
    at com.sun.javafx.runtime.sequence.SequenceMutator.replaceSlice(SequenceMutator.java:120)
    at com.sun.javafx.runtime.location.SequenceVariable.setAsSequence(SequenceVariable.java:302)
    at com.sun.javafx.runtime.location.SequenceVariable$5.apply(SequenceVariable.java:312)
    at com.sun.javafx.runtime.location.AbstractVariable.needDefault(AbstractVariable.java:151)
    at javafx.scene.media.MediaPlayer.initialize$(MediaPlayer.fx:370)
    at playvideo.PlayVideo.applyDefaults$playvideo$PlayVideo$mp1(PlayVideo.fx:78)
    at playvideo.PlayVideo.applyDefaults$playvideo$PlayVideo$mp1(PlayVideo.fx:78)
    at playvideo.PlayVideo.initialize$(PlayVideo.fx:78)
    at playvideo.PlayVideo.initialize$(PlayVideo.fx:78)
    at playvideo.Main.javafx$run$(Main.fx:28)
    at playvideo.Main.javafx$run$(Main.fx:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.runtime.provider.AWT_EDT_RuntimeProvider$1.run(AWT_EDT_RuntimeProvider.java:104)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    kira2 apanya yg salah ya mas???
    oh ya soal playlist saya kurang ngerti mksdnya…klo bisa saya minta contoh scriptnya..
    makasih banyak..

  9. mas hakim saya mohon bantuannya dari permasalahan yang saya tulis diatas…soalnya itu berhubungan dengan tugas akhir saya..

    semoga ALLAH SWT membalas semua amal kebaikan mas…amien

    makasih

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s