3

Java プログラムで vlcj を使用して画面をキャプチャしています。したがって、次のコードを使用します。

public static void main(final String[] args) {
            NativeLibrary.addSearchPath("vlc", "/Applications/VLC.app/Contents/MacOS/lib/");
            SwingUtilities.invokeLater(new Runnable() {
              @Override
              public void run() {
                new CaptureTest().start("screen://");
              }
            });
          }

public CaptureTest() {
            factory = new MediaPlayerFactory();
            mediaPlayer = (HeadlessMediaPlayer) factory.newMediaPlayer();
          }

          private void start(String mrl) {

            File dir = new File(System.getProperty("user.home"), "Videos");
            dir.mkdirs();

            DateFormat df = new SimpleDateFormat("yyyyMMdd-HHmmss");
            String fileName =  dir.getAbsolutePath() + "/Capture-" + df.format(new Date()) + ".mp4";

            String[] options = {
            ":sout=#transcode{vcodec=h264,acodec=mp4a}:std{mux=mp4,access=file,dst=" + fileName + "}", ":input-slave=screen://"
            };

            mediaPlayer.playMedia(mrl, options);
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            mediaPlayer.stop();
            mediaPlayer.release(); 
          }

問題は、ビデオ出力ファイルが 4KB しかなく、再生できないことです。誰でも私を助けることができますか?私は Mac OS 10.6.8 を使用しており、VLC 1.1.12 と vlcj 1.1.5 を使用しています。

4

2 に答える 2

1

これがあなたのコードの興味深い部分です...

    mediaPlayer.playMedia(mrl, options);
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    mediaPlayer.stop();
    mediaPlayer.release(); 

メディアを再生して 5 秒間スリープし、その後すぐに停止したのはなぜですか? おそらく、これが画面の記録中にファイルサイズが非常に小さくなる理由です。私が気づいたことから、トランスコードはそれほど高速ではないため、ファイルのサイズはすぐには増加しません(おそらく、トランスコード部分でバッファリングが行われるためだと思います...)

最良の方法は、再生/録音アクションと停止アクションのそれぞれにボタンを作成することです。

于 2012-01-31T10:05:25.817 に答える
0

あなたはあなたの南チェーンをチェックするかもしれません。ビデオファイルの生成にも問題がありました。私にとって有効なサウスチェーンは次のとおりです。

:sout=#transcode{vcodec=mp2v, vb=4096,scale=1, acodec=mpga, ab=128, channels=2, samplerate=44100}
:duplicate{dst=file{dst="+ fileName+"}, dst=display, select=noaudio}
于 2012-03-12T07:59:01.770 に答える