我正在尝试在我的应用中重现一个不支持Android的视频(如.wmv视频),实际上我可以抓住每一帧并创建一个Bitmap。
所以,现在,我正试图在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支持的视频)
有任何建议吗?
答案 0 :(得分:1)
您可以使用AnimationDrawable。它会起作用。
一点点文档here
答案 1 :(得分:1)
您可以使用FFplay实时播放图像序列。您不需要先将其编码为视频文件。
假设您的文件名为image1.bmp,image2.bmp,image3.bmp ...等,并且您希望以每秒30帧的速度播放它们,请尝试:
ffplay -framerate 30 -i image%d.bmp
答案 2 :(得分:0)
我不确定你的问题是什么。
现在您的画布已填充(假设它已正确填充),您可以通过调用其draw(Canvas)方法在SurfaceView上绘制它。
我对结果感到好奇,因为如果你需要花费很多时间对完整的视频进行编码,那么这可能意味着你的编码很长,所以你可能会遇到严重的帧率问题(或者视频可能非常长?)。