我正在使用vlcj捕获我的Java程序中的屏幕。因此,我使用以下代码:
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
答案 0 :(得分:1)
以下是您的代码中有趣的部分......
mediaPlayer.playMedia(mrl, options);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mediaPlayer.stop();
mediaPlayer.release();
你为什么要播放媒体,睡了5秒钟后立即停止播放?也许,这就是为什么你在屏幕录制过程中得到一个非常小的文件大小。从我注意到,转码不是那么快,所以文件的大小不会立即增加(可能是由于在转码部分发生缓冲,我猜...)
最好是为播放/录制动作和停止动作创建一个按钮。
答案 1 :(得分:0)
你可能会检查你的sout链。我也有视频文件生成的问题。我的工作链是:
: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}