0

MediaPlayerActivity后台完成缓冲后,我正在尝试播放视频流。为什么是另一个Activity?它是视频播放库的一部分,无论当前处于活动状态的布局如何,视频都必须覆盖用户的应用程序。

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

我认为,问题在于MediaPlayer's prepare方法所期望的,它SurfaceHolder是用它之前的方法设置的setDisplay

有什么想法可以使此设置正常工作吗?

4

3 回答 3

1

好吧,经过数周的尝试和进一步调查,答案如下:

使用当前版本的 Android SDK 无法在后台预加载视频,VideoView因为MediaPlayer后者需要创建的 Surface 才能开始预加载。因此,您VideoView或您MediaPlayer必须(临时)成为应用程序布局的可见部分,然后才能开始预加载(使用prepare()prepareAsync())。此解决方案需要在用户布局中注入这些Views内容或启动一个临时 Activity 来初始化 Surface,这对我的主题(视频 SDK)来说太具有侵入性了。

如果您的要求是在不让用户等待完成缓冲的情况下显示视频,并且您无法控制应用程序的布局,我建议将完整的视频存储到 sd 卡,然后开始播放。

于 2012-09-17T10:03:17.650 回答
0

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

于 2012-08-17T12:05:50.577 回答
0

我做了什么我告诉你,它对我有用,

做了一个类扩展异步并实现 OnPrepared 监听器,然后在方法中

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

然后在 onPrepared() 中只是 video_view.start();

如果您希望视频在横向和纵向模式下都能正常播放,您还可以实现 onVideoSizeChangedListener .. 这似乎可行

于 2012-08-17T12:28:17.963 回答