안드로이드

Android ExoPlayer

뇽꾸리 2022. 4. 8. 15:22
반응형

gradle에 두줄 추가 

public class MyVideoView {
    private static final String TAG = "MyVideoView";
    private MainActivity mActivity;
    ViewGroup videoParentView;  //videoParentView
    FrameLayout videoFrameView; //videoFrameView
    PlayerView playerView; //PlayerView
    SimpleExoPlayer player;   //SimpleExoPlayer : 실제 비디오를 플레이하는 객체의 참조 변수

    public MyVideoView (MainActivity activity) {
        mActivity = activity;
        videoParentView = mActivity.findViewById(R.id.videoParent); //겉에 비디오 프레임
        videoFrameView = new FrameLayout(mActivity); //비디오프레임뷰
        playerView = new PlayerView(mActivity); //플레이어뷰
        setVideoView();
    }

    private void setVideoView(){
        Log.d(TAG, " ########################### setVideoParentView ################################### ");
        Uri videoUri=Uri.parse("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4");

        /*
        * TODO
        */

        DisplayMetrics metrics = new DisplayMetrics();
        mActivity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
        int deviceWidth = metrics.widthPixels;
        int deviceHeight = metrics.heightPixels;

        Log.d(TAG, "metrics = deviceWidth :  [" + deviceWidth + "], deviceHeight = [" + deviceHeight + "]");

        videoFrameView.setLayoutParams(new FrameLayout.LayoutParams(deviceWidth, deviceHeight));
     
        //위치 조정때문에 이렇게 했는데 위에거만 해줘도 됨
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) videoFrameView.getLayoutParams();
        params.width = 812;
        params.height = 500;
        params.leftMargin = 50;
        params.topMargin = 50;
        videoFrameView.setLayoutParams(params);


        //SimpleExoPlayer객체 생성
        player= ExoPlayerFactory.newSimpleInstance(mActivity, new DefaultTrackSelector());

        //플레이어뷰에게 플레이어 설정
        playerView.setPlayer(player);

        //비디오데이터 소스를 관리하는 DataSource 객체를 만들어주는 팩토리 객체 생성
        DataSource.Factory factory= new DefaultDataSourceFactory(mActivity,"Ex89VideoAndExoPlayer");

        //비디오데이터를 Uri로 부터 추출해서 DataSource객체 (CD or LP판 같은 ) 생성
        ProgressiveMediaSource mediaSource= new ProgressiveMediaSource.Factory(factory).createMediaSource(videoUri);

        //만들어진 비디오데이터 소스객체인 mediaSource를 플레이어 객체에게 전당하여 준비하도록!![ 로딩하도록 !!]
        player.prepare(mediaSource);

        //로딩이 완료되어 준비가 되었을 때
        player.setPlayWhenReady(true);

        //비디오 프레임뷰 안에 플레이어뷰 넣기
        videoFrameView.addView(playerView);

        //겉에 비디오 프레임에 비디오 프레임뷰 넣기
        videoParentView.addView(videoFrameView);
    }
}
반응형