VLCJ:从嵌入式媒体播放器保存视频流时缺少时间码



我有一个应用程序,可以显示来自摄像机的视频流,并且能够根据请求将视频流保存在文件中。当我从终端运行此命令时,我在VLC中看到视频,并且内容按预期保存在文件中:

vlc v4l:///dev/video0:norm=ntsc ':sout=#duplicate{dst=display{noaudio},dst="transcode{vcodec=wmv2,vb=800}:file{dst=aaa.wmv}"}'

但是,当我从应用程序中保存文件时,文件中没有时间码,因此当我在另一个应用程序中打开文件时,我无法在文件中向后或向前移动。我也看不到文件有多长。

这是我代码的简化版本

factory = new MediaPlayerFactory();
mainframe = new JFrame("Video Viewer");
fullscreenStrategy = new DefaultFullScreenStrategy(mainframe);
Canvas canvas = new Canvas();
canvas.setBackground(Color.black);
EmbeddedMediaPlayer player= factory.newEmbeddedMediaPlayer(fullscreenStrategy);
mainframe.add(canvas);
player.setVideoSurface(factory.newVideoSurface(canvas));
...
String media = "v4l:///dev/video0:norm=ntsc";
String filename = "aaa.wmv";
String mediaoptions = ":sout=#duplicate{ dst=display,"+
" dst="transcode{vcodec=wmv2,vb=800}:"+
"file{dst="+filename+"}"}");
player.prepareMedia(media, mediaoptions);
player.start();

创建了 aaa.wmv,但没有时间码。

可能出了什么问题?我看到的与命令行版本的唯一区别是我使用带有嵌入式媒体播放器的画布小部件,而不是本机 VLC 视图窗口。

关系,我发现了问题。为了正确保存时间码,必须调用 player.release()。我这样做了,但在发布调用之前,我将文件复制到另一个位置。由于尚未调用版本,因此该文件不完整。当我将代码更改为首先调用 player.release() 时,然后复制文件,它按预期工作。

最新更新