1

Androidのカスタムビデオプレーヤーを作成しようとしましたが、正常に動作し、音楽を再生しました。しかし、2.3 でエラー (1,-38) が発生し、表面にビデオを表示しようとしました。

 // Mediaplayer
   mp = new MediaPlayer();
   mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() 
   {
           public void onPrepared(MediaPlayer mp)
           {    
              isPrepared = true;
              mp.start();
            }
    });

   mp.setDataSource("http://commonsware.com/misc/test2.3gp");
   mp.prepareAsync();
   mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
   mp.setDisplay(surfaceHolder);//if comment this string - player is working fine

修正方法は?

Android 2.3 と 4.0 のメディアプレーヤーの違いは何ですか?

4

3 に答える 3

0

私の問題は、ビデオの再生に間違った URL を提供したことでした。2 つの URL がありました。1 つは生データ用で、もう 1 つはプログレス ストリーミング対応フォーマット用です。最初のものを間違って提供してしまいました。それらを交換すると、問題が解決しました。古いバージョンの Android では、HLS ビデオ ストリーミングのサポートが不十分です (これが、異なる Android バージョンの違いの理由です)。

  • Android 2.3 (ジンジャーブレッド)
    • Android の最も人気のあるバージョンであるにもかかわらず、サポートなし
  • Android 3.0 (ハニカム)
    • ストリームが原因でタブレット デバイスがクラッシュする
  • Android 4.0 (アイスクリーム サンドイッチ)
    • VOD ストリームはシークしません
    • アスペクト比が検出されず、画像が変形する
    • 全画面表示すると、動画が最初から再開されます
  • Android 4.1+ (ジェリービーン)
    • アスペクト比の問題は修正されましたが、シークはまだ利用できません
    • Chrome が HLS を認識せず、MIME タイプの検出が壊れる
    • ビデオを全画面表示すると、デバイスがエラーをスローして停止します。

このデータはhereから取得されます。

于 2013-09-23T15:11:19.997 に答える
0

これを行う方法は次のとおりです。

      mp.setDataSource(url); 
      mp.setOnPreparedListener(this);
      mp.prepareAsync();
    public void onPrepared(MediaPlayer player) {
      mp.start();
    }

編集 :

setDataSource を呼び出すときにエラーが発生するかどうかを確認するには、setOnErrorListener を使用してエラー リスナーを設定する必要があると思います。

于 2013-05-23T07:14:05.610 に答える
0

Android 2.3 デバイスで mediaPlayer.start() を呼び出した後の MediaPlayer エラー (1,-38) の問題を解決するには、サーフェス ホルダーを設定した後に次の句を追加します。

...; surfaceHolder_.addCallback(this); surfaceHolder_.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mediaPlayer_ = new MediaPlayer(); ...;

Honeycomb 以上のデバイスの場合、サーフェス ホルダー タイプを設定する必要はありません。フレームワークは、メディア プレーヤーに接続されたサーフェス ビューを自動的に処理します。そのため、コードは Android 4.0 では機能しますが、2.3 では機能しません。

于 2014-08-13T00:28:04.693 に答える