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