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 –

関連する問題