57

Android TextureViewのドキュメントでは、 TextureView を使用してビデオを再生できると書かれています。しかし、これを行う方法の例が見つからないようです。誰か知っていますか?

textureViewビデオをアニメーション化したいので、を使用する必要があります。カメラからのビデオではなく、.3gp/.mp4 形式でビデオを再生したい :)

どんな助けでも大歓迎です..

アップデート:

ソリューションはコミュニティ wiki の回答として投稿されます

4

3 に答える 3

53

これを行う方法は次のとおりです:(質問の作成者による解決策、質問の更新として投稿したもの)

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 = new TextureView(this);
      mPreview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
      mPreview.setSurfaceTextureListener(this);

      extras = getIntent().getExtras();

      setContentView(mPreview);
 }

 @Override
 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();
    }   
} 

そして、それをアニメーション化することは本当にうまくいきます。

于 2014-10-20T15:48:53.227 に答える
6

私は同じ問題を抱えていて、TextureView. これが誰かに役立つなら、私は見つけsetScaleXて非常に便利です。http://developer.android.com/reference/android/view/View.html#setScaleX%28float%29setScaleY

ただし、API 16 以降のみをターゲットにしている場合:

mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);

やるべきです:)

于 2013-11-27T10:27:41.130 に答える