1

我试图在我的应用程序中重现不支持 android 的视频(如 .wmv 视频),实际上我能够抓取每一帧并创建它的位图。

所以,现在,我试图在 VideoView(或任何其他视图)中依次显示这些位图,就像视频一样。

一些代码:

while (true) {
                frame = frameGrabber.grab();
                if (frame == null)
                    break;
                frame2 =
                        IplImage.create(frame.width(), frame.height(),
                                opencv_core.IPL_DEPTH_8U, 4);
                opencv_imgproc.cvCvtColor(frame, frame2,
                        opencv_imgproc.CV_BGR2RGBA);

                bm =
                        Bitmap.createBitmap(frame2.width(),
                                frame2.height(), Bitmap.Config.ARGB_8888);
                bm.copyPixelsFromBuffer(frame2.getByteBuffer());
                canvas = new Canvas(bm);
                mVideoView.draw(canvas);
                canvas.save();

看起来我可以抓取视频的每一帧(使用 ffmpeg),但我只是不知道如何显示它们。

顺便说一句,我已经尝试将此视频编码为 .mp4 文件并在 VideoView 上播放,但处理整个视频需要很长时间(1 小时),所以,现在,我正在尝试显示它立即,无需对其进行编码 .mp4 (或任何其他 android 支持的视频)

有什么建议吗?

4

3 回答 3

1

您可以使用 AnimationDrawable 。它会起作用的。

一点点文档在这里

于 2015-07-15T07:33:00.323 回答
1

您可以使用 FFplay 实时回放您的图像序列。您无需先将其编码为视频文件。

假设您的文件被命名为 image1.bmp、image2.bmp、image3.bmp ... 等,并且您想以每秒 30 帧的速度播放它们,请尝试:

ffplay -framerate 30 -i image%d.bmp

于 2015-07-15T15:34:38.057 回答
0

我不确定你的问题是什么。

现在您的画布已填充(假设已正确填充),您可以通过调用其 draw(Canvas) 方法在 SurfaceView 上绘制它。

不过我对结果很好奇,因为如果你需要花这么多时间来编码完整的视频,这可能意味着你的编码很长,所以你可能有严重的帧率问题(或者视频可能非常长?)。

于 2012-12-14T18:12:30.427 回答