编辑android VideoView帧

问题描述 投票:7回答:2

Environment:

Nexus 7 Jelly Bean 4.1.2

Problem:

我正在尝试使用VideoView制作适用于RTSP的运动检测应用程序。

我希望有类似onNewFrameListener的东西

videoView.onNewFrame(Frame frame)

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

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

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

Question:

任何人都知道我在哪里或如何找到这个缓冲区并获得访问权限?

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

即使我需要重新编译AOSP也是如此。

android android-videoview android-source android-4.2-jelly-bean motion-detection
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中进行繁重的计算,在那里开始一个线程。


1
投票

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

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

我觉得它对你有用。

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

告诉您这是否是您要搜索的内容。

祝好运。

© www.soinside.com 2019 - 2024. All rights reserved.