2016-04-09 10 views
2

Ich benutze xuggler um Videos in verschiedene Formate zu transcodieren. Wenn ich meinen IContainer direkt aus einer Datei öffne, funktioniert es einwandfrei, dieses Mal möchte ich jedoch IContainer mit einem InputStream öffnen. Seltsam ist, dass ich versucht habe, ein Video im mp4-Format über FileInputStream zu öffnen, der IContainer kann mit diesem FileInputStream geöffnet werden, aber ich kann Ipacket in diesem Stream nicht lesen. Kann mir jemand Vorschläge machen? Haben Sie etwas verpasst? Ich brauche meine xuggler wirklich mit Strömen zu behandelnxuggler icontainer lesen von inputstream

public static void main(String[] args) throws IOException { 

    //the file input stream 
    FileInputStream fi = new FileInputStream("test.mp4"); 

    //icontainer format 
    IContainerFormat format = IContainerFormat.make(); 
    format.setInputFormat("mp4"); 

    IContainer container = IContainer.make(); 
    //open container via FileInputStream 
    int data = container.open(fi, format); 

    IPacket packet = IPacket.make(); 
    //read packet 
    int info = container.readNextPacket(packet); 

    System.out.println(data); 
    System.out.println(info); 
} 

Ergebnisse

data: 0 
info: -1094995529 

Nach IERROR, ein unbekannter Fehler hier, als ich versuchte, ein Paket zu lesen. Ich benutze xuggler 5.4

Antwort

2

Zunächst müssen Streams gesucht werden (wie FSDataInputStream in hadoop), sonst kann Xuggler nicht damit umgehen, FileInputStream ist nicht so eine Art von Stream, traurig .... Eigentlich, seek() -Funktion ist wichtig für Xuggler, um eine Mediendatei zu lesen

Nun, auf suchbaren Stream zu arbeiten.

Ich habe eine Lösung gefunden, Xuggler kann tatsächlich Streams über IURLPROTOCOLHANDLER handhaben, habe ich meine benutzerdefinierte Klasse erstellt, die iurlprotocolhandler implementiert und es "funktioniert". Ich habe von dieser Example gelernt, die Stream FSDataInputStream verwenden.