0

編輯:我想我可能已經找到了解決方案。除了使用VideoView,我切換到這個實現的TextureView從URL加載VideoView延遲片段

https://github.com/sprylab/texturevideoview

但有人可以解釋爲什麼這似乎已經解決了我的問題?


我有一個簡單的片段,將視頻(從外部URL)加載到VideoView中。

問題是,當片段被調用時,直到視頻完全加載才顯示。通常需要1-3秒才能最終加載片段。我相信它可能與阻止主UI線程的VideoView加載有關?但我不是100%確定的。

這裏是我的片段:

public class MyFragment extends DialogFragment { 

    private User user; 

    private ViewPager viewPager; 

    private MyViewPagerAdapter myViewPagerAdapter; 

    public static MyFragment newInstance() { 
     MyFragment fragment = new MyFragment(); 

     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_main, container, false); 

     viewPager = (ViewPager) v.findViewById(R.id.viewPager); 

     user = Parcels.unwrap(getArguments().getParcelable("user")); 

     myViewPagerAdapter = new MyViewPagerAdapter(); 
     viewPager.setAdapter(myViewPagerAdapter); 

     setCurrentItem(selectedPosition); 

     return v; 
    } 

    private void setCurrentItem(int position) { 
     viewPager.setCurrentItem(position, false); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
    } 

    public class MyViewPagerAdapter extends PagerAdapter { 

     private LayoutInflater layoutInflater; 

     private VideoView videoView; 

     public MyViewPagerAdapter() { 
      // 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View view = layoutInflater.inflate(R.layout.video_layout, container, false); 

      UserVideo video = user.getVideos().get(position); 

      videoView = (VideoView) view.findViewById(R.id.video); 

      Uri videoUri = Uri.parse(video.getUrl()); 

      videoView.setVideoURI(videoUri); 
      videoView.setMediaController(null); 
      videoView.requestFocus(); 
      videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       public void onPrepared(MediaPlayer mp) { 
        videoView.start(); 
        mp.setLooping(true); 
       } 
      }); 

      container.addView(view); 

      return view; 
     } 

     @Override 
     public int getCount() { 
      return user.getVideos().size(); 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object obj) { 
      return view == ((View) obj); 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      container.removeView((View) object); 
     } 
    } 
} 

我應該怎麼改變,從這麼長時間來加載停止片段?

我試圖在另一個線程以下this solution,但它仍然需要1-3秒的加載片段/顯示:的

https://gist.github.com/anonymous/b4fb728816962c7d208f8d85e7bdba26

回答

0

不知道這是否會幫助,但不應該videoView設置的MediaController:

videoView.setMediaController(mediaController); 
+0

我將它設置爲null,以便視頻控件不顯示。 – user7752683

+0

然後刪除它,VideoView應該沒有它。 –

+0

http://stackoverflow.com/questions/2620049/how-to-play-video-from-url –