Question

i am trying to encode videos into 3gp format using xuggler, i somehow got it to work, work as in the program stopped throwing errors and exceptions, but the new file that is created does not have any video. Now there is no error or exception for me to work with so i have stuck a wall. EDIT: Note the audio is working as it shud.

This is the code for the main function where the listeners are configured

IMediaReader reader = ToolFactory.makeReader("/home/hp/mms/b.flv");

    IMediaWriter writer = ToolFactory.makeWriter("/home/hp/mms/xuggle/a_converted.3gp", reader);

    IMediaDebugListener debugListener = ToolFactory.makeDebugListener();
    writer.addListener(debugListener);

    ConvertVideo convertor = new ConvertVideo(new File("/home/hp/mms/b.flv"), new File("/home/hp/mms/xuggle/a_converted.3gp"));
    // convertor.addListener(writer);
    reader.addListener(writer);
    writer.addListener(convertor);

    while (reader.readPacket() == null)
        ;

And this is the code for the convertor that i wrote.

public ConvertVideo(File inputFile, File outputFile)
{
    this.outputFile = outputFile;
    reader = ToolFactory.makeReader(inputFile.getAbsolutePath());
    reader.addListener(this);
}
private IVideoResampler videoResampler = null;
private IAudioResampler audioResampler = null;

@Override
public void onAddStream(IAddStreamEvent event)
{
    if (writer == null)
    {
        writer = ToolFactory.makeWriter(outputFile.getAbsolutePath(), reader);

    }

    int streamIndex = event.getStreamIndex();
    IStreamCoder streamCoder = event.getSource().getContainer().getStream(streamIndex).getStreamCoder();

    if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO)
    {
        streamCoder.setFlag(IStreamCoder.Flags.FLAG_QSCALE, false);
        writer.addAudioStream(streamIndex, 0, 1, 8000);
    }
    else if (streamCoder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO)
    {
        streamCoder.setFlag(IStreamCoder.Flags.FLAG_QSCALE, false);
        streamCoder.setCodec(ICodec.findEncodingCodecByName("h263"));
        writer.addVideoStream(streamIndex, 0, VIDEO_WIDTH, VIDEO_HEIGHT);

    }
    super.onAddStream(event);
}

// //
@Override
public void onVideoPicture(IVideoPictureEvent event)
{
    IVideoPicture pic = event.getPicture();
    if (videoResampler == null)
    {
        videoResampler = IVideoResampler.make(VIDEO_WIDTH, VIDEO_HEIGHT, pic.getPixelType(), pic.getWidth(), pic.getHeight(), pic.getPixelType());
    }
    IVideoPicture out = IVideoPicture.make(pic.getPixelType(), VIDEO_WIDTH, VIDEO_HEIGHT);
    videoResampler.resample(out, pic);

    IVideoPictureEvent asc = new VideoPictureEvent(event.getSource(), out, event.getStreamIndex());
    super.onVideoPicture(asc);
    out.delete();
}

@Override
public void onAudioSamples(IAudioSamplesEvent event)
{
    IAudioSamples samples = event.getAudioSamples();
    if (audioResampler == null)
    {
        audioResampler = IAudioResampler.make(1, samples.getChannels(), 8000, samples.getSampleRate());
    }
    if (event.getAudioSamples().getNumSamples() > 0)
    {
        IAudioSamples out = IAudioSamples.make(samples.getNumSamples(), samples.getChannels());
        audioResampler.resample(out, samples, samples.getNumSamples());

        AudioSamplesEvent asc = new AudioSamplesEvent(event.getSource(), out, event.getStreamIndex());
        super.onAudioSamples(asc);
        out.delete();
    }
}

I just cant seem to figure out where the problem is. I wud be thankful if someone wud plz point me in the right direction.

EDIT: If i see the properties of my newly encoded video, its audio properties are set and its video properties are not i.e in video properties, dimension= 0 x 0, frame rate= N/A and codec= h.263. The problem here is the 0 x 0 dimension.

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top