#java #android
Вопрос:
Редактировать: Поскольку кто-то внес предложение изменить «srt» на «сортировку», я не хочу добавлять субтитры из файла srt, только вставлять их
Я создаю видеоплеер для себя (учусь и совершенствуюсь), и у меня проблема с видео, если я ничего не редактирую в своем TextureView, видео растягивается в портретном режиме и нормально в альбомной ориентации, если я использую приведенный ниже код в портретной ориентации, подходит для экрана, но в альбомной ориентации видео похоже на длинную строку в нижней части экрана.
private void adjustAspectRatio(int videoWidth, int videoHeight) {
int viewWidth = textureView.getWidth();
int viewHeight = textureView.getHeight();
double aspectRatio = (double) videoHeight / videoWidth;
int newWidth, newHeight;
if (viewHeight > (int) (viewWidth * aspectRatio)) {
// limited by narrow width; restrict height
newWidth = viewWidth;
newHeight = (int) (viewWidth * aspectRatio);
} else {
// limited by short height; restrict width
newWidth = (int) (viewHeight / aspectRatio);
newHeight = viewHeight;
}
int xoff = (viewWidth - newWidth) / 2;
int yoff = (viewHeight - newHeight) / 2;
/*Log.v(TAG, "video=" videoWidth "x" videoHeight
" view=" viewWidth "x" viewHeight
" newView=" newWidth "x" newHeight
" off=" xoff "," yoff);*/
Matrix txform = new Matrix();
textureView.getTransform(txform);
txform.setScale((float) newWidth / viewWidth, (float) newHeight / viewHeight);
//txform.postRotate(10); // just for fun
txform.postTranslate(xoff, yoff);
textureView.setTransform(txform);
}
И это мой код субтитров, но я действительно не знаю, как добавить субтитры в виде текста. Пример видео, который я пытаюсь показать, взят с YouTube с загруженными субтитрами, а затем встроен в файл. VLC (ПК) показывает мне субтитры
private void checkMultiAudioTrack(MediaPlayer mediaPlayer) {
mediaPlayer.pause();
MediaPlayer.TrackInfo[] trackInfo = mediaPlayer.getTrackInfo();
ArrayList<Integer> audioTracksIndex = new ArrayList<>();
for (int i = 0; i < trackInfo.length; i ) {
if (trackInfo[i].getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) {
audioTracksIndex.add(i);
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(VideoPlayer.this);
builder.setTitle("Select Subtitle Track");
String[] values = new String[audioTracksIndex.size()];
for (int i = 0; i < audioTracksIndex.size(); i ) {
values[i] = i "." trackInfo[i].getLanguage().replace("und", "Unknown");
}
/*
* SingleChoice means RadioGroup
* */
builder.setSingleChoiceItems(values, 0, (dialog, which) -> mediaPlayer.selectTrack(which))
.setPositiveButton("Ok", (dialog, which) -> {
mediaPlayer.selectTrack(which);
mediaPlayer.start();
dialog.dismiss();
}).setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss());
builder.show();
}