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

为解决Android 2.3设备调用mediaPlayer.start()后MediaPlayer报错(1,-38)的问题,只需在设置surface holder后添加如下子句即可。

...; 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 回答
0

我的问题变成了我为视频播放提供了错误的 url。我有两个网址——一个用于原始数据,一个用于进度流兼容格式。我错误地提供了第一个。交换它们解决了我的问题。较旧的 Android 版本对 HLS 视频流的支持较差(这就是不同 Android 版本存在差异的原因):

  • 安卓 2.3(姜饼)
    • 不支持,尽管它是最受欢迎的 Android 版本
  • 安卓 3.0(蜂窝)
    • 流导致平板设备崩溃
  • Android 4.0(冰淇淋三明治)
    • VOD 流不寻找
    • 未检测到纵横比并导致图像变形
    • 全屏导致视频从头开始重新启动
  • Android 4.1+(果冻豆)
    • 纵横比问题已修复,但仍无法搜索
    • Chrome 不理解 HLS 导致损坏的 mimetype 检测
    • 全屏拍摄视频会导致设备抛出错误并停止。

此数据取自此处

于 2013-09-23T15:11:19.997 回答
0

您可以这样做:

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

编辑 :

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

于 2013-05-23T07:14:05.610 回答