关于在Android上使用libvlc获取所有媒体轨道(视频音频和字幕)的过程,我找不到很多文档。
据我了解,我必须解析媒体,并且我正在这样做:
Media media = new Media(libVLC, Uri.parse(url));
media.setEventListener(new IMedia.EventListener() {
@Override
public void onEvent(IMedia.Event event) {
switch (event.type){
case IMedia.Event.ParsedChanged:
if(event.getParsedStatus() == IMedia.ParsedStatus.Done){
Log.i("App", "Parse done, track count " + media.getTrackCount());
Gson gson = new Gson();
for(int i=0; i<media.getTrackCount(); i++){
Log.i("App", "Track " + i + ": " + gson.toJson(media.getTrack(i)));
}
}
break;
}
}
});
media.parseAsync();
vlc.setMedia(media);
vlc.play();
我从中得到的结果很奇怪:有时候我只得到一个轨道,视频轨道,但是有时候我也得到了音频轨道,所以总共有两个轨道。
问题是媒体也有字幕轨道,所以我必须有一种方法来获取所有三个轨道(在Windows上用vlc播放相同的确切媒体会显示所有三个轨道)。
我在做什么错?
编辑:我需要一种动态获取所有轨道的方法,媒体可能具有n个轨道,所以我不知道确切的数字。这只是一个测试,我知道有三条路。
谢谢
如果无法从媒体获取轨道,请使用VLC MediaPlayer对象,VLC媒体播放器提供了使用MediaPlayer对象获取音频轨道,视频轨道和字幕轨道的方法。
mMediaPlayer!!.setEventListener {
when (p0?.type) {
MediaPlayer.Event.Opening-> {
val audioTracks = mMediaPlayer!!.audioTracks
val subtitleTracks = mMediaPlayer!!.spuTracks
val videoTracks = mMediaPlayer!!.videoTracks
}
}
您可以遍历列表以获取单独的曲目。