2012-08-17 136 views
0

我试图在后台完成缓冲后,在新的Activity中用MediaPlayer播放视频流。为什么还有其他Activity?它是视频播放库的一部分,视频必须覆盖用户的应用程序,无论当前处于活动状态。缓冲在后台完成后播放视频

我的想法是创建一个MediaPlayer对象,开始缓冲(与prepare法)和之后的缓冲完成后开始新的ActivitySurfaceView用于显示视频。在新的Activity中,我将SurfaceViewSurfaceHolder分配给MediaPlayer(使用setDisplay方法)并启动播放,但没有成功:我看到SurfaceView没有视频播放。

我认为,问题是MediaPlayer'sprepare方法预计,SurfaceHolder之前设置setDisplay方法。

任何想法让这个设置工作?

回答

1

嗯,努力以及我未来的调查周后,这里就是答案:

使用当前版本的Android SDK,由于后者需要创建的Surface来开始预加载,因此无法使用VideoViewMediaPlayer在后台预加载视频。因此,在开始预加载之前(prepare()prepareAsync()),您的VideoViewMediaPlayer必须(临时)是应用程序布局的可见部分。此解决方案需要在用户的布局中注入这些Views,或者启动一个临时活动来获取Surface初始化,这对于我的主题(视频SDK)来说太过侵入。

如果您的要求是在不让用户等待完成缓冲区的情况下显示视频,并且您没有关于应用程序布局的控制权限,我会建议将完整的视频存储到SD卡中,然后开始播放。

0

启动一个异步任务,并在方法体内doinBackground()启动一个onBuffering监听器,,,你可以将数据存储在一个缓存中,然后可以播放视频。 可能会执行您所需的任务。

+0

问题是播放,而不是缓冲。 MediaPlayer通过调用'prepareAsync'方法启动异步缓冲。我使用'OnPreparedListener'来检查缓冲是否完成。 – artkoenig 2012-08-17 12:19:45

0

我做了什么我告诉你,它的工作对我来说,

取得了类扩展异步和实现OnPrepared监听器,然后在方法

doinbackgroung(){ 
Display display =getWindowManager().getDefaultDisplay(); 
video_view.setOnPreparedListener(this); 
video_view.setVideoURI(Uri.parse(path)); 
return null; 
} 

,之后在onPrepared() 只是VIDEO_VIEW。开始();

您还可以实现onVideoSizeChangedListener如果你想无论是在景观视频的dportrait模式玩好..这将工作似乎

+0

对不起,但我没看到,这个答案与我的问题有关。 “display”应该做什么? – artkoenig 2012-08-21 08:37:16

+0

videoview是您的显示器,videoView.start()将启动显示器,您还需要显示哪些内容 – Pranav 2012-08-21 09:34:53