libvlc / vlcj,在不播放视频的情况下获取视频元数据(音轨数量)

时间:2014-03-07 20:57:36

标签: libvlc vlcj

我有一个EmbeddedMediaPlayerComponent,如果视频有音轨,我想在播放前检查。

getMediaPlayer().getAudioTrackCount()方法工作正常,但只有在我播放视频且我在public void playing(MediaPlayer mp)事件中时。 我也试过

getMediaPlayer().prepareMedia("/path/to/media", null);
getMediaPlayer().play();
System.out.println("TRACKS: "+getMediaPlayer().getAudioTrackCount());

但它不起作用。它说0。

我也尝试过:

MediaPlayerFactory factory = new MediaPlayerFactory();
HeadlessMediaPlayer p = factory.newHeadlessMediaPlayer();
p.prepareMedia("/path/to/video", null);
p.parseMedia();
System.out.println("TRACKS: "+p.getAudioTrackCount());

但它也说-1。有没有办法可以做到这一点?或使用其他技术?

1 个答案:

答案 0 :(得分:0)

跟踪计数不是元数据,因此在这里使用parseMedia()无济于事。

parseMedia()可以帮助您获得ID3标签数据,标题,艺术家,专辑等。

在媒体开始播放之前,通常无法使用曲目数据,因为它是特定的解码器插件,它知道有多少曲目。即使这样,媒体开始播放后也不会立即可用,有时会出现不确定的延迟(并且没有LibVLC事件)。

在播放媒体之前需要跟踪信息的应用程序中,我通常会使用类似本地MediaInfo应用程序的东西并解析输出 - 这有一个纯文本输出格式,或XML输出格式, IIRC新版本具有JSON输出格式。缺点是您必须启动本机进程才能执行此操作,我使用CommonsExec来执行此类操作。这很简单,即使它不是纯Java解决方案也能工作,但vlcj也不行!

如果您确实想要元数据,那么稍微有点方法,只需使用即可 这个方法在MediaPlayerFactory

public MediaMeta getMediaMeta(String mediaPath, boolean parse);

这为您提供元数据,而无需准备,播放或解析媒体。