Как добавить субтитры в VideoView? - PullRequest
0 голосов
/ 14 октября 2019

Мне интересно, как успешно добавить субтитры в VideoView. Я не знаю как это сделать. Я не знаю, как правильно использовать методы addSubtitleSource, addTimedTextSource и если они правильные.

В документации Android говорится, что addTimedTextSource используется только с MediaPlayer (а VideoView нет), но есть некоторая информация о треке, т.е. getTrackInfoи другие. Я не знаю с чего начать. В Интернете есть некоторые решения, но я не понимаю эти фрагменты кода, и я думаю, что они не дают простых решений.

Кто-нибудь может мне помочь?

Давайте сделаемпростой VideoView с видео прилагается. Что дальше?

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        videoView = findViewById(R.id.video_view1);

        MediaController mMedia = new MediaController(this);
        mMedia.setMediaPlayer(videoView);
        mMedia.setAnchorView(videoView);

        videoView.setMediaController(mMedia);

        String path1 = VIDEO_URL;

        Uri uri = Uri.parse(path1);

        videoView.setVideoURI(uri);
        videoView.start();
}

РЕДАКТИРОВАТЬ: Я добавил слушателя в VideoView и затем OnTimedTextListener в MediaPlayer mp. Этот MediaPlayer MP подключен к моему VideoView? Это правильный способ создания MediaPlayer, который будет соответствовать VideoView?

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                try {
                    mp.addTimedTextSource("android.resource://"+getPackageName()+"/"+ R.raw.sub,MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                mp.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
                    @Override
                    public void onTimedText(MediaPlayer mp, TimedText text) {
                        text.getBounds();
                        text.getText();
                    }
                });

Я не знаю, как использовать методы getBounds () и getText ().

РЕДАКТИРОВАТЬ 2: Теперь я сделал что-то вроде этого ...

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {

                try {
                      mp.addTimedTextSource("android.resource://" + getPackageName() + "/"+R.raw.sub,
                                                            MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);

                } catch (IOException e) {
                    e.printStackTrace();
                }
                mp.selectTrack(2);

                mp.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
                    @Override
                    public void onTimedText(MediaPlayer mp, TimedText text) {

                        txtDisplay.setText(text.getText());

                    }
                });
                mp.start();
            }
        });
  1. Я поставил "android.resource: //" + getPackageName() + "/"+R.raw.sub путь к файлу, но он выдает ошибку E / TaskPersister: Ошибка файла при доступе к каталогу recents (каталог не существует?). Позже я переместил его в папку активов, но результат был тот же. Что не так?
  2. Я добавил mp.selectTrack (2);с index = 2, потому что я где-то читал, что это обязательно, и для видео getTrackInfo в большинстве случаев возвращает 2.
  3. В конце я думал, что метод txtDisplay.setText () будет в порядке. Это так?

Скажите, пожалуйста, здесь только 1 проблема или больше?

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете использовать библиотеку ExoPlayer для этой цели. Вот средний пост , который объясняет, как вы можете добавить SRT субтитры к дорожкам ExoPlayer.

...