title: android how to resize video width and height in surface view for media player
body: <p><strong>Want to resize the video in surface view</strong></p>
  
  <p>I am Playing a video in Media Player with using a Surface view and holder for video...</p>
  
  <p><em>// but on implementing MediaPlayerControl on some devices say Micromax, iball, Akash tablet it gives error of abstract method not available as tracked by ACRA bug tracking.</em> </p>
  
  <p>Now I want to have solution of mentioned problems:</p>
  
  <ul>
  <li><p>How to get media player controls active in all devices wihtout crashing due to abstract method as for media controller in some
  devices.</p></li>
  <li><p>How can I resize the surface view of video.</p></li>
  </ul>
  
  <p>The code is working f9 on <strong>samsung galaxy gt p1000 OS 2.2</strong> and some cheaper device WorldTeck etc.</p>
  
  <p>But on <strong>Creative ziio 7 OS version is 2.2.1 (480*800)</strong> <strong>resolution density is 160 dpi</strong> video seems to be zoomed and gets cutt off from the edges.</p>
  
  <p>The code is shown below:</p>
  
  <pre><code>/* Media Player Control is commented due to force close in some devices say *micromax,Creative ziio, akash etc */
  
      public class VideoViewerActivity extends Activity implements
              OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,
              OnVideoSizeChangedListener, SurfaceHolder.Callback {
          // implements  ERROR in some devices , MediaPlayerControl
          private static final String TAG = "MediaPlayerDemo";
          private int mVideoWidth;
          private int mVideoHeight;
          private MediaPlayer mMediaPlayer;
          private SurfaceView mPreview;
          private SurfaceHolder holder;
          private String path = "";
          private Bundle extras;
          private static final String MEDIA = "media";
          private static final int LOCAL_AUDIO = 1;
          private static final int STREAM_AUDIO = 2;
          private static final int RESOURCES_AUDIO = 3;
          private static final int LOCAL_VIDEO = 4;
          private static final int STREAM_VIDEO = 5;
          private boolean mIsVideoSizeKnown = false;
          private boolean mIsVideoReadyToBePlayed = false;
          /* ERROR In Abstract method implementation in the other devices */
          // private MediaController mediaController;
          private Context context;
          private final Handler handler = new Handler();
  
          /**
           * 
           * Called when the activity is first created.
           */
          @Override
          public void onCreate(Bundle icicle) {
              super.onCreate(icicle);
              setContentView(R.layout.video_layout);
              context = this;
              path = getIntent().getExtras().getString("media");
  
              Log.v("arpit", "path " + path);
              mPreview = (SurfaceView) findViewById(R.id.surfaceview1);
              holder = mPreview.getHolder();
              holder.addCallback(this);
              holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
              extras = getIntent().getExtras();
  
          }
  
          private void playVideo() {
              doCleanUp();
              try {
  
                  // Create a new media player and set the listeners
                  File f = new File(path);
                  // FileInputStream in = new FileInputStream(f);
  
                  RandomAccessFile randomAccessFile = new RandomAccessFile(f, "r");
                  // randomAccessFile.skipBytes(1024);
                  FileDescriptor fileDescriptor = randomAccessFile.getFD();
  
                  mMediaPlayer = new MediaPlayer();
                  mMediaPlayer.setDataSource(fileDescriptor, Constant.key1.length
                          + Data.deviceID.length(), f.length());
  
                  mMediaPlayer.setDisplay(holder);
                  mMediaPlayer.prepare();
                  mMediaPlayer.setOnBufferingUpdateListener(this);
                  mMediaPlayer.setOnCompletionListener(this);
                  mMediaPlayer.setOnPreparedListener(this);
                  mMediaPlayer.setOnVideoSizeChangedListener(this);
                  mMediaPlayer.setScreenOnWhilePlaying(true);
  
                  // mediaController = new MediaController(this);
                  mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  
              } catch (Exception e) {
                  Log.e(TAG, "error: " + e.getMessage(), e);
                  Toast.makeText(context, "supported video was not found",
                          Toast.LENGTH_SHORT).show();
                  finish();
              }
          }
  
          public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
              Log.v(TAG, "onVideoSizeChanged called");
              if (width == 0 || height == 0) {
                  Log.e(TAG, "invalid video width(" + width + ") or height(" + height
                          + ")");
                  return;
              }
              mIsVideoSizeKnown = true;
              mVideoWidth = width;
              mVideoHeight = height;
              if (mIsVideoReadyToBePlayed &amp;&amp; mIsVideoSizeKnown) {
                  startVideoPlayback();
              }
          }
  
  
          public void surfaceDestroyed(SurfaceHolder surfaceholder) {
              Log.d(TAG, "surfaceDestroyed called");
          }
  
          public void surfaceCreated(SurfaceHolder holder) {
              Log.d(TAG, "surfaceCreated called");
              playVideo();
  
          }
  
          private void doCleanUp() {
              mVideoWidth = 0;
              mVideoHeight = 0;
              mIsVideoReadyToBePlayed = false;
              mIsVideoSizeKnown = false;
          }
  
          private void startVideoPlayback() {
              Log.v(TAG, "startVideoPlayback");
  //also tried and used the below line but nothing good 
  
  
  // holder.setFixedSize(480, 800);
  
  holder.setFixedSize(mVideoWidth, mVideoHeight);
  
  mMediaPlayer.start();
  
          }
  
  
      }
  </code></pre>