2012-02-15 175 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