7

環境:

Nexus7ジェリービーンズ4.1.2

問題:

VideoViewを使用してRTSPで動作するモーション検出アプリケーションを作成しようとしています。

onNewFrameListenerのようなものがあったらいいのに

videoView.onNewFrame(Frame frame)

VideoViewを介してRTSPストリームの生のフレームにアクセスしようとしましたが、AndroidSDKでそのサポートを見つけることができませんでした。

VideoViewがAndroidのMediaPlayerクラスをカプセル化していることがわかりました。

それで私は生のフレームにアクセスする方法を見つけるためにlibに飛び込みましたmedia_jni、しかしバイトバッファまたはフレームを表すものを見つけることができませんでした。

質問:

誰もがこのバッファをどこで、どのように見つけてアクセスできるかを知っていますか?

または、VideoViewを介してモーション検出を実装する他のアイデアはありますか?

AOSPを再コンパイルする必要があると言っても。

4

2 に答える 2

3

メソッドを拡張しVideoViewてオーバーライドできますdraw(Canvas canvas)

  • を通じて受け取ったキャンバスにビットマップを設定しますdraw
  • super.draw()ビットマップに描画されるフレームを取得する呼び出し。
  • ビットマップからフレーム ピクセルにアクセスします。

    class MotionDetectorVideoView extends VideoView {
    public Bitmap mFrameBitmap;
    ...
        @Override
        public void draw(Canvas canvas) {
            // set your own member bitmap to canvas..
            canvas.setBitmap(mFrameBitmap);
            super.draw(canvas);
            // do whatever you want with mFrameBitmap. It now contains the frame.
            ...
            // Allocate `buffer` big enough to hold the whole frame.
            mFrameBitmap.copyPixelsToBuffer(buffer);
            ...
        }
    }
    

これが機能するかどうかはわかりません。で重い計算を行うことは避けdraw、そこでスレッドを開始してください。

于 2012-12-02T08:15:15.447 に答える
1

あなたの場合、録画されたビデオではなくライブモーションで作業している場合は、VideoView の代わりにカメラプレビューを使用します。カメラ プレビュー コールバックを使用して、カメラでキャプチャされたすべてのフレームをキャッチできます。このコールバックは以下を実装します:

onPreviewFrame(byte[] data, Camera camera)
Called as preview frames are displayed.

これはあなたにとって役立つと思います。

http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html

それがあなたが探しているものかどうか教えてください。

幸運を。

于 2012-11-30T12:10:21.133 に答える