2016-04-09 2 views
2

Я использую xuggler для перекодирования видео в разные форматы. Если я открываю свой IContainer непосредственно из файла, он отлично работает, однако на этот раз я хочу открыть IContainer, используя InputStream. Странно, что я пытался открыть видео в формате mp4 через FileInputStream, IContainer можно открыть с помощью этого FileInputStream, но я не могу прочитать Ipacket в этом потоке. Может ли кто-нибудь дать мне несколько предложений? Пропустили что-нибудь? Я действительно нужна моя Xuggler, чтобы иметь дело с потокамиxuggler icontainer read from 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); 
} 

результаты

data: 0 
info: -1094995529 

Согласно IERROR, неизвестная ошибка здесь, когда я попытался прочитать пакет. Я использую xuggler 5.4

ответ

2

Прежде всего, потоки должны быть доступны для поиска (например, FSDataInputStream в hadoop), иначе Xuggler не сможет обработать его, FileInputStream не такой поток, грустный .... На самом деле функция seek() важно, чтобы Xuggler читал мультимедийный файл

Теперь, чтобы работать с поисковым потоком.

Я нашел решение, Xuggler на самом деле может обрабатывать потоки через IURLPROTOCOLHANDLER, я создал свой собственный класс, который реализует iurlprotocolhandler, и он «работает». Я узнал из этого Example, которые используют поток FSDataInputStream.