AndroidMediaPlayer的addTimedTextSource方法仅在字幕'开始”时通知,而不在字幕'结束”时通知。
创始人
2024-10-09 02:01:04
0

通过在字幕文件中添加额外的特殊字幕来解决问题。这些字幕将在添加到媒体播放器后一段时间后触发,该时间等于该字幕的持续时间。

以下是包含代码示例的解决方案:

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 =

相关内容

热门资讯

透视最新!wepoker数据分... 透视最新!wepoker数据分析,wepokerplus辅助,法门教程(本来存在有挂)-哔哩哔哩运w...
透视漏洞!wepoker分析(... 透视漏洞!wepoker分析(透视)开挂辅助挂(好像真的是有挂)-哔哩哔哩1、不需要AI权限,帮助你...
透视数据!werplan辅助软... 透视数据!werplan辅助软件,德扑之心免费透视,攻略教程(本来是有挂)-哔哩哔哩1、德扑之心免费...
透视系统!德州之星扫描器(透视... 透视系统!德州之星扫描器(透视)开挂辅助挂(都是真的有挂)-哔哩哔哩1、任何德州之星扫描器ai辅助神...
透视肯定!aapoker辅助怎... 透视肯定!aapoker辅助怎么用,hhpoker一直输有挂吗,方案教程(真是是有挂)-哔哩哔哩1、...
透视插件!佛手在线大菠萝智能辅... 透视插件!佛手在线大菠萝智能辅助器(透视)开挂辅助技巧(确实有挂)-哔哩哔哩1)佛手在线大菠萝智能辅...
透视脚本!wepoker私人辅... 透视脚本!wepoker私人辅助器,hhpoker有辅助的吗,总结教程(原来真的有挂)-哔哩哔哩1、...
透视开挂!竞技联盟辅助插件(透... 透视开挂!竞技联盟辅助插件(透视)开挂辅助技巧(切实是有挂)-哔哩哔哩1、竞技联盟辅助插件透视辅助简...
透视ai!aapoker万能辅... 透视ai!aapoker万能辅助器,wepoker好友助力码,积累教程(一贯真的是有挂)-哔哩哔哩1...
透视系统!pokernow辅助... 透视系统!pokernow辅助控制(透视)开挂辅助器(切实真的有挂)-哔哩哔哩pokernow辅助控...