Android: Comment créer une vidéo de joueur?

Je suis entrain de créer un enregistreur vidéo et souhaitez créer le lecteur vidéo pour prévisualiser les vidéos enregistrées. Modifiant le code à partir de cette page j'ai créé un MediaPreview classe de la manière suivante:

public class MediaPreview extends Activity implements OnErrorListener, 
OnBufferingUpdateListener,
OnCompletionListener, OnPreparedListener, SurfaceHolder.Callback{
private static final String TAG = "MediaPreview";
private MediaPlayer mp;
private SurfaceView mPreview;
private SurfaceHolder holder;
private Button btnPlay;
private Button btnPause;
private Button btnReset;
private Button btnStop;
private String mPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.media_preview);
mPreview = (SurfaceView)findViewById(R.id.mPreview);
btnPlay = (Button)findViewById(R.id.btnPlay);
btnPause = (Button)findViewById(R.id.btnPause);
btnReset = (Button)findViewById(R.id.btnReset);
btnStop = (Button)findViewById(R.id.btnStop);
getPathFromParentDialog();
btnPlay.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
playVideo();
}
});
btnPause.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
if(mp != null){
mp.pause();
}
}
});
btnReset.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(mp != null){
mp.seekTo(0);
}
}
});
btnStop.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(mp != null){
mp.stop();
mp.release();
}
}
});
getWindow().setFormat(PixelFormat.TRANSPARENT);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setFixedSize(400, 300);
}
@Override
protected void onResume() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
super.onResume();
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if(mp != null){
mp.stop();
mp.release();
}
return false;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
//TODO Auto-generated method stub
}
@Override
public void onCompletion(MediaPlayer mp) {
//TODO Auto-generated method stub
}
@Override
public void onPrepared(MediaPlayer mp) {
//TODO Auto-generated method stub
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
//TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//TODO Auto-generated method stub
}
private void playVideo() {
try{
mp = new MediaPlayer();
mp.setOnErrorListener(this);
mp.setOnBufferingUpdateListener(this);
mp.setOnCompletionListener(this);
mp.setOnPreparedListener(this);
mp.setAudioStreamType(2);
mp.setDisplay(mPreview.getHolder());
Runnable r = new Runnable(){
@Override
public void run() {
try{
setDataSource(mPath);
}
catch(Exception ex){
Log.e(TAG, ex.getMessage());
}
try {
mp.prepare();
Log.v(TAG, "Duration: ===> " + mp.getDuration());
} catch (IllegalStateException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
mp.start();
}
};
new Thread(r).start();
}
catch(Exception ex){
String sDummy = ex.toString();
if(mp != null){
mp.stop();
mp.release();
}
}
}
private void setDataSource(String path) throws IOException {
if(!URLUtil.isNetworkUrl(mPath)){
mp.setDataSource(mPath);
}
else{
URL url = new URL(mPath);
URLConnection cn = url.openConnection();
cn.connect();
InputStream stream = cn.getInputStream();
if(stream == null){
throw new RuntimeException("stream is null");
}
File fileTemp = File.createTempFile("mediaplayerTmp", "dat");
String tempPath = fileTemp.getAbsolutePath();
FileOutputStream out = new FileOutputStream(fileTemp);
byte buf[] = new byte[128];
do{
int numRead = stream.read(buf);
if(numRead <= 0){
break;
}
out.write(buf, 0, numRead);
}while(true);
mp.setDataSource(tempPath);
try{
stream.close();
}
catch(Exception ex){
String sDummy = ex.toString();
}
}
}
private void getPathFromParentDialog()
{
Intent intent = getIntent();
mPath = intent.getExtras().getString(MediaLibrary.FILENAME);
}
}

Le code s'exécute correctement (sans aucune exception) until mp.start();, mais l'écran est vide (il y a seulement les boutons sur l'écran).

Personne ne sait ce qui pourrait être mauvais dans le code ci-dessus ou est-il un exemple qui fonctionne disponible sur le web?

J'apprécierais vraiment votre aide

J'ai le même problème...si u a trouver aucune solution ,permettez-moi de bien vouloir le savoir

OriginalL'auteur Niko Gamulin | 2009-07-27