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();
}
}
OriginalL'auteur Arpit Garg | 2012-06-16
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé TextureView au lieu de la surface d'affichage (il permet de faire pivoter la vidéo) et définir son setScale{X|Y}() de manière appropriée dans:
Remarque que j'ai tourné ma vidéo, c'est pourquoi j'ai mis à l'échelle pour X.
OriginalL'auteur Cynichniy Bandera
Hi arpit j'ai également travaillé sur les mêmes dispositifs que vous avez mentionné pour la lecture de fichiers vidéo,
J'ai le même problème lors de l'application des contrôles de lecteur vidéo (méthode Abstraite n'est pas disponible).
Comme pour mon R&D sur ce sujet, j'arrive à la conclusion que la version Personnalisée d'android OS et le matériel de ces appareils ne sont pas compatibles les uns les autres comme ils sont de très mauvaise qualité comparé à d'appareils Samsung,
donc beaucoup de méthodes bien ils sont dans android OS, mais pas pris en charge par de tels dispositifs.
Donc je pense qu'il n'y a pas de solutions à ces problèmes, dans ces dispositifs.
plz essayez de vous concentrer à l'aide d'appareils de la norme alors que l'élaboration de tout projet. cela peut vous aider beaucoup.
Grâce. 🙂
OriginalL'auteur Prashant Mishra