如何在Android ExoPlayer中显示字幕 [英] How to show subtitle in android ExoPlayer

查看:906
本文介绍了如何在Android ExoPlayer中显示字幕的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Exoplayer传输URL. 我想在exoplayer中添加srt文件. 但我认为播放器不支持srt文件 所以我将文件内容放在1个变量中.

I am using Exoplayer for streaming URL. I want to add srt file in exoplayer. But I think player not support srt file so I put my file content in 1 variable.

如何在android exoplayer中显示字幕?

How to show subtitles in android exoplayer?

推荐答案

我找到了解决方案. 我使用TimedTextFileFormat将srt文件转换为TTML文件 下面是我将srt转换为TTML的代码,

I got the solution. I convert srt file into TTML file using TimedTextFileFormat Below is my code to convert srt to TTML,

private Subtitle subttl;

private void parseSubtitile(String subtitle) {

// subtitle is the srt file content
            // TODO Auto-generated method stub
            // StringBuilder buf = new StringBuilder();

InputStream json = null;
json = null;
        json = new ByteArrayInputStream(subtitle.getBytes());
    // FormatTTML formate = new FormatTTML();
    InputStream is = null;
    try {
        // TimedTextObject ttmlObj=formate.parseFile("Testing", json);
        TimedTextFileFormat ttff = new FormatSRT();
        TimedTextObject tto = ttff.parseFile("Test", json);
        // IOClass.writeFileTxt("test1", tto.toTTML());

        String data = tto.toTTML();
        is = new ByteArrayInputStream(data.getBytes());
        Log.d("web", data.toString());
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (FatalParsingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    TtmlParser parser = new TtmlParser();
    try {
        subttl = parser.parse(is, null, 0);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

之后,在玩家活动中将字幕传递给受人尊敬的生成器,在此,我将其发送给HlsRendererBuilder.

After that in player activity pass subtitle to respected builder, In this i am sending to HlsRendererBuilder.

private RendererBuilder getRendererBuilder() {
        String userAgent = Util.getUserAgent(this, "ExoPlayerDemo");
        switch (contentType) {

    case DemoUtil.TYPE_HLS:
        return new HlsRendererBuilder(this, userAgent,
                contentUri.toString(), debugTextView, audioCapabilities,
                    subttl);
}

从HlsRendererBuilder类将其传递给TrackRenderer, //构建调试渲染器.

From HlsRendererBuilder class pass it to TrackRenderer, // Build the debug renderer.

TrackRenderer debugRenderer = debugTextView != null
    ? new DebugTrackRenderer(debugTextView, player, videoRenderer,context,subttl) : null;

在运行方法的DebugTrackRenderer类中,使用以下代码,

And in DebugTrackRenderer class in run method use below code,

public void run() {
    String data1 = subttl.getText(getCurrentPositionUs());

    player.onText(String.valueOf(data1));


} 

这篇关于如何在Android ExoPlayer中显示字幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆