Android studio 如何使用exo播放器在视图中播放一个视频寻呼机

Android studio 如何使用exo播放器在视图中播放一个视频寻呼机,android-studio,android-viewpager,exoplayer,Android Studio,Android Viewpager,Exoplayer,我正在制作一个应用程序,其中我正在使用exo player在view pager中播放视频,但问题是我无法一次播放一个视频。一次在那里播放所有视频。我无法在刷卡时暂停视频。请帮助 **this is my activity where i am setting data in view pager** ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),list); viewpag

我正在制作一个应用程序,其中我正在使用exo player在view pager中播放视频,但问题是我无法一次播放一个视频。一次在那里播放所有视频。我无法在刷卡时暂停视频。请帮助

**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());
}
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;
}
public类ViewPagerAdapter扩展了FragmentPagerAdapter{
名单;
公共视图页面编辑器(碎片管理器碎片管理器,列表){
超级(碎片管理器);
this.list=list;
}
//返回总页数
@凌驾
public int getCount(){
返回list.size();
}
//返回要为该页显示的片段
@凌驾
公共片段getItem(int位置){
返回GlobalFragment.newInstance(list.get(position.getVideo());
}
}

这是我的片段,我在其中获取视频url并在exo player中播放

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());
}
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;
}
公共类GlobalFragment扩展了片段{
公共静态字符串视频链接;
公共静态播放器;
私人玩家查看我的玩家视图;
公共全球碎片(){
//必需的空公共构造函数
}
//用于创建带有参数的片段的newInstance构造函数
公共静态全局片段newInstance(字符串标题){
globalFragmentFirst=新的globalFragmentFirst();
Bundle args=新Bundle();
args.putString(Commn.video\u url,标题);
fragmentFirst.setArguments(args);
首先返回碎片;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
video\u url=getArguments().getString(Commn.video\u url);
Log.e(“Videoss”、“Videoss”+视频url+”);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u全局,容器,false);
视图(视图);
setDimension();
播放视频();
返回视图;
}
专用视图(视图){
my_player_view=view.findViewById(R.id.my_player_view);
my_player_view.setRepeatToggleModes(10);
}
私人void playVideo(){
试一试{
带宽计带宽计=新的默认带宽计();
TrackSelector TrackSelector=新的默认TrackSelector(新的AdaptiveTrackSelection.Factory(带宽计));
player=ExoPlayerFactory.newImpleInstance(getActivity(),trackSelector);
urivideouri=Uri.parse(视频url);
DefaultHttpDataSourceFactory dataSourceFactory=新的DefaultHttpDataSourceFactory(“exoplayer_视频”);
提取器工厂提取器工厂=新的默认提取器工厂();
MediaSource MediaSource=新的提取器或数据源(videoURI、dataSourceFactory、提取器工厂、null、null);
我的播放器视图。设置播放器(播放器);
player.prepare(mediaSource);
player.setplaywhenrady(true);
}捕获(例外e){
Log.e(“MainAcvtivity”,“exoplayer错误”+e.toString());
}
}
私有void setDimension(){
float videoProportion=getVideoProportion();
int screenWidth=getResources().getDisplayMetrics().widthPixels;
int screenHeight=getResources().getDisplayMetrics().heightPixels;
浮动屏幕比例=(浮动)屏幕高度/(浮动)屏幕宽度;
android.view.ViewGroup.LayoutParams lp=my_player_view.getLayoutParams();
if(视频比例<屏幕比例){
lp.高度=屏幕高度;
lp.width=(int)((浮动)屏幕高度/视频比例);
}否则{
lp.width=屏幕宽度;
lp.height=(int)((float)屏幕宽度*视频比例);
}
my_player_view.setLayoutParams(lp);
}
私人浮动比例{
返回2f;
}

int pager fragment layouts我定义如下:

                        <com.google.android.exoplayer2.ui.PlayerView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"
                        android:id="@+id/playerView"/>