【问题标题】:Displaying Bitmaps sequentially, "like a video"顺序显示位图,“像视频一样”
【发布时间】:2018-04-22 16:58:39
【问题描述】:

我正在尝试在我的应用中重现不支持 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 支持的视频)

有什么建议吗?

【问题讨论】:

    标签: android bitmap ffmpeg


    【解决方案1】:

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

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

    ffplay -framerate 30 -i image%d.bmp

    【讨论】:

      【解决方案2】:

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

      一点点文档here

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-14
          • 2013-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-22
          相关资源
          最近更新 更多