我试图制作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媒体播放器有什么区别?
答案 0 :(得分:0)
以下是如何做到这一点:
mp.setDataSource(url); mp.setOnPreparedListener(this); mp.prepareAsync(); public void onPrepared(MediaPlayer player) { mp.start(); }
编辑:
我认为您应该使用setOnErrorListener设置一个错误监听器,以查看调用setDataSource时是否收到任何错误。
答案 1 :(得分:0)
我的问题转为我为视频播放提供了错误的网址。我有两个网址 - 一个用于原始数据,另一个用于进展流式可合并格式。我错误地提供了第一个。交换它们解决了我的问题。较旧的Android版本对HLS视频流的支持较差(这就是为什么不同Android版本的差异):
此数据来自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。