当前位置: 首页 > 知识库问答 >
问题:

Exoplayer 2,如何检测字幕更改?

江烨伟
2023-03-14

我正在用ExoPlayer 2在Android上开发视频播放器
我正在寻找在SubtitleView(屏幕上部)中检测字幕更改的方法,以在TextView(屏幕下部)中自动滚动字幕<似乎没有听众这么做<我试了几个听众的字幕,但没有效果<你有什么想法吗

共有1个答案

束向荣
2023-03-14

我通过简单的代码解决了这个问题。

https://github.com/yuseisako/TangoPlayer/blob/master/app/src/main/java/me/yusei/tangoplayer/VideoPlayerActivity.java#L527

scrollSubtitleRunnable = new Runnable() {

    List<Caption> subtitles = new ArrayList<>(timedTextObject.captions.values());

    @Override
    public void run() {
        if(mMediaPlayer != null && mMediaPlayer.isPlaying()){
            float currentPos = mMediaPlayer.getTime();
            int index = 0;

            for (Caption caption : subtitles) {
                if (currentPos >= caption.start.mseconds - subtitleDelay
                        && currentPos <= caption.end.mseconds - subtitleDelay) {
                    listView.setItemChecked(index,true);
                    int height = listView.getHeight();
                    listView.setSelectionFromTop(index, height/2);
                    setSubtitleTextView(caption);
                    break;
                } else {
                    setSubtitleTextView(null);
                    if(currentPos < caption.end.mseconds - subtitleDelay){
                        break;
                    }
                }
                index++;
            }
        }

        scrollSubtitleHandler.postDelayed(this, 300);
    }
};
scrollSubtitleHandler.post(scrollSubtitleRunnable);
 类似资料:
  • 如何在ExoPlayer2上设置字幕?我试过这个媒体来源: 但我犯了一个错误:

  • 是否有一种方法可以在每次文件更改时以某种方式触发一个事件?我是指类似的东西(在伪代码中) 我知道我可以周期性地做,但我能在没有计时器的情况下做吗?我希望在用户更新txt文件时(不是通过代码,而是通过打开文件并在里面写入)能够做出一些动作,但我不知道他什么时候会这么做。

  • 问题内容: 如何轻松检测变量何时更改值?我希望每当指定变量更改值时,程序的执行就在调试器上中断。现在,我正在使用Eclipse的调试器。 问题答案: 对于类或实例变量 右键单击大纲视图中的变量 选择“切换监视点” 然后,在breapkoints视图中,可以右键单击结果条目 选择“断点属性” 取消选择“现场访问”。

  • 问题内容: 有没有一种方法可以适用于所有浏览器? 问题答案: 原始答案 是。 更新 要获得移动设备的原始分辨率,您必须乘以设备像素比率:和。比率也为1的台式机也可以使用。 从本(Ben)得到另一个答案: 在原始JavaScript中,这将为您提供可用的宽度/高度: 对于绝对宽度/高度,请使用:

  • 问题内容: 在Angular 1中,通过检查$ scope层次结构来进行更改检测。我们将在模板,控制器或组件中隐式或显式创建观察者。 在Angular 2中,我们不再具有$ scope,但是我们确实覆盖了setInterval,setTimeout等。我可以看到Angular如何使用它来触发$ digest,但是Angular如何确定发生了什么变化,特别是考虑到Object.observe从未进入

  • 我显示字幕与exoPlayer在我的Android应用程序。现在我想改变字幕的位置从屏幕的底部到顶部。我尝试或到子标题View,但没有工作。可以改变字幕在屏幕上的位置吗?如果你的答案是肯定的,怎么做?