<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android視頻播放器——DKVideoPlayer

      DKVideoPlayer介紹:

        1. 標星5k的Android視頻播放器,支持原生VideoView組件核心,Bilibili的IjkPlayer組件核心,ExoPlayer組件核心,可切換核心

        2. 視頻組件自帶播放暫停,進度條,全屏,播放開始,播放結束,重新播放等ui樣式。也可自己修改界面樣式和功能

        3. 可設置靜音,輪播,倍速,小窗,鎖定播放界面,邊播邊緩存,視頻截圖,連續播放視頻集,調整顯示比例,或無組件純視頻播放

        4. 支持raw,assert,file,url

        5. 可播放在線視頻流

      DKVideoPlayer地址:https://github.com/Doikki/DKVideoPlayer

        坐標:

          # 必選,內部默認使用系統mediaplayer進行解碼
          implementation 'xyz.doikki.android.dkplayer:dkplayer-java:3.3.7'
          # 可選,包含StandardVideoController的實現
          implementation 'xyz.doikki.android.dkplayer:dkplayer-ui:3.3.7'
          # 可選,使用exoplayer進行解碼
          implementation 'xyz.doikki.android.dkplayer:player-exo:3.3.7'
          # 可選,使用ijkplayer進行解碼
          implementation 'xyz.doikki.android.dkplayer:player-ijk:3.3.7'
          # 可選,如需要緩存或者抖音預加載功能請引入此庫
          implementation 'xyz.doikki.android.dkplayer:videocache:3.3.7'

        使用:

          1. 基本使用:

            1.1添加布局:  

      <xyz.doikki.videoplayer.player.VideoView
              android:id="@+id/player"
              android:layout_width="match_parent"
              android:layout_height="300dp" />

            1.2設置視頻地址和控制器:

      //videoView.setUrl("https://www.baidu.com/a.mp4") //播放網絡視頻
      //videoView.setUrl("android.resource://" + getPackageName() + "/" + R.raw.movie") //播放raw文件里視頻資源,連接格式 android.resourcde://com.dueeeke.dkplayer/"+R.raw.moveid
      //videoView.setUrl("file:///android_asset/test.mp4") //播放assert里的視頻 連接格式 file://android_asset/test.mp4
      //videoView.setUrl("/sdcard/Alarms/xxx.mp4") //播放安卓本地路徑視頻 /sdcard/xxx
      videoView.setUrl(String url); //設置視頻地址
      StandardVideoController controller = new StandardVideoController(this); 
      controller.addDefaultControlComponent("標題", false); //controller設置為默認控制器
      videoView.setVideoController(controller); //設置控制器
      videoView.start(); //開始播放,不調用則不自動播放

            1.3播放生命周期:(implements xyz.doikki.videoplayer.player.VideoView.OnStateChangeListener)

             @Override
              public void onPlayerStateChanged(int playerState) {
                  switch (playerState) {
                      case VideoView.PLAYER_NORMAL://小屏
      
                          break;
                      case VideoView.PLAYER_FULL_SCREEN://全屏
      
                          break;
                  }
              }
      
              @Override
              public void onPlayStateChanged(int playState) {
                  switch (playState) {
                      case VideoView.STATE_IDLE:
      
                          break;
      
                      case VideoView.STATE_PREPARING: //準備播放中
                          //在STATE_PREPARING時設置setMute(true)可實現靜音播放
                          //mVideoView.setMute(true);
                          break;
                          
                      case VideoView.STATE_PREPARED: //準備播放后 
      
                          break;
                      case VideoView.STATE_PLAYING: //播放中 
                          //需在此時獲取視頻寬高
                          int[] videoSize = mVideoView.getVideoSize();
                          L.d("視頻寬:" + videoSize[0]);
                          L.d("視頻高:" + videoSize[1]);
                          break;
                          
                      case VideoView.STATE_PAUSED: //播放暫停
      
                          break;
                      case VideoView.STATE_BUFFERING:
      
                          break;
                      case VideoView.STATE_BUFFERED: 
      
                          break;
      
                      case VideoView.STATE_PLAYBACK_COMPLETED: //播放完成
      
                          break;
                      case VideoView.STATE_ERROR:
      
                          break;
                  }
              }

      videoView.addOnStateChangeListener(this); //添加該播放狀態監聽器

          1.4在Activity中

      @Override
          protected void onPause() {
              super.onPause();
              videoView.pause();
          }
      
          @Override
          protected void onResume() {
              super.onResume();
              videoView.resume();
          }
      
          @Override
          protected void onDestroy() {
              super.onDestroy();
              videoView.release();
          }
          
      
          @Override
          public void onBackPressed() {
              if (!videoView.onBackPressed()) {
                  super.onBackPressed();
              }
          }

      <!-- AndroidManifest.xml -->
      <activity
          android:name=".PlayerActivity"
          android:configChanges="orientation|screenSize|keyboardHidden"
          android:screenOrientation="portrait" /> <!-- or android:screenOrientation="landscape"-->

           完整代碼

      public class DKVideoPlayerActivity extends AppCompatActivity implements View.OnClickListener ,VideoView.OnStateChangeListener {
          private String uri = "android.resource://com.ruidiculous.mywebviewdemo/"+R.raw.gta6;
          private VideoView videoView;
          
          private Button btnLoop , btnVoiceSilence, btnVoiceResume;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_d_k_video_player);
              VideoViewManager.setConfig(VideoViewConfig.newBuilder()
                      //使用使用IjkPlayer解碼
                      .setPlayerFactory(IjkPlayerFactory.create())
                      .build());
              videoView = findViewById(R.id.videoView);
              videoView.setUrl(uri); //設置視頻地址
      
              // 視頻界面:封面,全屏,底部控制條,播放暫停等等
              StandardVideoController controller = new StandardVideoController(this);
              controller.addDefaultControlComponent("標題", false);
              videoView.setVideoController(controller); //設置控制器
      
              videoView.addOnStateChangeListener(this);
              videoView.start(); //開始播放,不調用則不自動播放
      
              btnLoop = findViewById(R.id.btnLoop);
              btnVoiceSilence = findViewById(R.id.btnVoiceSilence);
              btnVoiceResume = findViewById(R.id.btnVoiceResume);
      
              btnLoop.setOnClickListener(this);
          }
      
          @Override
          public void onClick(View v) {
              switch ( v.getId() ){
                  case R.id.btnLoop:
                      videoView.setLooping(true);
                      break;
                  case R.id.btnVoiceSilence:
                      videoView.setMute(true);
                      break;
                  case R.id.btnVoiceResume:
                      videoView.setMute(false);
                      break;
              }
          }
      
          @Override
          public void onPlayerStateChanged(int playerState) {
          }
      
          @Override
          public void onPlayStateChanged(int playState) {
              switch (playState) {
                  case VideoView.STATE_IDLE:
                      break;
      
                  case VideoView.STATE_PREPARING: //準備中
                      Toast.makeText(this,"準備中",Toast.LENGTH_SHORT).show();
                      break;
      
                  case VideoView.STATE_PREPARED:  //準備完成
                      Toast.makeText(this,"準備完成",Toast.LENGTH_SHORT).show();
                      break;
      
                  case VideoView.STATE_PLAYING: //播放中
                      //需在此時獲取視頻寬高
                      int[] videoSize = videoView.getVideoSize();
                      L.d("視頻寬:" + videoSize[0]);
                      L.d("視頻高:" + videoSize[1]);
                      break;
      
                  case VideoView.STATE_PAUSED: //暫停
                      Toast.makeText(this,"暫停",Toast.LENGTH_SHORT).show();
                      break;
      
                  case VideoView.STATE_BUFFERING:
                      break;
      
                  case VideoView.STATE_BUFFERED:
                      break;
      
                  case VideoView.STATE_PLAYBACK_COMPLETED: //播放完成
                       Toast.makeText(this,"播放完成",Toast.LENGTH_SHORT).show();
                       break;
      
                  case VideoView.STATE_ERROR:
                      break;
              }
          }
      }

        2.功能:

           重復播放:

      videoView.setLooping(true);

          聲音靜音:

      videoView.setMute(true);

          取消全屏:

                  case xyz.doikki.videoplayer.player.VideoView.PLAYER_FULL_SCREEN://全屏
                      videoView.setScreenScaleType(xyz.doikki.videoplayer.player.VideoView.SCREEN_SCALE_DEFAULT);
                      videoView.stopFullScreen();
                      break;

          暫停播放:

      videoView.pause();

          開始播放:

      videoView.start();

          釋放資源:

      videoView.release();

          倍速播放:

      mVideoView.setSpeed(1.0f);

          視頻截圖:

                      ImageView imageView = findViewById(R.id.iv_screen_shot);
                      Bitmap bitmap = mVideoView.doScreenShot();
                      imageView.setImageBitmap(bitmap);

       

          設置基本控制器:

            創建控制器對象,調用控制器對象.addDefaultControlComponent("標題", false)為控制器進行基礎設置

      StandardVideoController controller = new StandardVideoController(this);
      controller.addDefaultControlComponent("標題", false); //控制器進行默認設置
      videoView.setVideoController(controller); //設置控制器

          視頻控制器具體:

            通過添加多類別界面組合整個視頻播放UI界面,分為:自動完成播放界面,錯誤界面,標題界面,點播控制條界面。

             這里不用默認,自行添加需要的界面。

      //視頻界面:封面,全屏,底部控制條,播放暫停等等
              StandardVideoController controller = new StandardVideoController(this);
              //controller.addDefaultControlComponent("標題", false);
              controller.addControlComponent(new CompleteView(this));//自動完成播放界面
              
              controller.addControlComponent(new ErrorView(this));//錯誤界面
      
              TitleView titleView = new TitleView(this);//標題欄
              titleView.setTitle("標題!");
              controller.addControlComponent(titleView);
      
              //根據是否為直播設置不同的底部控制條
              VodControlView vodControlView = new VodControlView(this);//點播控制條
              MyVodControlView myVodControlView = new MyVodControlView(this);
              controller.addControlComponent(vodControlView);
      
              GestureView gestureControlView = new GestureView(this);//滑動控制視圖
              controller.addControlComponent(gestureControlView);
              //根據是否為直播決定是否需要滑動調節進度
              controller.setCanChangePosition(true);
              videoView.setVideoController(controller); //設置控制器
              videoView.addOnStateChangeListener(this);
              videoView.start(); //開始播放,不調用則不自動播放
              // 視頻已實現暫停,繼續,拖動

             2. 修改或擴展功能

              比如要修改點播控制條,去除全屏功能。

              1. 復制VodControlView代碼

              2. 對內部組件進行修改比如 mFullxxx.setVisiable(GONE);

                3. 調用controller.addControlComponent(myVodControlView); 添加自定義視圖

       

      完整項目代碼

      public class DKVideoPlayerActivity extends AppCompatActivity implements View.OnClickListener ,VideoView.OnStateChangeListener {
          private String uri = "android.resource://com.ruidiculous.mywebviewdemo/"+R.raw.gta6;
          private VideoView videoView;private Button btnLoop , btnVoiceSilence, btnVoiceResume;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_d_k_video_player);
      
              VideoViewManager.setConfig(VideoViewConfig.newBuilder()
                      //使用使用IjkPlayer解碼
                      .setPlayerFactory(IjkPlayerFactory.create())
                      .build());
              videoView = findViewById(R.id.videoView);
              videoView.setUrl(uri); //設置視頻地址
      
              //視頻界面:封面,全屏,底部控制條,播放暫停等等
              StandardVideoController controller = new StandardVideoController(this);
              //controller.addDefaultControlComponent("標題", false);
              controller.addControlComponent(new CompleteView(this));//自動完成播放界面
      
              controller.addControlComponent(new ErrorView(this));//錯誤界面
      
              TitleView titleView = new TitleView(this);//標題欄
              titleView.setTitle("標題!");
              controller.addControlComponent(titleView);
      
              //根據是否為直播設置不同的底部控制條
              VodControlView vodControlView = new VodControlView(this);//點播控制條
      
              MyVodControlView myVodControlView = new MyVodControlView(this);
              controller.addControlComponent(vodControlView);
      
              GestureView gestureControlView = new GestureView(this);//滑動控制視圖
              controller.addControlComponent(gestureControlView);
              //根據是否為直播決定是否需要滑動調節進度
              controller.setCanChangePosition(true);
              videoView.setVideoController(controller); //設置控制器
              videoView.addOnStateChangeListener(this);
              videoView.start(); //開始播放,不調用則不自動播放
              // 視頻已實現暫停,繼續,拖動
      
              btnLoop = findViewById(R.id.btnLoop);
              btnVoiceSilence = findViewById(R.id.btnVoiceSilence);
              btnVoiceResume = findViewById(R.id.btnVoiceResume);
              btnLoop.setOnClickListener(this);
          }
      
          @Override
          public void onClick(View v) {
              switch ( v.getId() ){
                  case R.id.btnLoop:
                      videoView.setLooping(true);
                      break;
                  case R.id.btnVoiceSilence:
                      videoView.setMute(true);
                      break;
                  case R.id.btnVoiceResume:
                      videoView.setMute(false);
                      break;
              }
          }
      
          @Override
          public void onPlayerStateChanged(int playerState) {
          }
      @Override
      public void onPlayStateChanged(int playState) { switch (playState) { case VideoView.STATE_IDLE: break; case VideoView.STATE_PREPARING: //準備中 Toast.makeText(this,"準備中",Toast.LENGTH_SHORT).show(); break; case VideoView.STATE_PREPARED: //準備完成 Toast.makeText(this,"準備完成",Toast.LENGTH_SHORT).show(); break; case VideoView.STATE_PLAYING: //播放中 //需在此時獲取視頻寬高 int[] videoSize = videoView.getVideoSize(); L.d("視頻寬:" + videoSize[0]); L.d("視頻高:" + videoSize[1]); break; case VideoView.STATE_PAUSED: //暫停 Toast.makeText(this,"暫停",Toast.LENGTH_SHORT).show(); break; case VideoView.STATE_BUFFERING: break; case VideoView.STATE_BUFFERED: break; case VideoView.STATE_PLAYBACK_COMPLETED: //播放完成 Toast.makeText(this,"播放完成",Toast.LENGTH_SHORT).show(); break; case VideoView.STATE_ERROR: break; } } }

       

       
      posted @ 2023-12-13 17:07  remix_alone  閱讀(1129)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产在线观看免费观看| 午夜毛片不卡免费观看视频| 成av免费大片黄在线观看| 一道本AV免费不卡播放| 开心久久综合激情五月天| 国产精品高清国产三级囯产AV| 国产亚洲精品久久久久久无亚洲 | 高清国产一区二区无遮挡| 九九热视频在线免费观看| 国产AV巨作丝袜秘书| 这里只有精品在线播放| 中国性欧美videofree精品| 狠狠躁夜夜躁人人爽天天69| 国产一区二区三区小说| 99riav精品免费视频观看| 韩国福利片在线观看播放| 国内精品大秀视频日韩精品| 综合色天天久久| 91亚洲国产成人精品性色| 国产精品一二三区久久狼| 日韩AV高清在线看片| 欧美xxxx黑人又粗又大| 国产精品99中文字幕| 熟妇的奶头又大又长奶水视频| 亚洲熟妇久久精品| 午夜高清福利在线观看| 亚洲精品一区二区三区色| 国色精品卡一卡2卡3卡4卡在线| 天天澡日日澡狠狠欧美老妇| 亚洲精品综合久久国产二区| 欧美精品18videosex性欧美| 精品人妻伦一二三区久久aaa片| 午夜激情福利在线免费看| 熟妇人妻任你躁在线视频| 人妻在线无码一区二区三区| 日韩AV高清在线看片| 可以在线观看的亚洲视频| 麻豆果冻国产剧情av在线播放| 亚洲色av天天天天天天 | 亚洲十八禁一区二区三区| 熟女视频一区二区三区嫩草|