android - 如何为 VideoView 添加字幕?
问题描述
我想知道如何成功地将字幕添加到 VideoView。我不知道怎么做。我不知道如何正确使用 addSubtitleSource、addTimedTextSource 方法以及它们是否正确。
Android 文档说 addTimedTextSource 仅与 MediaPlayer 一起使用(VideoView 不是),但有一些关于轨道的信息,即 getTrackInfo 和其他信息。我不知道从哪里开始。互联网上有一些解决方案,但我不理解这些代码片段,我认为它们没有提供简单的解决方案。
有人可以帮助我吗?
让我们有一个附有视频的简单 VideoView。下一步是什么?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
videoView = findViewById(R.id.video_view1);
MediaController mMedia = new MediaController(this);
mMedia.setMediaPlayer(videoView);
mMedia.setAnchorView(videoView);
videoView.setMediaController(mMedia);
String path1 = VIDEO_URL;
Uri uri = Uri.parse(path1);
videoView.setVideoURI(uri);
videoView.start();
}
编辑: 我已将侦听器添加到 VideoView,然后将 OnTimedTextListener 添加到 MediaPlayer mp。这个 MediaPlayer mp 是否附加到我的 VideoView?这是创建与 VideoView 对应的 MediaPlayer 的正确方法吗?
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
try {
mp.addTimedTextSource("android.resource://"+getPackageName()+"/"+ R.raw.sub,MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
} catch (IOException e) {
e.printStackTrace();
}
mp.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
@Override
public void onTimedText(MediaPlayer mp, TimedText text) {
text.getBounds();
text.getText();
}
});
我不知道如何使用 getBounds() 和 getText() 方法。
编辑2: 现在我做了这样的事情......
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
try {
mp.addTimedTextSource("android.resource://" + getPackageName() + "/"+R.raw.sub,
MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
} catch (IOException e) {
e.printStackTrace();
}
mp.selectTrack(2);
mp.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
@Override
public void onTimedText(MediaPlayer mp, TimedText text) {
txtDisplay.setText(text.getText());
}
});
mp.start();
}
});
- 我把 "android.resource://" + getPackageName() + "/"+R.raw.sub 路径放到文件中,但它给了我一个错误 E/TaskPersister: File error access recents directory (directory doesn't exist ?)。后来我把它移到了资产文件夹,但结果是一样的。怎么了?
- 我添加了 mp.selectTrack(2); index = 2 因为我在某处读到这是强制性的,并且对于视频 getTrackInfo 在大多数情况下返回 2。
- 最后我认为 txtDisplay.setText() 方法就可以了。是吗?
请告诉我,这里只有1个问题还是更多?
解决方案
您可以ExoPlayer
为此目的使用库。这是一篇中篇文章,解释了如何SRT
为 ExoPlayer 曲目添加字幕。
推荐阅读
- wpf - 断点停止工作 - WPF 应用程序是来自 Visual Studio 的桌面桥接
- c - 如何按字母顺序对指针数组进行排序,然后使用qsort?
- python - Matplotlib contourf - 输入 z 必须至少是 2x2 数组?
- webpack - Webpack:链接加载器
- c# - 当非键列中的值之一包含 null 时,如何在 GroupBy 语句中返回 null?
- html - Html5 amp故事转换为mo4视频
- python - 互联网断开重新连接后如何继续我的程序?
- c - 互斥锁死锁 (pthread_mutex)
- python - 正则表达式提取线性 eq “2x-3y+0.5”的系数
- keras - 检查通过看不见的数据评估keras模型的方式是否正确