2011-10-10 18 views
5

Obecnie tworzę odtwarzacz wideo dla Androida. Stworzyłem prosty tekst, który pokazuje bieżący napis.Android Natywny odtwarzacz wideo z napisami

Problem jest następujący: Metoda MediaPlayer getCurrentPosition() daje mi tylko czas w sekundach. I potrzebuję tej wartości w milisekundach, aby poprawnie zsynchronizować podtytuł z filmem.

Funkcja getCurrentPosition powinna dawać mi czas w milisekundach, ale podaje czas w sekundach * 1000 (każda liczba kończy się na "000").

  1. Czy znasz lepszy sposób na zrobienie tego?
  2. Jak uzyskać czas w milisekundach?
  3. Generowanie zdarzenia dokładnie w czasie drugiego (000 ms) również by działało.

Wszelkie sugestie?

+0

skąd u nauczyli dodanie napisów w video.Can u dzielić mi link? –

Odpowiedz

3

Jeśli ktoś potrzebuje, zrobiłem moje rozwiązanie.

Opracowałem moduł napisów. Aby uzyskać dokładną liczbę milisekund, wykonałem synchronizator dla zegarów systemowych i odtwarzacza.

Co 20 sekund odtwarzania wideo zrobić procedurę:

  1. Zadaj mediaplayer dla obecnych sekund (got s sekund)
  2. Zadaj mediaplayer dla obecnych sekund, aż wynik jest s + 1 (s0)
  3. Get czasu systemowego (ms) na ten okres (m0)

teraz, jeśli chcę aktualne milisekund filmowe:

  1. Get czas obecny system (millisecons) (M1)
  2. Movie czasu rzeczywistego: s0 + (M1-M0)

Łatwy i spowodowało zsynchronizowanych napisów;)

+2

czy można udostępnić kod. Pracuję nad podobnym wymogiem. Każda pomoc będzie doceniona. – maxwells

+0

Niestety kod jest chroniony prawem autorskim. Nie jestem jej właścicielem:/ – inversus

+0

Ale możesz podzielić się z nimi częściami ... – user1767754

0

1) Przetwórz plik z napisami
2) Użyj klasy CounterTimer w ustawieniu go na player.getDuration(), a następnie ustaw wybrany interwał w metodzie tick (która jest wywoływana na haczyku w każdym przedziale) Uzyskaj aktualną pozycję twojego odtwarzacza używanie player.getCurrentPosition(); (Pamiętaj, że zwróci ci to czas w milisekundach). Należy również pamiętać o przechowywaniu i zachowywaniu millisecondsLeft.
3) przekonwertuj go na żądany format i dopasuj do przyjętej tablicy czasowej lub tablicy.
4) Zaktualizuj swój tekst, który jest nałożony na odtwarzacz odpowiednim tekstem.
5) anuluj Timer na czas trwania (możesz zaimplementować nowy Timer z czasem trwania).
6) Po wykończeń minutnika w onFinish() można uruchomić stary zegar z czasem millisecondLeft co zapisano w punkcie 2.

to wszystko;)

+0

Odpowiedzi na pytania. Mój player.getCurrentPosition() zwracał wartość w sekundach: 53000ms, 54000ms. Nie można było go użyć, aby uzyskać prawdziwe ms. – inversus

Powiązane problemy