Использование LibVLC, скомпилированного для Android, для отображения субтитров DVB из потока MPEG2 - PullRequest
0 голосов
/ 24 сентября 2018

Используя следующий код, я смог воспроизвести поток udp (mpeg2 ts), который имеет 3 дорожки (видео, аудио и DVD-субтитры), но я пытаюсь получить дорожку субтитров и отобразить ее, я не смогнайдите четкую документацию о том, как это сделать.

   // 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(), которые возвращают ноль во всех случаях;даже основные аудио- и видеодорожки не учитываются.

Есть ли какая-нибудь помощь по этому поводу?

Примечание: я скомпилировал LibVLC из [https://wiki.videolan.org/AndroidCompile/] и получил архив .aarв мой проект.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Аргумент, добавленный к опциям, поможет показать субтитры:

// 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();
0 голосов
/ 24 сентября 2018

Может потребоваться сначала позвонить media.parse(), чтобы можно было обнаружить треки spu, а затем установить один.

...