import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteOrder;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
import org.freedesktop.gstreamer.Bin;
import org.freedesktop.gstreamer.Bus;
import org.freedesktop.gstreamer.Caps;
import org.freedesktop.gstreamer.Element;
import org.freedesktop.gstreamer.ElementFactory;
import org.freedesktop.gstreamer.Gst;
import org.freedesktop.gstreamer.Pipeline;
import org.freedesktop.gstreamer.elements.AppSink;
import org.freedesktop.gstreamer.elements.PlayBin;
import org.freedesktop.gstreamer.message.Message;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
/**
* Hello world!
*
*/
//@Slf4j
public class VlcjJavaFxApplication extends Application
{
private ImageView imageView;
private AppSink videosink;
private Pipeline pipe;
//private Bin bin;
Bus bus;
private StringBuilder caps;
ProgressBar pgBar;
PlayBin playbin;
public VlcjJavaFxApplication() {
Gst.init();
videosink = new AppSink("GstVideoComponent");
videosink.set("emit-signals", true);
caps = new StringBuilder("video/x-raw, ");
// JNA creates ByteBuffer using native byte order, set masks according to that.
if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) {
caps.append("format=BGRx");
} else {
caps.append("format=xRGB");
}
videosink.setCaps(new Caps(caps.toString()));
videosink.set("max-buffers", 5000);
videosink.set("drop", true);
imageView = new ImageView();
FXImageSink fxImageSink = new FXImageSink(videosink);
fxImageSink.imageProperty().addListener(new ChangeListener<Image>() {
@Override
public void changed(ObservableValue<? extends Image> observable, Image oldValue,
Image newValue) {
// TODO Auto-generated method stub
Platform.runLater(new Runnable() {
@Override
public void run() {
imageView.setImage(newValue);
}
});
}
});
// Create a PlayBin element and set the AppSink from the Swing component
// as the video sink.
playbin = new PlayBin("playbin");
playbin.setVideoSink(videosink);
Element level = ElementFactory.make("level", "level");
playbin.set("audio-filter", level);
bus = playbin.getBus();
bus.connect(new Bus.MESSAGE() {
@Override
public void busMessage(Bus bus, Message message) {
// TODO Auto-generated method stub
}
});
playbin.stop();
URI uri;
try {
playbin.setURI(uri);
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
//log.error("Exception", e);
}
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Drawing Operations Test");
BorderPane grid = new BorderPane();
grid.setCenter(imageView);
//grid.setBottom(pgBar);
//grid.setStyle("-fx-background-color: black;");
pgBar = new ProgressBar();
pgBar.setPrefHeight(40);
pgBar.setPrefWidth(460);
pgBar.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// TODO Auto-generated method stub
double position = event.getX() / pgBar.getPrefWidth();
double dur = playbin.queryDuration(TimeUnit.MILLISECONDS);
System.out.println(position * dur);
if (dur > 0) {
});
Timer timer = new Timer();
TimerTask task = new TimerTask()
{
public void run()
{
long dur = playbin.queryDuration(TimeUnit.MILLISECONDS);
long pos = playbin.queryPosition(TimeUnit.MILLISECONDS);
System.out.println(pos);
if (dur > 0) {
double relPos = (double) pos / dur;
pgBar.setProgress(relPos);
}
}
};
timer.scheduleAtFixedRate(task, 0, 50);
imageView.fitWidthProperty().bind(grid.widthProperty());
//imageView.fitHeightProperty().bind(grid.heightProperty());
imageView.setFitHeight(460);
pgBar.prefWidthProperty().bind(grid.widthProperty());
imageView.setPreserveRatio(true);
grid.setBottom(pgBar);
primaryStage.setScene(new Scene(grid, 460, 500));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Thanks you so much.