Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xuggler输入输出流处理器SIGSEGV_Java_Xuggler - Fatal编程技术网

Java xuggler输入输出流处理器SIGSEGV

Java xuggler输入输出流处理器SIGSEGV,java,xuggler,Java,Xuggler,我正在尝试运行xuggler的InputOutputStreamHandler示例。我正在尝试将视频转换为FLV,并将生成的视频写入标准输出。以下是源代码: import java.io.IOException; import java.io.OutputStream; import com.xuggle.mediatool.IMediaReader; import com.xuggle.mediatool.IMediaWriter; import com.xuggle.mediatool.T

我正在尝试运行xuggler的InputOutputStreamHandler示例。我正在尝试将视频转换为FLV,并将生成的视频写入标准输出。以下是源代码:

import java.io.IOException;
import java.io.OutputStream;

import com.xuggle.mediatool.IMediaReader;
import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;
import com.xuggle.xuggler.io.InputOutputStreamHandler;
import com.xuggle.xuggler.io.XugglerIO;

public class Test {

    public static void main(String[] args) throws IOException {
        OutputStream outStream = System.out;
        InputOutputStreamHandler handler = new InputOutputStreamHandler(outStream);

        IMediaReader reader = ToolFactory.makeReader("myvideo.flv");
        IMediaWriter writer = ToolFactory.makeWriter(XugglerIO.map(XugglerIO
            .generateUniqueName(handler, ".flv"), handler), reader);
        reader.addListener(writer);
        while(reader.readPacket() == null);
    }
 }
我的问题是,当我尝试运行此程序时,它会崩溃,并出现以下错误:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f3ed28442e8, pid=9103, tid=139908218222336
#
# JRE version: 7.0_21-b11
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.21-b01 mixed mode linux-amd64     compressed oops)
# Problematic frame:
# C  [xuggle5976644928112967115.tmp+0x2f02e8]  avio_write+0x18
...
文件hs_err_pid.log提到:

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.xuggle.xuggler.XugglerJNI.IContainer_writeHeader(JLcom/xuggle/xuggler/IContainer;)I+0
j  com.xuggle.xuggler.IContainer.writeHeader()I+5
j  com.xuggle.mediatool.MediaWriter.getStream(I)Lcom/xuggle/xuggler/IStream;+222
j  com.xuggle.mediatool.MediaWriter.encodeAudio(ILcom/xuggle/xuggler/IAudioSamples;)V+17
j  com.xuggle.mediatool.MediaWriter.onAudioSamples(Lcom/xuggle/mediatool/event/IAudioSamplesEvent;)V+16
j  com.xuggle.mediatool.AMediaToolMixin.onAudioSamples(Lcom/xuggle/mediatool/event/IAudioSamplesEvent;)V+31
j  com.xuggle.mediatool.MediaReader.dispatchAudioSamples(ILcom/xuggle/xuggler/IAudioSamples;)V+14
j  com.xuggle.mediatool.MediaReader.decodeAudio(Lcom/xuggle/xuggler/IStreamCoder;Lcom/xuggle/xuggler/IPacket;)V+91
j  com.xuggle.mediatool.MediaReader.readPacket()Lcom/xuggle/xuggler/IError;+131
j  Test.main([Ljava/lang/String;)V+45
v  ~StubRoutines::call_stub
有人知道我如何绕过这个问题吗


提前谢谢你

您说您正在尝试将视频转换为flv,但您的输入文件已经是flv文件-myvideo.flv。对吗

另外,您是否尝试过简化makeWriter调用,使其仅使用硬编码的文件名?所以它变成了这样:

IMediaWriter writer = ToolFactory.makeWriter("output.flv", reader);
我很好奇在System.out streamhandler上生成唯一文件名的整个过程是否与此问题有关。也许可以添加一些代码来记录生成的文件名

String filename = XugglerIO.map(XugglerIO.generateUniqueName(handler, ".flv"),
  handler);
System.out.println(filename);
更新

您可以尝试缩小问题范围的其他一些建议:

创建自己的OutputStream类,该类只记录对它的调用,以便更好地了解代码失败的地方。它是在尝试写东西之前就失败了,还是在它死之前就达到了某一点。 如果这样做没有任何效果,请尝试创建自己的类,该类除了记录调用之外什么都不做。看看您是否收到OutputStream无法处理的调用,例如seek。
可能只是Xugler无法将某些格式输出到流。例如,如果FLV头是需要写入文件开头的内容,但只有在写入其他内容(例如文件大小)后,才知道头中需要的详细信息,则需要能够返回文件开头的输出处理程序。显然,你不能用流来实现这一点。

嗨,谢谢你的回答。输入视频没有问题,我尝试过mp4、avi和其他格式,也遇到了同样的问题。我尝试使用simple writer,它将文件写入输出。我的目标是将转码后的视频写入输出流,而不是文件。例如System.out,我对ByteArrayOutputStream或PipedOutputStream也有同样的问题。我已经添加了一些其他建议,您可以尝试对我的答案进行修改。但我怀疑问题在于,由于文件格式的结构,Xugler无法将flv输出到流。