我试图流一些视频:与3gp一切正常,顺利,但当我尝试mp4(我用了几个视频测试,包括这一个,这应该肯定是好的和有效的 - commonsware.com/misc/test.mp4),我得到了一个例外。MediaPlayer.prepare()失败,并有一个有效的http链接
我有一个Android 2.2平板电脑进行测试,是我的问题,因为这个?请问mp4-via-http在android 2.3或更新版本上工作吗?或者是否有任何特定于我不知道的mp4准备步骤?现在我只做到以下几点:
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
gMp=new MediaPlayer();
gMp.setDisplay(hndlr);
try {
gMp.setDataSource(this, Uri.parse("http://commonsware.com/misc/test.mp4"));
} 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();
}
try {
gMp.prepareAsync();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
gMp.start();
}
这里是我的错误日志:
I/ActivityManager( 107): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.video.mp/.VideoSharingViaMPActivity }
I/ActivityManager( 107): Start proc com.video.mp for activity com.video.mp/.VideoSharingViaMPActivity: pid=746 uid=10055 gids={1015, 3003}
D/dalvikvm( 746): GC_FOR_MALLOC freed 576 objects/46928 bytes in 37ms
I/dalvikvm-heap( 746): Grow heap (frag case) to 3.549MB for 1000016-byte allocation
D/dalvikvm( 746): GC_FOR_MALLOC freed 170 objects/8488 bytes in 44ms
D/MediaPlayer( 746): Couldn't open file on client side, trying server side
V/MediaPlayerService( 67): Client(3) constructor
V/MediaPlayerService( 67): Create new client(3) from pid 746, url=http://commonsware.com/misc/test.mp4, connId=3
V/MediaPlayerService( 67): setDataSource(http://commonsware.com/misc/test.mp4)
V/MediaPlayerService( 67): player type = 1
V/MediaPlayerService( 67): create PVPlayer
V/MediaPlayerService( 67): setDataSource
V/MediaPlayerService( 67): [3] setVideoSurface(0x3cfd8)
V/MediaPlayerService( 67): [3] setAudioStreamType(3)
V/MediaPlayerService( 67): [3] prepareAsync
V/MediaPlayerService( 67): [3] notify (0x3b2f8, 3, 0, 0)
I/PlayerDriver( 67): buffering (1)
V/MediaPlayerService( 67): [3] notify (0x3b2f8, 3, 1, 0)
V/MediaPlayerService( 67): [3] notify (0x3b2f8, 200, 1, 26)
W/MediaPlayer( 746): info/warning (1, 26)
E/PlayerDriver( 67): Command PLAYER_INIT completed with an error or info PVMFErrResource
V/MediaPlayerService( 67): [3] notify (0x3b2f8, 100, 1, -17)
W/PlayerDriver( 67): PVMFInfoErrorHandlingComplete
E/MediaPlayer( 746): error (1, -17)
W/System.err( 746): java.io.IOException: Prepare failed.: status=0x1
W/System.err( 746): at android.media.MediaPlayer.prepare(Native Method)
W/System.err( 746): at com.video.mp.VideoSharingViaMPActivity.surfaceCreated(VideoSharingViaMPActivity.java:146)
请发布错误信息。 – ciphor 2012-01-31 04:07:11
编辑帖子并添加了一些内容,似乎我误解了它,并且它没有准备(或prepareAsync,我得到了相同的结果) – alchemiss 2012-01-31 05:47:55
您不应该在prepareAsync之后调用'gMp.start()',但是您应该添加'MediaPlayer.OnPreparedListener'通过'gMp.setOnPreparedListener()'。在这个听众中,是时候启动你的播放器了。 – OleGG 2012-01-31 12:10:12