想在手机上播放一段视频,无奈一直报错,代码如下
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是一个很短的视频文件
在线等高手指点...
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是一个很短的视频文件
在线等高手指点...
解决方案 »
- android 语音唤醒
- 新浪sdk 调用api报错 ,求解
- Listview如何实现在空白处长按,弹出contextMenu实现添加等功能?
- 有大侠知道这种错误吗?MAC终端编译时候,error: 'CCArmature' does not name a type
- viewpager能否直接使用服务器上的图片,还是必须先缓存下来再显示
- android中使用sqlite的问题
- 小米3 webview 不能响应文件上传事件
- android 集成了facebook之后再有app的情况下不能登录
- android SQLite更新问题
- Android studio如何编辑xml文件?
- 开发的输入法在模拟器上调试能用,在真机上不能,怎么回事
- android应用如何备份
我给的那段代码只是一个用VideoView的一个简单例子哈 , 仅做参考
我给的那段代码只是一个用VideoView的一个简单例子哈 , 仅做参考
http://www.blogjava.net/zh-weir/archive/2010/01/24/310617.html
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voicechanger);
mMediaPlayer = new MediaPlayer();
bt_play = (Button) findViewById(R.id.play);
bt_play.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
if (!mMediaPlayer.isPlaying() && !paused)
startPlay();
else if (!mMediaPlayer.isPlaying() && paused) {
mMediaPlayer.start();
paused = false;
} else {
mMediaPlayer.pause();
buttonState(0, 2, 1);
paused = true;
}
public void startPlay() {
System.out.println("startPlay");
paused = false;
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.reset();
System.out.println(filepath + "!!!!!!!!");
try {
mMediaPlayer.setDataSource(filepath);
mMediaPlayer.prepare();
mWakeLock.acquire();
mMediaPlayer.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();
}
}
filepath就是你存放视频文件的路径了,需要是3GP格式的
大家可以看下这个原文如下看Android官方的Dev Guide时,在Audio and Video这章节中,其中Playing from a File or Stream 中有一段代码,如下: MediaPlayer mp = new MediaPlayer();
mp.setDataSource(PATH_TO_FILE);
mp.prepare();
mp.start();定义好PATH_TO_FILE,可以通过以下代码进行定义,String SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();
String path= SDCardRoot + File.separator + “video” + File.separator + “life.mp4″; 此处根据实际情况进行定义。定义完后,在模拟器中播放的时候报异常,java.io.IOException: Prepare failed.: status=0×1;通过上网查找资料,得知可以通过以下方案可以播放视频文件,如下:mp.setDataSource(somePathToAudioFile);这个方法中调用的是setDataSource(String);在Java中有一个FileDescriptor;我们可以通过getFD()方法得到一个FileDescriptor;以避免这些错误;代码如下:MediaPlayer mp = new MediaPlayer();
try {
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
mp.setDataSource(fis.getFD());
mp.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
e.printStackTrace();
}
mp.start(); 但是,有一个疑问,一直没有搞清楚,当我把life.mp4换成xin.rm后,即.rm格式的视频,却播放不了,找了好多资料,一直没有找到,在此先把问题留着了,不知道是不是不支持rm格式的视频。
把mediaPlayer.prepare;改成
mediaPlayer.prepareAsync();
试试