2012-01-31 11 views
1

3gpの動画はすべてうまく動作しますが、mp4を試したときには(この動画も含めていくつかの動画を使用しましたが、良いと有効 - commonsware.com/misc/test.mp4)、私は例外がある。MediaPlayer.prepare()が有効なhttpリンクで失敗する

私はテストのためにアンドロイド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) 
+2

エラー情報を投稿してください。 – ciphor

+0

投稿を編集して追加しましたが、私が誤解しているようで、prepare(またはprepareAsync、両方とも同じ結果が得られます)で失敗します。 – alchemiss

+0

prepareAsyncの直後に 'gMp.start 'gMp.setOnPreparedListener()'を介して 'MediaPlayer.OnPreparedListener'を呼び出します。このリスナーでは、あなたのプレイヤーを開始する時間です。 – OleGG

答えて

0

これを確認してください:本当のリンクは(また、私は、私のブラウザでwww存在しないとのリンクをチェックする)wwwずにいる間、あなたのコードでは、リンクhttp://www.commonsware.com/misc/test.mp4を持っています。

+0

Ouch。それはまあまあ恥ずかしいでしょう。幸運なことに、私のコードにwwwの部分がなくてもリンクがあり、まだ動作していません。 – alchemiss

+0

ああ何でも。私はさまざまなエンコーディングプログラムを試して、うまくやったものを見つけました。だから問題はファイルにあった。 – alchemiss

0

あなたが(起動する必要がある)/最初のMediaPlayerの)(リセット。ここでは有効と無効の状態を参照してください。http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States

+0

私は新しいインスタンスを作成しているので、すでに初期化されていないので、reset()を行う理由は全くありません。 – alchemiss

+0

Umm、ok。私のポイントは、状況によってはstart()かreset()のどちらかが必要かもしれないということでした。いずれにしても、setDataSource()を呼び出す前にstart()を呼び出す必要があります。しかし、この時点で、あなたはあなたの質問を完全に修正しました... – LuxuryMode

関連する問題