通过在字幕文件中添加额外的特殊字幕来解决问题。这些字幕将在添加到媒体播放器后一段时间后触发,该时间等于该字幕的持续时间。
以下是包含代码示例的解决方案:
private void addSpecialSubtitle(String subtitlePath) {
try {
InputStream is = new FileInputStream(subtitlePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
int index = 1;
while ((line = reader.readLine()) != null) {
if (line.contains("-->")) { // check for time portion of subtitle
String[] parts = line.split("-->");
long startTime = parseSRTTime(parts[0].trim());
long endTime = parseSRTTime(parts[1].trim());
if (endTime > startTime) { // only add special subtitle if it has a duration
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(subtitlePath);
mediaPlayer.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
@Override
public void onTimedText(MediaPlayer mp, TimedText text) {
if (text != null && text.getText().equals("SPECIAL_SUBTITLE_" + index)) {
// handle end of special subtitle
}
}
});
mediaPlayer.prepare();
mediaPlayer.addTimedTextSource(subtitlePath, MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
mediaPlayer.selectTrack(mediaPlayer.getTrackInfo()[0].getTrackId());
mediaPlayer.seekTo((int) startTime);
mediaPlayer.start();
mp.addTimedText("SPECIAL_SUBTITLE_" + index, endTime - startTime, startTime);
index++;
}
}
}
} catch (Exception e) {
Log.e(TAG, "addSpecialSubtitle: ", e);
}
}
private long parseSRTTime(String srtTime) {
String[] parts = srtTime.split(":");
long hours = Long.parseLong(parts[0].trim());
long minutes = Long.parseLong(parts[1].trim());
String[] secondsParts =