2015-06-23 11 views
6

Używam Exoplayera do przesyłania strumieniowego adresu URL. Chcę dodać plik srt w exoplayer. Ale myślę, że odtwarzacz nie obsługuje pliku srt , więc umieszczam zawartość pliku w 1 zmiennej.Jak wyświetlać napisy w Androidzie ExoPlayer

Jak wyświetlać napisy w androidowym Exoplayerze?

+0

spróbuj zobaczyć to powtórzenie: https://github.com/bluemix/CinemanaPlayer –

Odpowiedz

2

Mam rozwiązanie. przekonwertować plik srt do pliku TTML wykorzystaniem TimedTextFileFormat Poniżej jest mój kod do konwersji srt do 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(); 
    } 
} 

Po tej aktywności gracza towarzysza napisy do szanowanego producenta w tym ja posyłam do 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); 
} 

Od klasy HlsRendererBuilder przekazać go do TrackRenderer, // Budowanie renderujący debugowania.

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

A w klasie DebugTrackRenderer w metodzie run użytku poniższym kodzie

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

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


} 
0

Napisy w programie ExoPlayer to Prace w toku.

Jak stwierdzono na the 1.4.0 release:

(WorkInProgress) - pierwsze kroki oporowe stylu + umieszczone napisów.

5

Trochę późno, ale może to pomóc innym wykorzystaniem Exoplayer 1.5.1 gdzie DebugTrackRenderer został usunięty.

użytkowania

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()); 

Powyższy kod przechodzi subTitleUrl do SingleSampleSource.

Następnie wystarczy włączyć TextTrackRenderer który jest domyślnie włączona jak

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

To wystarczy.

Powiązane problemy