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 –