Android 2.3上的自定义媒体播放器错误

时间:2013-05-23 06:53:34

标签: android media-player

我试图制作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媒体播放器有什么区别?

3 个答案:

答案 0 :(得分:0)

以下是如何做到这一点:

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

编辑:

我认为您应该使用setOnErrorListener设置一个错误监听器,以查看调用setDataSource时是否收到任何错误。

答案 1 :(得分:0)

我的问题转为我为视频播放提供了错误的网址。我有两个网址 - 一个用于原始数据,另一个用于进展流式可合并格式。我错误地提供了第一个。交换它们解决了我的问题。较旧的Android版本对HLS视频流的支持较差(这就是为什么不同Android版本的差异):

  • Android 2.3(姜饼)
    • 不支持,尽管是最受欢迎的Android版本
  • Android 3.0(Honeycomb)
    • Streams导致平板电脑设备崩溃
  • Android 4.0(冰淇淋三明治)
    • VOD流不寻求
    • 未检测到宽高比并导致图像变形
    • 全屏导致视频从头重新开始
  • Android 4.1+(Jelly Bean)
    • 宽高比问题已修复,但搜索仍然无法使用
    • Chrome无法理解HLS导致破坏的mimetype检测
    • 全屏视频会导致设备抛出错误并停止。

此数据来自here

答案 2 :(得分: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。