2011-10-10 18 views
5

Attualmente sto sviluppando un lettore video per Android. Ho creato una semplice textview che mostra il sottotitolo corrente.Riproduttore video Android nativo con sottotitoli

Il problema è: Il metodo MediaPlayer getCurrentPosition() mi dà solo il tempo in secondi. E ho bisogno di quel valore in millisecondi per sincronizzare correttamente il sottotitolo con il film.

Si presuppone che getCurrentPosition mi dia il tempo in millisecondi, ma restituisce il tempo in secondi * 1000 (ogni numero termina con "000").

  1. Conosci un modo migliore per farlo?
  2. Come si ottiene il tempo in millisecondi?
  3. Anche la generazione di un evento esattamente al momento del secondo (000 ms) funzionerebbe.

Qualche suggerimento?

+0

Da dove u hanno imparato l'aggiunta di sottotitoli in video.Can mi condividi il link ?? –

risposta

3

Nel caso qualcuno ne abbia bisogno, ho fatto la mia soluzione.

Ho sviluppato il modulo per i sottotitoli. Per ottenere i millisecondi precisi, ho creato un sincronizzatore per i timer di sistema e del lettore.

Ogni 20 secondi di riproduzione video mi fanno questa procedura:

  1. Chiedi il mediaplayer per i secondi correnti (secondi ottenuto s)
  2. Chiedi il mediaplayer per i secondi attuali fino risultato è s + 1 (s0)
  3. ottenere il tempo di sistema (millisecondi) per quel tempo (M0)

Ora, se voglio i millisecondi di film attuali:

  1. Prendi l'ora di sistema corrente (millisecons) (m1)
  2. film in tempo reale è: s0 + (M1-M0)

facile, e ha portato i sottotitoli sincronizzati;)

+2

è possibile condividere il codice. Sto lavorando su requisiti simili. Qualsiasi aiuto sarebbe gradito – maxwells

+0

Purtroppo il codice è protetto da copyright. Non lo possiedo:/ – inversus

+0

Ma è possibile condividere parti di esso .... – user1767754

0

1) Analizza il file dei sottotitoli
2) Utilizza la classe CounterTimer per impostarlo su player.getDuration(), quindi imposta un intervallo a tua scelta nel metodo tick (che viene chiamato al tick di ogni intervallo) per ottenere la posizione corrente del tuo giocatore using player.getCurrentPosition(); (Ricorda che questo ti restituirà il tempo in millisecondi). Ricorda inoltre di conservare e conservare millisecondi.
3) convertirlo nel formato desiderato e abbinarlo con l'hashmap temporale o l'array che hai preso.
4) Aggiorna la tua TextView che è sovrapposta al lettore con il testo adatto.
5) annullare il timer per il periodo di durata quindi (è possibile implementare un nuovo timer con durata).
6) Al termine timer di durata in OnFinish() è possibile avviare il vecchio timer con il tempo millisecondLeft ciò che si è salvato nel passaggio 2.

Ecco fatto;)

+0

Tnks per la risposta. Il mio player.getCurrentPosition() restituiva il valore in secondi: 53000ms, 54000ms. Era impossibile usarlo per ottenere il ms reale. – inversus

Problemi correlati