2012-02-15 176 views
1

我使用VideoView显示rtsp流式视频。在下面你可以找到代码片段。当活动恢复并重新启动时,VideoView停止显示

OnCreate() { 
    ... 
    // Setup video view 
    videoView = (VideoView) findViewById(R.id.videoViewStream); 
    videoView.setMediaController(new MediaController(this)); 
    .... 
    // Create a button 
} 

OnButtonClickListener() { 
    videoView.setVideoURI(Uri.parse(videoUri)); 
videoView.requestFocus(); 
} 

我没有关于OnResume和OnPause函数中的VideoView的代码。

使用情况的问题是:

  1. 打开应用程序并开始播放视频
  2. 我尽量减少应用程序获取到Android桌面
  3. 使用其他应用程序
  4. 重新打开或重新触发视频应用程序
  5. 视频不显示并且未运行。我必须重新点击VideoView

问题是,怎么可能再次重新显示视频?我是否必须将视频的开始(),停止()或暂停()?

任何帮助,欢迎。

TA

回答

2

我会建议你保存当前视频postition(和所有你在重启的情况下需要),并在onPause停止播放。在onDestroy中,你需要释放mediaPlayer。如果用户返回,您将获得onResume或onCreate。在onCreate中,你再次像第一次一样初始化玩家。在onResume中,如果玩家真的在线,并且一切正常,您可以创建一个安全检查开始播放(或等待点击事件)。检查上次保存的位置以寻找可能的位置。

我会从OnButtonClickListener中将代码提取到单独的方法中,并且如果您希望自动启动播放,请从clickListener或onResume中调用该方法。

最后回答:

我犯了一个错误释放。它由VideoView在stopPlayback方法中完成(查看grepcode上的VideoView源代码)。 我不知道您的RTSP流媒体服务器如何工作,但我使用的流媒体服务器不支持使用VideoView的seekTo方法进行搜索。你可以拨pause在和startonResume但这将从0开始流(在我的情况)。所以我不得不创建自定义搜索栏。但这是另一回事。

在我的实施中,我打电话pause在和stopPlaybackonDestroy。在我也存储最后的位置。在onCreate我只能看到并设置媒体控件。在onResume我检查我是否有任何有关最后位置的信息。如果存在这种情况,则我使用该参数(seek)准备播放器(setVideoPath,requestFocus,start),否则无(seek = 0)。

这是我的解决方案:)

+0

我会接受您的建议,并尝试对其进行编程。你认为我应该使用MediaPlayer而不是VideoView类吗?您是否有MediaPlayer的任何示例代码?我问你这么说,onDestroy我必须发布mediaplayer,或者你只是想把它设置为null? – jlanza 2012-02-15 14:57:45

+0

我会更新我的答案;) – zoki 2012-02-15 17:22:04

+0

Gallery电影播放器​​的代码是如何实现当前视频位置和简历保存的一个很好的示例: http://grepcode.com/file/repository.grepcode.com /java/ext/com.google.android/android-apps/4.0.3_r1/com/android/gallery3d/app/MoviePlayer.java?av=f – inky 2012-06-19 19:23:25