初学android开发,视频播放问题
想在手机上播放一段视频,无奈一直报错,代码如下
animation.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
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:visibility="visible"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
</SurfaceView>
</RelativeLayout>
animation.java:
package wood.recorder.animation;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Animation extends Activity implements OnCompletionListener {
/** Called when the activity is first created. */
SurfaceView mPreview;
SurfaceHolder holder;
String path;
MediaPlayer mPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animation);
mPreview = (SurfaceView)findViewById(R.id.surface);
holder = mPreview.getHolder();
path = "/sdcard/title.mp4";
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(path);
mPlayer.prepare();
} 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
System.out.println("IOException");
e.printStackTrace();
}
mPlayer.setOnCompletionListener(this);
mPlayer.setDisplay(holder);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.start();
}
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.pause();
mp.stop();
mp.release();
//mp.reset();
}
@Override
public void onStop(){
mPlayer.stop();
super.onStop();
}
}
DDMS报错情况如下:
07-08 09:05:33.818: ERROR/PlayerDriver(31): Command PLAYER_PREPARE completed with an error or info PVMFErrResourceConfiguration
07-08 09:05:33.818: ERROR/MediaPlayer(242): error (1, -16)
07-08 09:05:33.829: INFO/System.out(242): IOException
07-08 09:05:33.829: WARN/System.err(242): java.io.IOException: Prepare failed.: status=0x1
07-08 09:05:33.838: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete
07-08 09:05:33.848: WARN/System.err(242): at android.media.MediaPlayer.prepare(Native Method)
07-08 09:05:33.848: WARN/System.err(242): at wood.recorder.animation.Animation.onCreate(Animation.java:30)
07-08 09:05:33.848: WARN/System.err(242): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-08 09:05:33.848: WARN/System.err(242): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
07-08 09:05:33.848: WARN/System.err(242): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
07-08 09:05:33.848: WARN/System.err(242): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
07-08 09:05:33.858: WARN/System.err(242): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
07-08 09:05:33.858: WARN/System.err(242): at android.os.Handler.dispatchMessage(Handler.java:99)
07-08 09:05:33.858: WARN/System.err(242): at android.os.Looper.loop(Looper.java:123)
07-08 09:05:33.858: WARN/System.err(242): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-08 09:05:33.858: WARN/System.err(242): at java.lang.reflect.Method.invokeNative(Native Method)
07-08 09:05:33.858: WARN/System.err(242): at java.lang.reflect.Method.invoke(Method.java:521)
07-08 09:05:33.868: WARN/System.err(242): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-08 09:05:33.868: WARN/System.err(242): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-08 09:05:33.878: WARN/System.err(242): at dalvik.system.NativeStart.main(Native Method)
手机模拟器显示是黑的,除了一个标签
另外有一点要说明的是,当我把path = "/sdcard/title.mp4"改为path = "/sdcard/try.mp3时,可以播放,try.mp3是一个音频文件,title.mp4是一个很短的视频文件
在线等高手指点...
[解决办法]
public class test extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 创建VideoView对象 */
final VideoView videoView = (VideoView) findViewById(R.id.VideoView01);
/* 操作播放的三个按钮 */
Button PauseButton = (Button) this.findViewById(R.id.PauseButton);
Button LoadButton = (Button) this.findViewById(R.id.LoadButton);
Button PlayButton = (Button) this.findViewById(R.id.PlayButton);
/* 装载按钮事件 */
LoadButton.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
/* 设置路径 */
videoView.setVideoPath(“/sdcard/test.mp4″);
/* 设置模式-播放进度条 */
videoView.setMediaController(new MediaController(test.this));
videoView.requestFocus();
}
});
/* 播放按钮事件 */
PlayButton.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
/* 开始播放 */
videoView.start();
}
});
/* 暂停按钮 */
PauseButton.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
/* 暂停 */
videoView.pause();
}
});
}
}
[解决办法]
之前我也写过一个简单的播放器,貌似和楼主的差不多啊,只是数据放在系统里,而不是在sdcard里。当时我是在《Android SDK范例开发大全》里找到的代码,稍稍修改而成的。建议楼主查查。
