尝试使用android.media.MediaPlayer和SurfaceView播放媒体文件时出现问题?
我正在尝试使用android.media.MediaPlayer类来播放.mp4文件。我正在模拟器上进行尝试。不幸的是,我在运行应用程序时只看到一个空白屏幕 我已将文件testmp4放入文件夹mnt/sdcard/ 这是我正在使用的代码。有人能告诉我我做错了什么吗尝试使用android.media.MediaPlayer和SurfaceView播放媒体文件时出现问题?,android,Android,我正在尝试使用android.media.MediaPlayer类来播放.mp4文件。我正在模拟器上进行尝试。不幸的是,我在运行应用程序时只看到一个空白屏幕 我已将文件testmp4放入文件夹mnt/sdcard/ 这是我正在使用的代码。有人能告诉我我做错了什么吗 package com.mediaplayer; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer;
package com.mediaplayer;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MyPlayBack extends Activity implements SurfaceHolder.Callback{
/** Called when the activity is first created. */
private MediaPlayer mediaPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mediaPlayer=new MediaPlayer();
SurfaceView surface=(SurfaceView)findViewById(R.id.surface);
SurfaceHolder holder=surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setFixedSize(400, 300);
}
@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
mediaPlayer.setDisplay(holder);
try {
mediaPlayer.setDataSource("/sdcard/testmp4.mp4");
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IllegalArgumentException 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();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mediaPlayer.release();
}
}
main.xml
<强>编辑< /强>:最近我发现当我让应用程序运行很长一段时间时,我看到空白的白色屏幕。但是当我按下后退按钮,我可以看到视频剪辑的帧在应用关闭之前的片刻。我认为<>强>视频在白屏后面播放。前方。
为什么要重新发明车轮?使用VideoView,就是为了这个。如果你想知道如何正确看待它,请看下面的例子而且,模拟器不适合使用视频。使用真实设备进行视频应用程序开发/测试。为什么不使用VideoView?在真实的设备上试一试,模拟器对于视频播放来说很糟糕!谢谢。我会查看VideoView和getbackYup,在他的情况下,我想只使用VideoView就足够了,但是如果你只想播放视频的音乐(活动不可见),然后打开活动,在mediaplayer的位置显示并恢复视频,您还需要使用surfaceholder设置回显示(surfaceCreated和surfaceChanged中的mediaplayer.setDisplay(surfaceholder)和surfaceDestroyed中的mediaplayer.setDisplay(null))。但在这两种情况下:不需要SurfaceView,因为它实际上是在重新发明轮子:)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<SurfaceView
android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
</LinearLayout>