年別: 2010年

VideoPlayerTutorialを訳した

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


VideoPlayerTutorialBusMessageTutorialを訳した。

(さらに…)

BusMessageTutorial

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


http://code.google.com/p/gstreamer-java/wiki/BusMessageTutorial

BusMessageTutorial  

Busメッセージの監視.

導入

他のチュートリアルではこれまでエラー状態を扱っておらず、メディアファイルの再生が終了してもExitしていませんでした。

詳細

このチュートリアルは状態を検知するためにパイプラインバス上のメッセージを監視する方法を示します。

public class BusMessages {
   
public static void main(String[] args) {
        args
= Gst.init("BusMessages", args);
       
final PlayBin playbin = new PlayBin("BusMessages");
        playbin
.setVideoSink(ElementFactory.make("fakesink", "videosink"));
        playbin
.setInputFile(new File(args[0]));
        playbin
.getBus().connect(new Bus.EOS() {
           
public void endOfStream(GstObject source) {
               
System.out.println("Finished playing file");
               
Gst.quit();
           
}
       
});
        playbin
.getBus().connect(new Bus.ERROR() {
           
public void errorMessage(GstObject source, int code, String message) {
               
System.out.println("Error occurred: " + message);
               
Gst.quit();
           
}
       
});
        playbin
.getBus().connect(new Bus.STATE_CHANGED() {
           
public void stateChanged(GstObject source, State old, State current, State pending) {
               
if (source == playbin) {
                   
System.out.println("Pipeline state changed from " + old + " to " + current);
               
}
           
}
       
});
        playbin
.setState(State.PLAYING);
       
Gst.main();
        playbin
.setState(State.NULL);
       
Gst.deinit();
   
}
}

最初の数行はAudioPlayerTutorialからおなじみでしょう。
使用するための入力ファイルを設定した後、コードは面白くなってきます- Busイベントの為にリスナを登録します。
最初にEOS用のリスナを接続します- end-of-stream イベントはメディアファイルの再生が終了した時に送られてきます。

        playbin.getBus().connect(new Bus.EOS() {
           
public void endOfStream(GstObject source) {
               
System.out.println("Finished playing file");
               
Gst.quit();
           
}
       
});

endOfStream()内にあなたが望む全ての処理を置くことも出来ますが、ここでは伝達メッセージを出力し、Gst.quit()を呼び出します。Gst.quit()は, プログラムの終わりにGst.main()を呼び出して戻ります?
次にエラーイベント用のリスナを接続します – これはなんらかの理由でgstreamerがファイルを再生出来ないか、またはエラーがストリーム上で発見された場合にポストされます。

        playbin.getBus().connect(new Bus.ERROR() {
           
public void errorMessage(GstObject source, int code, String message) {
               
System.out.println("Error occurred: " + message);
               
Gst.quit();
           
}
       
});

最後に、状態変化イベント用のリスナを接続します。これはPipeline.setState()メソッドコールへのレスポンスで、どのようにgstreamerがパイプラインの状態を変更するかを見るのに有益です。

        playbin.getBus().connect(new Bus.STATE_CHANGED() {
           
public void stateChanged(GstObject source, State old, State current, State pending) {
               
if (source == playbin) {
                   
System.out.println("Pipeline state changed from " + old + " to " + current);
               
}
           
}
       
});

パイプライン中のどの要素もBusにメッセージをポストすることが出来るので、そのメッセージソースがパイプラインであることを確認する必要があります-すなわち、状態変化はトップレベルのパイプラインの状態変化であり、ある内部要素の状態変化ではありません。
最後にメディアファイルが再生している間はメインスレッドを維持し、その完了後にクリーンアップする、標準のgstreamerの定型コードを持ちます。

        playbin.setState(State.PLAYING);
       
Gst.main();
        playbin
.setState(State.NULL);
       
Gst.deinit();

VideoPlayerTutorial

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


http://code.google.com/p/gstreamer-java/wiki/VideoPlayerTutorial


VideoPlayerTutorial 

ビデオファイル再生を学ぶ

導入

オーディオプレイヤーのように gstreamerは簡単なビデオプレイヤーを構築する為に使用することが出来ます:

詳細

public class VideoPlayer {
   
public static void main(String[] args) {
        args
= Gst.init("VideoPlayer", args);
       
final PlayBin playbin = new PlayBin("VideoPlayer");
        playbin
.setInputFile(new File(args[0]));

       
SwingUtilities.invokeLater(new Runnable() {

           
public void run() {
               
VideoComponent videoComponent = new VideoComponent();
                playbin
.setVideoSink(videoComponent.getElement());

               
JFrame frame = new JFrame("VideoPlayer");
                frame
.getContentPane().add(videoComponent, BorderLayout.CENTER);
                frame
.setPreferredSize(new Dimension(640, 480));
                frame
.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame
.pack();
                frame
.setVisible(true);
                playbin
.setState(State.PLAYING);
           
}
       
});
       
Gst.main();
        playbin
.setState(State.NULL);
   
}
}

最初の数行はまたしてもgstreamerを初期化し、ファイルを再生する為にPlayBinをセットアップしています:

        args = Gst.init("VideoPlayer", args);
       
final PlayBin playbin = new PlayBin("VideoPlayer");
        playbin
.setInputFile(new File(args[0]));

次にビデオを表示する場所を作成しなければなりません。Swingコンポーネントが作成され、Swingはスレッドセーフではないので、これらの全ての操作はSwingイベントディスパッチャスレッド上で実行されなければなりません。 従ってSwingUtilitiesを使用してまるごとラップします。

        SwingUtilities.invokeLater(new Runnable() {
           
public void run() {
               
// Do video setup here ...
           
}
       
});

最初にビデオコンポーネントを作成します – これは送られてきたビデオを表示するSwingの軽量コンポーネントです。

                VideoComponent videoComponent = new VideoComponent();

二番目に、ビデオ出力としてPlayBinにビデオコンポーネントを接続しなければなりません。AudioPlayerTutorial ではplaybin.setVideoSink()でビデオ出力を向こうにしましたが、ここではビデオを出力を有効にするためにビデオコンポーネントを使用します 

                playbin.setVideoSink(videoComponent.getElement());

次に、表示する為にJFrameにビデオコンポーネントを追加し、ウィンドウを健全な状態にする為に、いくつかの基本的なセットアップをします。

                JFrame frame = new JFrame("VideoPlayer");
                frame
.getContentPane().add(videoComponent, BorderLayout.CENTER);
                frame
.setPreferredSize(new Dimension(640, 480));
                frame
.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame
.pack();
                frame
.setVisible(true);

最後に、パイプラインを再生します。

                playbin.setState(State.PLAYING);

メインメソッドの最後にいつもgstreamerの(終了の?)定型コードを持ちます:

        Gst.main();
        playbin
.setState(State.NULL);

gstreamer のGUIアプリケーション用のチュートリアルで厳密な必要がない間は、親和性のために他のチュートリアルで使われているのと同じパターンのコードを使用していきます。

(原文のneccessaryはCが一つ余計?)

Channel API Overview (Java)を訳した

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


Channel API Overview (Java)を訳した。

(さらに…)