2012-05-24 35 views
42

Trong tài liệu của Android TextureView, bạn có thể sử dụng TextureView để phát video: Nhưng tôi không thể tìm thấy bất kỳ ví dụ nào về cách thực hiện việc này. Có ai biết không?Phát video trên TextureView

Tôi cần sử dụng textureView vì tôi muốn tạo hoạt ảnh cho video. Tôi muốn chơi một đoạn video ở định dạng .3gp/.mp4, không video từ camera :)

Bất kỳ trợ giúp sẽ được đánh giá cao ..

UPDATE:

Giải pháp được đăng tải như một câu trả lời wiki cộng đồng

+0

bạn đã bật acel phần cứng trên hoạt động chưa? – Ronnie

+0

Tôi chỉ cần đặt nó trong Tệp kê khai :) – Zelleriation

+0

Bạn có bất kỳ ý tưởng nào tại sao onSurfaceTextureAvailable không bao giờ được gọi không? –

Trả lời

37

Đây là cách bạn có thể làm điều đó: (giải pháp của tác giả câu hỏi, rằng ông gửi dưới dạng nội dung cập nhật trong câu hỏi)

Public class MediaPlayerDemo_Video extends Activity implements TextureView.SurfaceTextureListener { 


private MediaPlayer mMediaPlayer; 

private TextureView mPreview; 

@Override 
public void onCreate(Bundle icicle) { 

     super.onCreate(icicle); 

     mPreview = (TextureView) findViewById(R.id.surface); 
     mPreview.setSurfaceTextureListener(this); 
     extras = getIntent().getExtras(); 
     setContentView(mPreview); 
} 

public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 
Surface s = new Surface(surface); 

try { 
     mMediaPlayer= new MediaPlayer(); 
     mMediaPlayer.setDataSource("http://daily3gp.com/vids/747.3gp"); 
     mMediaPlayer.setSurface(s); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.setOnBufferingUpdateListener(this); 
     mMediaPlayer.setOnCompletionListener(this); 
     mMediaPlayer.setOnPreparedListener(this); 
     mMediaPlayer.setOnVideoSizeChangedListener(this); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mMediaPlayer.start(); 
     } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Và hoạt ảnh hoạt động thực sự tốt.

+0

Sử dụng TextureView thay vì SurfaceView giải quyết được sự cố nhấp nháy khi phát lại video. Cảm ơn! –

+1

R.id.surface & extras là gì trong onCreate? –

+0

@PranoyC TextureView, rõ ràng. –

-3

setContentView(mPreview); nhu cầu của bạn để được gọi trước khi

mPreview = (TextureView) findViewById(R.id.surface); 
mPreview.setSurfaceTextureListener(this); 
+0

ở đây bạn trả lời câu hỏi không đúng để trả lời câu trả lời .. sử dụng bình luận để sửa nó. – MBH

Các vấn đề liên quan