Problem w tym, że najlepiej obsługiwać AVI kompresowany Xvidem, jeżeli nie ma sposobu, to ewetualnie plik MPG skompresowany kodekiem MPEG-1 lub MPEG-2.
Z drugiej strony, w kazdym przypadku mozna tak ustawić kodek, żeby każdą klatkę kompresował jako klatkę kluczową, wtedy otrzymujemy plik jakościowo zbliżony do MJPEG, ale wystarczy Xvid, żeby go obejrzeć.
Testowałem Xvid skompresowany tak, że każda klatka jest kluczowa, a potem MPEG-1 skompresowany zgodnie z VideoCD, żaden z tych dwóch plików nie działał.
Do celów testowych przygotowałem nieskompresowany plik RGB, (AVI niekompresowany w formacie YUY2 nie działa), wszystko działa, jak trzeba.
Na formie jest położony przycisk, jButton1, jPanel1 i jPanel2.
jPanel1 to obraz, a jPanel2 t kontrolki video.
Kopiuj
MediaLocator videoSource = new MediaLocator("file://F:\\zas.mpg");
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);
Manager.setHint(Manager.PLUGIN_PLAYER, new Boolean(true));
Player p = null;
try
{
p = Manager.createRealizedPlayer(videoSource);
}
catch (Exception e)
{
}
Component video = p.getVisualComponent();
Component controls = p.getControlPanelComponent();
if (video != null) { jPanel1.add(video); }
if (controls != null) { jPanel2.add(controls); }
video.setLocation(0, 0);
video.setSize(jPanel1.getWidth(), jPanel1.getHeight());
controls.setLocation(0, 0);
controls.setSize(jPanel2.getWidth(), jPanel2.getHeight());
p.start();
Po kliknięciu przycisku jButton1, od kliknięcia, do rozpoczęcia odtwarzania filmu mija ok. 15 sekund. Czy da się coś z tym zrobić?
Co do operacji, to interesują mnie następujące rzeczy:
- Start filmu
- Wywołanie procedury po zakończeniu filmu
- Odczyt numeru aktualnej klatki w trakcie odtwarzania filmu (jeżeli nie da rady, to odczyt czasu z dokładnością do milisekundy)
Czy JMF korzysta z kodeków systemu operacyjnego, czy ma kodeki w sobie tak, jak VLC?
Czy istnieje biblioteka, że jak się ją doinstaluje do mojego programu, to XVid i MPEG różnej maści ruszy bez problemów?