2012-06-04 89 views
3

我目前正在使用VideoView播放rtsp直播流媒體源。這工作正常。Android VideoView:從父視圖中刪除後視頻變黑

VideoView最初是在其他元素的片段內,處於'正常'狀態,並且我試圖實現一個全屏切換按鈕。 。

要進入全屏模式,我從它的父(一LinearLayout中)取出VideoView,然後將它添加到另一個LinearLayout中,添加上)一切使用getActivity()addContentView(頂部,下面的代碼:

LayoutInflater lf = getActivity().getLayoutInflater();   
    vFullScreen = lf.inflate(R.layout.full_screen, myViewGroup, false);    

    LinearLayout fullscreenCont = (LinearLayout) vFullScreen.findViewById(R.id.fullscreen_container); 

    ((ViewGroup) vsPlayer.getParent()).removeView(vsPlayer); 

    fullscreenCont.addView(vsPlayer); 

    LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    getActivity().addContentView(vFullScreen, params); 

的問題是,一旦它從原來的父視圖中移除視頻變黑。

我試圖實現它是保留視頻實例,以避免重新連接/緩衝區,但我不知道如何保留視頻播放在父母的切換,任何想法?

編輯:

如果我暫停videoView,然後恢復它,像這樣:

LayoutInflater lf = getActivity().getLayoutInflater();   
vFullScreen = lf.inflate(R.layout.full_screen, myViewGroup, false);    

LinearLayout fullscreenCont = (LinearLayout) vFullScreen.findViewById(R.id.fullscreen_container); 

vsPlayer.getVideoView().suspend(); 
((ViewGroup) vsPlayer.getParent()).removeView(vsPlayer); 

fullscreenCont.addView(vsPlayer); 

LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
getActivity().addContentView(vFullScreen, params); 
vsPlayer.getVideoView().resume(); 

視頻播放中斷(變黑幾引人注目秒),但隨後恢復,至極是好得多,不完美,因爲恢復比賽需要很長時間。

另一個不那麼很大一部分是這些方法suspend()和類VideoView的簡歷()可從API級別8個,最多的,我需要與API級別7

+0

您是否找到解決方案?我也有同樣的問題。 –

回答

0

這可能贏得兼容'T :)解決您的問題,但你可以求於你在拆卸之前VideoView其中位置:

long progress = vsPlayer.getCurrentPosition(); 


LayoutInflater lf = getActivity().getLayoutInflater();   
vFullScreen = lf.inflate(R.layout.full_screen, myViewGroup, false);    

LinearLayout fullscreenCont = (LinearLayout) vFullScreen.findViewById(R.id.fullscreen_container); 

((ViewGroup) vsPlayer.getParent()).removeView(vsPlayer); 

fullscreenCont.addView(vsPlayer); 

LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
getActivity().addContentView(vFullScreen, params); 

vsPlayer.seekTo(progress); 

其實我有同樣的問題,前一段時間..我落得這樣做是爲了改變將VideoView的layoutparams設置爲match_parent而不是將其刪除。

mVideoView.getLayoutParams().width = LayoutParams.MATCH_PARENT; 
mVideoView.getLayoutParams().height = LayoutParams.MATCH_PARENT; 
+0

感謝您的回覆! 尋求沒有必要,因爲我正在播放直播,這裏沒有問題。 對於第二部分,我明白你的建議,我會盡力做到這一點,事情是我的videoview是在一個片段內,它本身在一個選項卡內,所以我不知道我是否可以讓它「成長」從它的位置全屏顯示,它肯定需要更大一些,因此LayoutParams.MATCH_PARENT不是在這種情況下使用它的原因。將嘗試找到一些替代 –

1

是你的問題,你使用的VideoView變黑,並暫時在切換視圖之間?

如果是這樣,我一直試圖找出這個問題的原因,現在一個堅實的一週。我一直無法找出真正的原因,但我的變通辦法防止VideoView從通過畫面切換堅持:

public void hideVideoView(){   
    runOnUiThread(new Runnable() { 
     public void run() { 
      findViewById(R.id.yourVideoView).setVisibility(View.INVISIBLE); 
     } 
    });  
} 

我基本上只是設置視圖不可見每當視圖被切換,如果視圖重新加載,我只是將其設置爲View.Visible

+1

,除非在將視頻視圖從其父視圖中移除之前調用視頻視圖上的suspend(),然後在將視圖添加到新的父視圖後調用resume,則視頻將變黑且永不再恢復。通過這些調用,視頻在明顯暫停後重新開始,並且根據日誌,MediaPlayer似乎完全釋放並重新啓動,這必定是它從黑色中恢復/返回的時間如此之長的原因。 –

+0

我仍然得到黑色屏幕。 我在這裏問了一個類似的問題http://stackoverflow.com/questions/24903232/android-video-view-creates-a-black-screen-after-the-video –