我正在尝试使用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中的自定义读/写的正确方法?