使用JavaCV读/写流

时间:2012-11-27 11:28:18

标签: android video ffmpeg javacv

我正在尝试使用JavaCV for android。我想创建一个由截图组成的视频流。我发现我可以使用FFmpegFrameRecorder编写一个文件,但我不能写入流,数组,缓冲区或其他任何文件。

接下来我发现了一段使用'avio_alloc_context'和读/写/搜索回调的自定义FrameRecorder的代码。不幸的是,它只是一个片段,而且它是用C ++编写的。 android上的'avio_alloc_context'方法需要Read_packet,Read_packet和Seek回调,因此我无法传递Write_packet回调。此外,在'avio_alloc_context'调用之后,我在传递给'avio_alloc_context'的所有对象上调用'finalize'。

final VideoOutputStream videoOutputStream = new VideoOutputStream(stream);

Read_packet read_packet = new Read_packet() {
    @Override
    public int call(Pointer arg0, BytePointer arg1, int arg2) {
        VideoOutputStream videoStream = (VideoOutputStream) arg0;
        try {
            videoStream.write(arg1.getStringBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return arg2;
    }
};

AVIOContext pb = avio_alloc_context(new MBytePointer(av_malloc(video_outbuf_size)), video_outbuf_size, 1,videoOutputStream, null, read_packet, null);

oc.pb(pb);

使用上面的代码不会崩溃或报告错误。我只是不断获取空文件。

我的问题是 - 你们中的任何人都设法让它发挥作用吗?您是否知道在JavaCV中初始化FrameRecorder / Grabber中的自定义读/写的正确方法?

0 个答案:

没有答案