android-studio - 如何使用 exo 播放器在视图寻呼机中播放一个视频
问题描述
我正在制作一个应用程序,我在视图寻呼机中使用 exo 播放器播放视频,但问题是我一次无法播放一个视频。一次在那里播放的所有视频。我无法在滑动时暂停视频。请帮助。
**this is my activity where i am setting data in view pager**
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),list);
viewpager.setAdapter(adapter);
这是我的视图寻呼机
public class ViewPagerAdapter extends FragmentPagerAdapter {
List<VideosModel> list;
public ViewPagerAdapter(FragmentManager fragmentManager, List<VideosModel> list) {
super(fragmentManager);
this.list=list;
}
// Returns total number of pages
@Override
public int getCount() {
return list.size();
}
// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
return GlobalFragment.newInstance(list.get(position).getVideo());
}
}
这是我获取视频网址并在 exo 播放器中播放的片段
public class GlobalFragment extends Fragment {
public static String video_url;
public static ExoPlayer player;
private PlayerView my_player_view;
public GlobalFragment() {
// Required empty public constructor
}
// newInstance constructor for creating fragment with arguments
public static GlobalFragment newInstance(String title) {
GlobalFragment fragmentFirst = new GlobalFragment();
Bundle args = new Bundle();
args.putString(Commn.video_url,title);
fragmentFirst.setArguments(args);
return fragmentFirst;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
video_url=getArguments().getString(Commn.video_url);
Log.e("Videoss","Videoss"+video_url+"");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_global, container, false);
iniViews(view);
setDimension();
playVideo();
return view;
}
private void iniViews(View view) {
my_player_view=view.findViewById(R.id.my_player_view);
my_player_view.setRepeatToggleModes(10);
}
private void playVideo() {
try {
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
player = ExoPlayerFactory.newSimpleInstance(getActivity(), trackSelector);
Uri videoURI = Uri.parse(video_url);
DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("exoplayer_video");
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource mediaSource = new ExtractorMediaSource(videoURI, dataSourceFactory, extractorsFactory, null, null);
my_player_view.setPlayer(player);
player.prepare(mediaSource);
player.setPlayWhenReady(true);
}catch (Exception e){
Log.e("MainAcvtivity"," exoplayer error "+ e.toString());
}
}
private void setDimension() {
float videoProportion = getVideoProportion();
int screenWidth = getResources().getDisplayMetrics().widthPixels;
int screenHeight = getResources().getDisplayMetrics().heightPixels;
float screenProportion = (float) screenHeight / (float) screenWidth;
android.view.ViewGroup.LayoutParams lp = my_player_view.getLayoutParams();
if (videoProportion < screenProportion) {
lp.height= screenHeight;
lp.width = (int) ((float) screenHeight / videoProportion);
} else {
lp.width = screenWidth;
lp.height = (int) ((float) screenWidth * videoProportion);
}
my_player_view.setLayoutParams(lp);
}
private float getVideoProportion(){
return 2f;
}
解决方案
我只想将任何未来的读者指向这个 repo,代码太棒了! https://github.com/nihk/video-pager
推荐阅读
- mongodb - 在 Symfony Monolog 中使用 MongoDB 会导致错误
- javascript - 我正在尝试从不同的项目和产品中获取总价格*数量。输入。如何仅控制已更改的数组?
- python - Django REST:TypeError:“语言”类型的对象不是 JSON 可序列化的
- .htaccess - 为带有 HTML 5 历史模式的 Progressive Web App 添加 HTTPS 重定向
- java - if (not null && not null) Java 函数式编程
- linux - linux shell:连接指令和文件
- c - C中两个数组的交集问题
- webgl - WebGL 模型框架和世界框架的关系
- android - Android:使用 Gmail api 从服务中读取 Gmail 邮件正文
- c++ - Qt::QueuedConnection 不调用接收线程事件循环,