11

我在三星S3(Android 4.1.1)中運行視頻時出現問題,該問題似乎是因爲videoview位於片段上,因爲如果我將它放在活動上,它會作品。 此外,我發現,如果我打開GPU硬件加速,視頻的作品。 我也有一個通過在SurfaceView上繪製的遊戲,並且該視圖不能正常工作(僅在GPU上)...應用程序內容的其餘部分顯示爲它應該(按鈕和其他佈局)。VideoView未顯示在片段上

我測試在Nexus S和模擬器上的應用程序,它工作得很好,還對其他設備..

有誰知道這個問題可能是什麼? 謝謝!

這裏是代碼:

public class VideoFragment extends Fragment implements MediaPlayer.OnCompletionListener, 
     MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener { 

    private Video mVideo; 
    private VideoView mVideoView; 
    // The video position 
    private int mPosition; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View fragmentView = inflater.inflate(R.layout.screen_video, container, false); 

     mVideoView = (VideoView) fragmentView.findViewById(R.id.VideoView); 

     return fragmentView; 
    } 


    @Override 
    public void onPause() { 
     super.onPause(); 

     // Pause the video if it is playing 
     if (mVideoView.isPlaying()) { 
      mVideoView.pause(); 
     } 

     // Save the current video position 
     mPosition = mVideoView.getCurrentPosition(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     mVideoView.setOnCompletionListener(this); 
     mVideoView.setOnPreparedListener(this); 
     mVideoView.setOnErrorListener(this); 
     mVideoView.setKeepScreenOn(true); 

     // Initialize the media controller 
     MediaController mediaController = new MediaController(getActivity()); 
     mediaController.setMediaPlayer(mVideoView); 
     // Set-up the video view 
     mVideoView.setMediaController(mediaController); 
     mVideoView.requestFocus(); 
     mVideoView.setVideoPath(mVideo.getUrl()); 

     if (mVideoView != null) { 
      // Restore the video position 
      mVideoView.seekTo(mPosition); 
      mVideoView.requestFocus(); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     // Clean-up 
     if (mVideoView != null) { 
      mVideoView.stopPlayback(); 
      mVideoView = null; 
     } 
    } 

    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
     Log.e("VIDEO PLAY", "end video play"); 
    } 

    @Override 
    public void onPrepared(MediaPlayer mediaPlayer) { 
     // Start the video view 
     mediaPlayer.start(); 
     Log.e("VIDEO PLAY", "video ready for playback"); 
    } 

    @Override 
    public boolean onError(MediaPlayer mediaPlayer, int i, int i1) { 
     Log.e("VIDEO PLAY", "error: " + i); 
     return true; 
    } 

} 

我不認爲它的東西與情境(應用程序或活動)..因爲在所有其他設備的視頻和遊戲顯示.. 謝謝尋求幫助!

+0

請發佈與VideoView相關的片段和佈局代碼。沒有這個,很難說出了什麼問題。 –

+0

也添加了代碼,對不起..事情是,我使用這個視頻片段類和一個遊戲,它實際上是一個SurfaceView,我在該表面上繪圖,所以我不認爲這與我的代碼有關..如果屏幕運行一個活動,然後兩個工作正常..感謝您的幫助 – Cata

回答

1

如果硬件加速解決您的問題,那麼我會enable it for that view/window該設備上。

總的來說,我發現,當代碼工作在一個設備上,但不是另一個它通常引起的下列問題之一:

  1. 的Bug在製造商的API實現的
  2. 不同的解釋通過在自己的代碼製造商
  3. 併發問題(如競爭狀態,不當同步)API出現這種情況更頻繁地觸發特定的設備上

據我可以告訴你似乎正在使用UI線程,所以我可以想象你的問題屬於前兩個類別之一,你只需要解決它。

+0

嗨,謝謝你的答案。 。我認爲點1或2可能是我的情況..我想也許有人可能會遇到同樣的問題,並有解決方案..到目前爲止,這是最好的答案,我會接受它作爲答案 – Cata

4

我也有類似的問題,我解決它改變:

MediaController mediaController = new MediaController(getActivity().getApplicationContext()); 

這個(在fragmet):

MediaController mediaController = new MediaController(getActivity()); 

希望這有助於...

編輯

看看這個職業

http://code.google.com/p/sinaweibo-honeycomb/source/browse/branches/sinaweibo-merged/src/com/lenovo/dll/SinaWeibo/VideoFragment.java?r=71

+0

嗨,感謝您的評論,我已經使用gatActivity()..我認爲這是相關的碎片和SurfaceView,因爲我認爲視頻和遊戲有這個共同的看法.. – Cata

0

MediaController mediaController = new MediaController(getActivity())onResume()改爲onCreateView