I’m trying play a video stream with MediaPlayer in a new Activity after the buffering was completed in background. Why another Activity? It’s a part of a video playback library, and the video has to overlay the user’s app, no matter what layout is currently active.
My idea is to create a MediaPlayer object, start buffering (with prepare method) and after the buffering is complete start a new Activity with a SurfaceView for showing the video. In the new Activity I assign the SurfaceHolder of the SurfaceView to the MediaPlayer (with setDisplay method) and initiate playback, without success: I see the SurfaceView without the video playback.
I think, the problem is that the MediaPlayer's prepare method expects, that the SurfaceHolder was set with the setDisplay method before it.
Any ideas to get this setup working?
Well, after weeks of trying and futher investigation, here is the answer:
With the current versions of Android SDK there is no way to preload a video in background with the
VideoVieworMediaPlayerdue to the fact that the latter needs a created Surface to start preloading. Thus, yourVideoViewor yourMediaPlayerhas to be (temporary) a visible part of the application’s layout before you can start preloading (withprepare()orprepareAsync()). This solution requires injecting of theseViewsin the user’s layout or starting a temporary Activity to get the Surface initialized, which is too invasive for my subject (video SDK).If you requirement is to show a video without letting the user wait for a completed buffering and you dont have the control about the application’s layout, I would suggest to store the complete video to the sd-card and start the playback afterwards.