使用为 android 编译的 LibVLC 从 MPEG2 流中显示 DVB 字幕
Posted
技术标签:
【中文标题】使用为 android 编译的 LibVLC 从 MPEG2 流中显示 DVB 字幕【英文标题】:Using LibVLC compiled for android to display DVB subtitles from an MPEG2 stream 【发布时间】:2018-09-24 12:43:32 【问题描述】:使用以下代码,我能够播放具有 3 个轨道(视频、音频和 dvb 字幕)的 udp 流 (mpeg2 ts),但我正在尝试检索字幕轨道并显示它,但我无法查找有关如何执行此操作的任何明确文档。
// Create LibVLC
ArrayList<String> options = new ArrayList<String>();
options.add("-vvv"); // verbosity
options.add("--autoscale");
libvlc = new LibVLC(this, options);
holder.setKeepScreenOn(true);
// Creating media player
mMediaPlayer = new MediaPlayer(libvlc);
mMediaPlayer.setAspectRatio("16:9");
mMediaPlayer.setEventListener(mPlayerListener);
// Seting up video output
final IVLCVout vout = mMediaPlayer.getVLCVout();
vout.setVideoView(mSurface);
if (mSubtitlesSurface != null)
vout.setSubtitlesView(mSubtitlesSurface);
vout.setWindowSize(1920,1080);
vout.addCallback(this);
vout.attachViews();
Media m = new Media(libvlc, Uri.parse(media));
mMediaPlayer.setMedia(m);
mMediaPlayer.play();
我正在尝试使用mMediaPlayer.getMedia().getTrackCount()
和mMediaPlayer.getSpuTracksCount()
,它们在所有情况下都返回零;连基本的音视频轨道都不算在内。
有什么帮助吗?
注意:我从 [https://wiki.videolan.org/androidCompile/] 编译了 LibVLC,并将 .aar 存档保存到我的项目中。
【问题讨论】:
【参考方案1】:您可能需要先致电media.parse()
,以便能够发现 spu 轨道然后设置一个。
【讨论】:
我能够通过这种方式获得曲目,请查看以下答案,我需要更多关于如何设置这些曲目以显示字幕的帮助。 所有缺少的是这个参数:args.add("--sub-track=0");【参考方案2】:添加到选项的参数将有助于显示字幕:
// Create LibVLC
ArrayList<String> options = new ArrayList<String>();
options.add("-vvv"); // verbosity
options.add("--autoscale");
args.add("--sub-track=0");//this option is used to show the first subtitle track
libvlc = new LibVLC(this, options);
holder.setKeepScreenOn(true);
// Creating media player
mMediaPlayer = new MediaPlayer(libvlc);
mMediaPlayer.setAspectRatio("16:9");
mMediaPlayer.setEventListener(mPlayerListener);
// Seting up video output
final IVLCVout vout = mMediaPlayer.getVLCVout();
vout.setVideoView(mSurface);
if (mSubtitlesSurface != null)
vout.setSubtitlesView(mSubtitlesSurface);
vout.setWindowSize(1920,1080);
vout.addCallback(this);
vout.attachViews();
Media m = new Media(libvlc, Uri.parse(media));
mMediaPlayer.setMedia(m);
mMediaPlayer.play();
【讨论】:
以上是关于使用为 android 编译的 LibVLC 从 MPEG2 流中显示 DVB 字幕的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 LibVLC 在 android 应用上加载 m3u 播放列表