我有一个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。有没有办法可以做到这一点?或使用其他技术?
答案 0 :(得分:0)
跟踪计数不是元数据,因此在这里使用parseMedia()
无济于事。
parseMedia()
可以帮助您获得ID3标签数据,标题,艺术家,专辑等。
在媒体开始播放之前,通常无法使用曲目数据,因为它是特定的解码器插件,它知道有多少曲目。即使这样,媒体开始播放后也不会立即可用,有时会出现不确定的延迟(并且没有LibVLC事件)。
在播放媒体之前需要跟踪信息的应用程序中,我通常会使用类似本地MediaInfo
应用程序的东西并解析输出 - 这有一个纯文本输出格式,或XML输出格式, IIRC新版本具有JSON输出格式。缺点是您必须启动本机进程才能执行此操作,我使用CommonsExec
来执行此类操作。这很简单,即使它不是纯Java解决方案也能工作,但vlcj也不行!
如果您确实想要元数据,那么稍微有点方法,只需使用即可
这个方法在MediaPlayerFactory
:
public MediaMeta getMediaMeta(String mediaPath, boolean parse);
这为您提供元数据,而无需准备,播放或解析媒体。