2

我正在尝试将 JavaCV 用于 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 中初始化自定义读/写的正确方法吗?

4

0 回答 0