2015-06-23 20 views
6

Tôi đang sử dụng Exoplayer để phát URL. Tôi muốn thêm tệp srt vào exoplayer. Nhưng tôi nghĩ người chơi không hỗ trợ tệp srt vì vậy tôi đặt nội dung tệp của tôi ở 1 biến.Cách hiển thị phụ đề trong android ExoPlayer

Làm thế nào để hiển thị phụ đề trong exoplayer android?

+0

cố gắng xem repo này: https://github.com/bluemix/CinemanaPlayer –

Trả lời

2

Tôi đã nhận được giải pháp. tôi chuyển đổi file srt vào file TTML sử dụng TimedTextFileFormat Dưới đây là mã của tôi để chuyển đổi srt để 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(); 
    } 
} 

Sau đó trong hoạt động máy nghe nhạc qua phụ đề để xây dựng uy tín, Trong này tôi đang gửi đến 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); 
} 

Từ lớp HlsRendererBuilder chuyển nó tới TrackRenderer, // Xây dựng trình kết xuất gỡ lỗi.

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

Và trong lớp DebugTrackRenderer trong phương pháp sử dụng chạy dưới mã,

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

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


} 
0

Phụ đề trong ExoPlayer là Đang hoạt động.

Như đã nêu trên the 1.4.0 release:

(WorkInProgress) - Các bước đầu tiên để hỗ trợ theo kiểu + phụ đề vị trí.

5

Một hơi muộn nhưng nó có thể giúp đỡ người khác sử dụng ExoPlayer 1.5.1 nơi DebugTrackRenderer đã bị xoá.

sử dụng,

DataSource textDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent); 
    SingleSampleSource textSampleSource = new SingleSampleSource(subTitleUrl, textDataSource, 
      MediaFormat.createTextFormat(MediaFormat.NO_VALUE,MimeTypes.APPLICATION_SUBRIP, MediaFormat.NO_VALUE, TrackRenderer.MATCH_LONGEST_US, null)); 
    TrackRenderer textRenderer = new TextTrackRenderer(textSampleSource, player, 
      player.getMainHandler().getLooper()); 

Trên đang đi subTitleUrl để SingleSampleSource.

Sau đó, chỉ cần kích hoạt TextTrackRenderer của bạn được kích hoạt theo mặc định như,

player.setSelectedTrack (YourPlayer.TYPE_TEXT, YourPlayer.TRACK_DEFAULT);

Nó sẽ thực hiện thủ thuật.

Các vấn đề liên quan