如何为 VideoView 添加字幕?
Posted
技术标签:
【中文标题】如何为 VideoView 添加字幕?【英文标题】:How to add subtitles to VideoView? 【发布时间】:2019-10-14 20:42:41 【问题描述】:我想知道如何成功地将字幕添加到 VideoView。我不知道怎么做。我不知道如何正确使用 addSubtitleSource、addTimedTextSource 方法以及它们是否正确。
android 文档说 addTimedTextSource 仅与 MediaPlayer 一起使用(VideoView 不是),但有一些关于轨道的信息,即 getTrackInfo 等。我不知道从哪里开始。互联网上有一些解决方案,但我不明白那些代码 sn-ps,我认为它们没有给出简单的解决方案。
有人可以帮我吗?
让我们有一个附有视频的简单 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 (目录没有不存在?)。后来我把它移到了资产文件夹,但结果是一样的。怎么了?
我添加了 mp.selectTrack(2); index = 2 因为我在某处读到这是强制性的,对于视频 getTrackInfo 在大多数情况下返回 2。
最后我认为 txtDisplay.setText() 方法就可以了。是吗?
请告诉我,这里只有 1 个问题还是更多?
【问题讨论】:
我只看了videoView
并没有看到任何添加字幕或文本的方法。为什么不能只使用 mediaPlayer
? mediaPlayer
类非常健壮,并允许许多功能,如背景播放、锁屏控制……各种很棒的东西。我会说走mediaPlayer
路线,因为有很多很多功能会派上用场。
好的,我会走这条路,但是如何设置媒体播放器?它使用什么视图?
阅读本教程,它应该可以帮助您入门 o7planning.org/en/10487/… 。我认为您仍然需要videoView
,但字幕将添加到mediaPlayer
EDITED 的实例中,以获取videoView
示例。按照本教程,然后尝试将字幕添加到您的 mediaPlayer
实例中
在MediaPlayer
中检查这个方法。 developer.android.com/reference/android/media/…
可以调用 videoView.setOnpreparedListener(new new MediaPlayer.OnPreparedListener() @Override public void onPrepared(MediaPlayer mp) ... ?? 这是 mp 是 MediaPlayer。是它附加到我拥有的 VideoView 上?
【参考方案1】:
您可以为此目的使用ExoPlayer
库。这是一个medium post,它解释了如何将SRT
字幕添加到 ExoPlayer 轨道。
【讨论】:
以上是关于如何为 VideoView 添加字幕?的主要内容,如果未能解决你的问题,请参考以下文章