我有一个应用程序,可以显示来自摄像头的视频流,并且可以根据请求将视频流保存在文件中。当我从终端运行此命令时,我在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已创建,但没有时间码。
有什么不对?我从命令行版本看到的唯一区别是我使用带有EmbeddedMediaPlayer的Canvas小部件而不是本机VLC视图窗口。
答案 0 :(得分:0)
没关系,我发现了问题。要正确保存时间码,必须调用player.release()。我做到了,但在发布调用之前,我将文件复制到另一个位置。由于尚未调用版本,因此文件不完整。当我更改代码以首先调用player.release()时,然后复制它按预期工作的文件。