使用为 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 播放列表

音视频开发: VS2017编译器编译libVLC错误解决

Android LibVLC,在没有 TextureView 的情况下拍摄 RTSP 流的快照

如何在Android项目中使用VLC

QT软件开发:基于libVLC内核设计视频播放器

QT软件开发:基于libVLC内核设计视频播放器