编辑android VideoView框架

环境:

Nexus 7果冻豆4.1.2

问题:

我正在尝试使用VideoView制作适用于RTSP的Motion Detection应用程序。

我希望有像onNewFrameListener这样的东西

videoView.onNewFrame(Frame frame)

我试图通过VideoView访问RTSP流的原始帧,但在Android SDK中找不到任何支持。

我发现VideoView封装了Android的MediaPlayer类。

所以我潜入media_jni lib试图找到一种方法来访问原始帧,但无法找到字节缓冲区或代表帧的任何内容。

题:

任何人都有一个想法,我在哪里或如何找到这个缓冲区并获得它的访问?

或者通过VideoView实现运动检测的任何其他想法?

即使是我需要重新编译AOSP的情况。


您可以扩展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进行繁重的计算,在那里开始一个线程。 试着让我知道..


    在你的情况下,如果你正在使用实时动态而不是录制的视频,我会使用Camera Preview代替VideoView。 您可以使用相机预览回叫捕捉相机捕捉的每个帧。 这个回调实现了:

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

    我认为这可能对你有用。

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

    告诉你是否你正在寻找。

    祝你好运。

    链接地址: http://www.djcxy.com/p/66243.html

    上一篇: Editing android VideoView frames

    下一篇: Is GDI+ dash pattern bugged?