android comment redimensionner la vidéo de la largeur et de la hauteur de la surface en vue pour le media player

Souhaitez redimensionner la vidéo en surface d'affichage

Je suis la Lecture d'une vidéo dans un Lecteur Multimédia avec l'aide d'une Surface d'affichage et le support pour la vidéo...

//mais sur la mise en œuvre de MediaPlayerControl sur certains périphériques dire Micromax, iball, Akash tablette, il donne une erreur de méthode abstraite ne peut être suivi par l'ACRA de suivi des bogues.

Maintenant, je veux avoir la solution des problèmes mentionnés:

  • Comment obtenir des contrôles du lecteur de médias active dans tous les appareils sans s'écraser en raison de la méthode abstraite comme pour contrôleur de médias dans certains
    les appareils.

  • Comment puis-je redimensionner la surface d'affichage de la vidéo.

Le code de travail f9 sur samsung galaxy gt-p1000 OS 2.2 et certaines moins cher appareil WorldTeck etc.

Mais sur Creative ziio 7 OS version 2.2.1 (480*800) résolution densité est de 160 dpi vidéo semble être agrandie et devient cutt off à partir des bords.

Le code est indiqué ci-dessous:

/* 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 && 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();
}
}
essayez de ma réponse.Peut cela va vous aider.

OriginalL'auteur Arpit Garg | 2012-06-16