我正在尝试使用SurfaceView
在我的应用上播放实时流媒体视频,当我使用Vitamio
尝试它时效果很好,但因为它是一个HTTP链接,我试图摆脱任何第三方库并使用了本机类。我一如既往地试过VideoView
,然后我尝试了SurfaceView基本实现失败后我尝试了这样的纹理视频:
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
Surface surface = new Surface(surfaceTexture);
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(link));
mMediaPlayer.setSurface(surface);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepareAsync();
// Play video when the media source is ready for playback.
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d(TAG, "Error occured");
return false;
}
});
} catch (IllegalArgumentException e) {
Log.d(TAG, e.getMessage());
} catch (SecurityException e) {
Log.d(TAG, e.getMessage());
} catch (IllegalStateException e) {
Log.d(TAG, e.getMessage());
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
但是每次调用MediaPlayer的OnError都没有运气,而在logcat中我得到了这个:
06-28 16:00:56.612 144-8044/? E/GenericSource﹕ Failed to prefill data cache!
06-28 16:00:56.614 7997-8016/? E/MediaPlayer﹕ error (1, -2147483648)
06-28 16:00:56.614 7997-7997/? E/MediaPlayer﹕ Error (1,-2147483648)
但问题是网址没有问题,这个网址在维他命以及我可以测试的其他所有游戏上都很好,请帮助!!
答案 0 :(得分:1)
我尝试通过MediaPlayer
在Android上播放视频时遇到了我自己的痛苦,我也尝试过Vitamio。大多数情况下,如果视频在Android MediaPlayer
上无法正常播放,那是因为它不是受支持的格式。
http://developer.android.com/guide/appendix/media-formats.html
这可能不是您想要的答案,但您可能不得不重新编码您尝试播放支持格式的内容。 Android的视频播放功能远远弱于iphone,这只是您必须接受的内容。
如果相反你愿意投入更多的工作,你可以自己编译ffmpeg用于android,为它制作一个jni接口的许多组件,并在表面/纹理中播放视频视图。我不会亲自推荐这条路线,因为我通过ffmpeg播放1080p视频的经历并不是很好。
您最好也是最简单的选择就是重新编码您的视频。
背景:我制作了一个应用程序,可以从各种供应商那里讽刺地播放5个视频。