편집 : 해결책을 찾은 것 같아요. 대신 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
나는 비디오 컨트롤을 표시하지 않도록 null로 미디어 컨트롤러를 설정합니다. 이것이 어떻게 도움이되는지 확실하지 않습니다 ... – user7752683