Witam serdecznie.
Piszę właśnie mój pierwszy applet i oczywiście natrafiłem na problem.
Zadaniem appletu jest odczytanie z dysku użytkownika wybranego pliku, sprawdzenie czy jest plikiem video jednego z obsługiwanych typów i wyciągnięcie z niego tzw. Metadata czyli informacji nagłówkowych tj.: długość, rozdzielczość, fps.
Applet korzysta z biblioteki Mediainfo.dll i wrapperów java na nią tj.: MediaInfo.java oraz MediaInfoLibrary.java.
Applet jest self-signed wiec powinien po zatwierdzeniu wyjątków bezpieczeństwa przez użytkownika mieć prawa odczytu jego plików. Z tego co udało mi się wyczytać w internecie applet nie może skorzystać z biblioteki Mediainfo.dll zawartej bezpośrednio z pliku jar lub gdziekolwiek na zdalnym serwerze tylko musi ją umieścić w windows/system32 na maszynie użytkownika. Nie mam tego jeszcze w programie, ale żeby sprawdzić czy to ma sens ręcznie umieściłem bibliotekę w tym folderze, ale applet nadal nie działa. (póki był uruchamiany z eclipse jako java applet lokalnie wszystko działało i program robił co ma robić, tylko po wrzuceniu na serwer pojawiły się problemy).
Pomoże ktoś mi to ogarnąć? Nie mam w javie jeszcze takiego doświadczenia, żeby samemu rozwiązać ten problem.
Z góry dziękuję za ewentualne porady i pomoc. Pozdrawiam i załączam poniżej kod appletu oraz .jar spakowany rarem zawierający wszystkie pliki.
Działanie (lub raczej niedziałanie) appletu można obejrzeć tutaj: http://con3x.com/java/
package video_inspector;
import java.applet.Applet;
import java.io.File;
import java.util.Arrays;
import java.awt.*;
import javax.swing.JOptionPane;
public class video_inspector extends Applet {
private static final long serialVersionUID = 1L;
static String[] allowed = {"avi", "mp4", "3gp", "mkv", "ogm", "rmvb", "rm", "mpeg", "mpg", "mpe", "mov", "qt", "wmv"};
File f;
public void init() {
FileDialog fc = new FileDialog(new Frame(), "Wybierz plik wideo");
fc.setVisible(true);
fc.setMode(FileDialog.LOAD);
String selectedFile = fc.getFile();
String dir = fc.getDirectory();
if(new File(dir+selectedFile).exists()) {
try {
f = new File(dir+selectedFile);
String mimetype = selectedFile.substring(selectedFile.lastIndexOf('.') +1);
if(Arrays.asList(allowed).contains(mimetype)) {
MediaInfo info = new MediaInfo();
info.open(f);
long length = f.length();
//String format = info.get(MediaInfo.StreamKind.Video, 0, "Format", MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
String duration = info.get(MediaInfo.StreamKind.Video, 0, "Duration", MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
String frameRate = info.get(MediaInfo.StreamKind.Video, 0, "FrameRate", MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
String width = info.get(MediaInfo.StreamKind.Video, 0, "Width", MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
String height = info.get(MediaInfo.StreamKind.Video, 0, "Height", MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
long seconds = Long.parseLong(duration)/1000;
String formatx = String.format("%%0%dd", 2);
String time = String.format(formatx, seconds/3600)+":"+String.format(formatx, (seconds%3600)/60)+":"+String.format(formatx, seconds%60);
//System.out.println("Format: "+format);
System.out.println("Filesize: "+length+" Bytes");
System.out.println("Duration: "+time);
System.out.println("FPS: "+frameRate);
System.out.println("Resolution: "+width+"x"+height);
} else {
error("Nieprawidłowy format pliku! Tylko pliki wideo!");
}
} catch(Exception e) {
if(selectedFile!=null) {
error(e.getMessage());
}
}
} else {
if(selectedFile!=null) {
error("Plik nie istnieje!");
}
}
}
public void paint(Graphics g) {
g.drawString("Witajcie wszyscy!", 20, 20);
}
public void error(String errorr) {
JOptionPane pane = new JOptionPane(errorr);
pane.setVisible(true);
Dialog err = pane.createDialog(this, "Błąd");
err.setVisible(true);
init();
destroy();
stop();
}
public static void main(String args[]) throws java.io.IOException {
}
}
- videoinspector.rar (783 KB) - ściągnięć: 210