2012-12-14 3 views
0

내 응용 프로그램에서 .wmv 비디오와 같이 지원되는 Android가 아닌 비디오를 재생하려고하고 있으며 실제로 모든 프레임을 잡고 비트 맵을 만들 수 있습니다. 그것의."비디오와 같은"비트 맵을 연속적으로 표시

그래서 지금 비디오 뷰 (또는 다른보기)에서 비디오와 같은 비트 맵을 표시하려고합니다.

일부 코드는 : 나는 (는 FFmpeg를 사용하여) 비디오의 모든 프레임을 잡을 수 있지만, 난 그냥 그들을 표시하는 방법을 모른다처럼

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(); 

것 같습니다.

그런데 이미이 비디오를 .mp4 파일로 인코딩하여 VideoView에서 재생하려고 시도했지만 전체 비디오 (1 시간)를 처리하는 데 많은 시간이 필요하므로 지금은 그것을 인코딩하지 않고 곧바로 표시하려고합니다 .mp4 (또는 다른 안드로이드 지원 비디오)

어떤 조언이 있습니까?

답변

0

귀하의 문제가 무엇인지 잘 모르겠습니다.

캔버스가 채워 졌으므로 (올바르게 채워 졌다고 가정하면) draw (Canvas) 메서드를 호출하여 SurfaceView에 그릴 수 있습니다.

전체 비디오를 인코딩하는 데 너무 많은 시간이 필요하다면 인코딩이 매우 길어서 심각한 프레임 속도 문제가 발생할 수 있기 때문입니다 (또는 비디오가 지나치게 빠를 수도 있습니다. 긴?).

2

AnimationDrawable을 사용할 수 있습니다. 그것은 효과가있을 것이다.

1

FFplay를 사용하여 이미지 시퀀스를 실시간으로 재생할 수 있습니다. 먼저 비디오 파일로 인코딩 할 필요가 없습니다.

이 파일은 image1.bmp, image2.bmp, image3.bmp ... 등 지명되었다 말과 다시 초당 30 개 프레임을 재생하고 싶었, 시도 :

ffplay -framerate 30 -i image%d.bmp

관련 문제