ExoPlayer - странный арабский / персидский формат субтитров

Я пытаюсь создать видеоплеер с субтитрами. все настроено и работает правильно, кроме одного. мои арабские субтитры не показывают исправления, как они должны быть. они выглядят так странно с символами и прочим.. как-то так:

Вот моя установка ExoPlayer с подтипами:

Uri srt = Uri.parse("http://download1651.mediafire.com/titdvyxje25g/j5wpodffdhn005r/Thor+3+.WEB+%28NoColored%29.srt");

    Handler mainHandler = new Handler();
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    player =
            ExoPlayerFactory.newSimpleInstance(this, trackSelector);
    DefaultBandwidthMeter bandwidthMeter2 = new DefaultBandwidthMeter();
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
            Util.getUserAgent(this, "yourApplicationName"), bandwidthMeter2);
    Format textFormat = Format.createTextSampleFormat(null, MimeTypes.APPLICATION_SUBRIP,
            null, Format.NO_VALUE, Format.NO_VALUE, "ar", null, Format.OFFSET_SAMPLE_RELATIVE);
    MediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
            .createMediaSource(Uri.parse(getVideoUri()));
    MediaSource textMediaSource = new SingleSampleMediaSource.Factory(dataSourceFactory)
            .createMediaSource(srt, textFormat, C.TIME_UNSET);
    MediaSource mediaSource = new MergingMediaSource(videoSource, textMediaSource);


    player.prepare(mediaSource);

Есть ли решение о том, как я могу это исправить?

2 ответа

Решение

Кодировка этого файла windows-1256, сначала вы должны изменить его на Unicode, а затем вы сможете увидеть его правильно.

BufferedReader reader = new BufferedReader(
        new InputStreamReader(new FileInputStream("arabic sub.srt"), "windows-1256")
    );
String line = null;
BufferedWriter writer = new BufferedWriter(
    new OutputStreamWriter(new FileOutputStream("new.srt"), "UTF-8")
);
while((line = reader.readLine())!= null){        
    writer.write(line);
    writer.write("\r\n");
}
writer.close();

Принятый ответ потрясающий, но в случае Android требуются небольшие изменения.

      new FileOutputStream(filename.extension) 

не будет работать, вам нужно либо использовать getFilesDir(), либо getExternalFilesDir()

Для последнего потребуется разрешение WRITE_EXTERNAL_STORAGE.

Если вы загружаете файл srt из сети, используйте

      new BufferedReader(new InputStreamReader(new URL(https://yoursrturl).openConnection().getInputStream());

Надеюсь, поможет.

Другие вопросы по тегам