2

Android用のJavaCVを利用しようとしています。スクリーンショットで構成されるビデオ ストリームを作成したいと思います。FFmpegFrameRecorder を使用してファイルを書き込めることがわかりましたが、ストリーム、配列、バッファなど、ファイル以外には書き込めません。

次に、'avio_alloc_context' と read/write/seek コールバックを使用するカスタム 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