最近被分配了一项任务来开发一个安卓应用程序,通过WiFI播放RTSP流。该应用程序在SurfaceView上使用Android SurfaceView类,同样的代码在Android4.2、4.3和4.4上运行,但是当在2.3上试用它时,在调用MediaPlayer.start()函数后,会出现安卓MediaPlayer错误(1,-38)。
经过几天的集思广益后,我找到了答案,并想分享给大家节省时间,因为网上有关这个问题的信息非常有限(可能我搜索得不够努力:)。
发布于 2014-08-13 01:00:50
只是为了回答我自己的问题来分享我的发现。
为了解决在Android2.3设备上调用mediaPlayer.start()后出现的mediaPlayer.start错误(1,-38)问题,只需在设置表面保持器后添加以下子句即可。
`...; surfaceHolder_.addCallback(this); surfaceHolder_.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mediaPlayer_ = new MediaPlayer(); ...;`
对于相当于或高于蜂窝的设备,我们不需要设置表面支架类型,框架将自动处理附加到媒体播放器的表面视图,这就是为什么代码在Android4.0中工作,但在2.3中不起作用。因此,我们可以使用条件语句来保护表面持卡器setType子句,如下所示:
`if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { surfaceHolder_.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }`
https://stackoverflow.com/questions/25276459
复制相似问题