首页

源码搜藏网

首页 > 安卓源码 > 控件分类 > 多媒体Media >

Android一个支持自定义布局和直播 手势 亮度,音量,快进,等手

创建时间:2017-10-18 20:52  

Android一个支持自定义布局和直播 手势 亮度,音量,快进,等手
Android一个支持自定义布局和直播 手势 亮度,音量,快进,等手
暂无演示 立即下载

gif 显示有点卡,帧数低,实际很流畅

下载预览apk

基于exoPlayer 自定义播放器 JPlayer支持功能:

更新日志→》戳我查看

查看1.5.7.2升级日志

一.引用类库

 repositories {
        jcenter()
        mavenCentral();
    }

dependencies {
   compile 'com.ycjiang:VideoPlayModule:1.5.7.2'

}

提示:无法正常引用请在 repositories{ }添加已下代码 mavenCentral(url: "https://dl.bintray.com/ycjiang/ycjiang")

二.控件属性

1.控件属性

控件自定义属性

  <chuangyuan.ycj.videolibrary.widget.VideoPlayerView
        android:id="@+id/exo_play_context_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        app:resize_mode="fit"
        app:show_timeout="3000"
        app:controller_layout_id="@layout/simple_exo_playback_control_view"
        app:player_layout_id="@layout/simple_exo_view"
        app:surface_type="texture_view"
        app:paddingEnd="0dp"
        app:paddingStart="0dp"
        app:fastforward_increment="0"
        app:rewind_increment="0"
        app:user_watermark="@mipmap/watermark_big"
        app:player_list="true"
        app:use_controller="true"
        app:player_replay_layout_id="@layout/custom_play_replay"
        app:player_error_layout_id="@layout/custom_play_error"
        app:player_hint_layout_id="@layout/custom_play_btn_hint"
        app:player_load_layout_id="@layout/custom_exo_play_load"
         />

基本使用如下

      <chuangyuan.ycj.videolibrary.widget.VideoPlayerView
              android:id="@+id/exo_play_context_id"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@android:color/transparent"
              app:controller_layout_id="@layout/simple_exo_playback_control_view"
              app:player_layout_id="@layout/simple_exo_view"
              app:resize_mode="fit"
              app:surface_type="surface_view" />

2.属性说明

 
1.   player_layout_id  播放器布局, //必选
     player_layout_id 目前支持指定布局simple_exo_playback_control_view 后续版本,开放自定义使用
 
2. controller_layout_id  控制器布局`  默认有三种布局
    1.simple_exo_playback_control_view.xml  //视频封面控制布局下面,比较常规使用
    2.simple_exo_playback_list_view.xml.xml //在列表播放使用控制布局
    3.simple_exo_playback_top_view.xml.xml  //视频封面控制布局上面
 
3.    surface_type 视频渲染类型 //texture_view 和surface_view //枚举类型。默认surface_view
 
4.   use_controller   是否用户控制控制器  布尔类型
 
5.   resize_mode  视频缩放渲染显示方式一共4种 //可选  
        1.fit          //正常模式
        2.fixed_width  //保持的是视频宽度,拉伸视频高度
        3.fixed_height //保持的是视频高度,拉伸视频宽度
        4.fill          //全屏模式,拉伸视频宽高
 
6.   default_artwork  占位图  //可选
 
7.   show_timeout  控制布局隐藏时间  默认值为3秒  //可选
 
8.   paddingEnd,paddingStart 设置边距  默认值为0  //可选
 
9.   fastforward_increment  设置快进增量,以毫秒为单位。 //可选
 
10.  rewind_increment   设置快退增量,以毫秒为单位。  //可选
 
11.  user_watermark    水印图片 默认在右上角  //可选
 
12.  player_list      是否指定列表播放   //可选 默认 false  true 列表播放
 
13.  player_replay_layout_id  自定义重播布局文件
 
14.  player_error_layout_id   自定义错误布局文件
 
15.  player_hint_layout_id   自定义非wifi提示布局文件
 
16.  player_load_layout_id   自定义视频加载布局文件

3.修改网络对话框提示文字内容

  app.strings.xml
  <string name="exo_play_reminder">您当前网络不是wifi,是否继续观看视频</string>
  <string name="exo_play_wifi_hint_no">提示</string>

4.在功能清单声明 AndroidManifest.xml

在activity节点 加上“android:configChanges="orientation|keyboardHidden|screenSize"”
 如下实例:
        <activity android:name="chuangyuan.ycj.yjplay.MainListActivity"
         android:configChanges="orientation|keyboardHidden|screenSize"
         android:screenOrientation="portrait">

3.JAVA 代码

1 播放控制类

1.ExoUserPlayer 基本播放父类,实现基本播放,设置setPlayUri();会自动加载播放
2.GestureVideoPlayer  具有手势操作播放(调节亮度和视频进度,和音量)会自动加载播放
2.ManualPlayer  点击开始按钮播放,具有手势功能,和列表播放

2 播放代码

     //实例化播放控制类
      ManualPlayer exoPlayerManager = new ManualPlayer(this,R.id.exo_play_context_id);
     //自定义你的数据源,后面详细介绍如何自定义数据源类
      // ManualPlayer exoPlayerManager = new ManualPlayer(this,R.id.exo_play_context_id,new DataSource(this));
      //加载m3u8
      exoPlayerManager.setPlayUri("http://dlhls.cdn.zhanqi.tv/zqlive/35180_KUDhx.m3u8");
      //加载ts.文件
      exoPlayerManager.setPlayUri("http://185.73.239.15:25461/live/1/1/924.ts");
      //播放本地视频
      // exoPlayerManager.setPlayUri("/storage/emulated/0/DCIM/Camera/VID_20170717_011150.mp4");
      //下面开启多线路播放
        exoPlayerManager.setShowVideoSwitch(true); //开启切换按钮,默认关闭
       String [] test={"http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4","http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4","http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4"};
       String[] name={"超清","高清","标清"};
       exoPlayerManager.setPlaySwitchUri(test,name);
      //添加水印图片
      // exoPlayerManager.setExoPlayWatermarkImg();
      //是否屏蔽进度控件拖拽快进视频(例如广告视频,(不允许用户))
       exoPlayerManager.setSeekBarSeek(false);
       //设置视循环播放
       exoPlayerManager.setLooping(10);
       //d隐藏控制布局
       exoPlayerManager.hideControllerView();
        //隐藏进度条
       exoPlayerManager.hideSeekBar();
        //显示进度条
       exoPlayerManager.showSeekBar();
        //是否播放
       exoPlayerManager.isPlaying(); 
       //设置点击播放按钮需要处理业务
       exoPlayerManager.setOnPlayClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          Toast.makeText(MainCustomActivity.this,"定义点击播放事件",Toast.LENGTH_LONG).show();
                           //处理业务操作 完成后,
                           //方法实现setOnPlayClickListener(), 需要手动调用
                           exoPlayerManager.startPlayer();//开始播放
                      }
         }); 

1.实例化播放控制类

      ManualPlayer exoPlayerManager = new ManualPlayer(this,R.id.exo_play_context_id);
      ManualPlayer exoPlayerManager = new ManualPlayer(this,videoPlayerView);

2.自定义你的数据源,后面详细介绍如何自定义数据源类

     ManualPlayer exoPlayerManager = new ManualPlayer(this,R.id.exo_play_context_id,new DataSource(this));
     ManualPlayer exoPlayerManager = new ManualPlayer(this,videoPlayerView,new DataSource(this));

3.设置视频标题

      exoPlayerManager.setTitle("视频标题");

4.添加水印图片

     exoPlayerManager.setExoPlayWatermarkImg(R.mipmap.watermark_big);

5.设置开始播放进度

     exoPlayerManager.setPosition(1000)

6.设置封面图

       videoPlayerView.setPreviewImage(bimtap);或者 videoPlayerView.getPreviewImage())

7.设置视频路径

     exoPlayerManager.setPlayUri("http://dlhls.cdn.zhanqi.tv/zqlive/35180_KUDhx.m3u8");
     exoPlayerManager.setPlayUri(Uri.parse("http://dlhls.cdn.zhanqi.tv/zqlive/35180_KUDhx.m3u8"));
     exoPlayerManager.setPlayUri(Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.h264"); //本地视频

8.设置多线路播放

      //开启多线路设置,默认关闭
      exoPlayerManager.setShowVideoSwitch(true);
      //支持List列表
      String [] test={"http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4",
      "http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4",
       http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4"};
       String[] name={"超清","高清","标清"};
       exoPlayerManager.setPlaySwitchUri(test,name);

9.设置视频加载提示显示模式(默认LoadModelType.SPEED (网速模式))

   /**设置加载百分比显示模式**/
   exoPlayerManager.setLoadModel(LoadModelType.PERCENR);

10.设置监听回调VideoInfoListener

     exoPlayerManager.setVideoInfoListener(new VideoInfoListener() {
                   @Override
                   public void onPlayStart() {
                         //开始播放
                   }

                   @Override
                   public void onLoadingChanged() {
                             //加载变化
                   }

                   @Override
                   public void onPlayerError(ExoPlaybackException e) {
                             //加载错误
                  }

                   @Override
                   public void onPlayEnd() {
                          //播放结束
                   }
                   @Override
                   public void onRepeatModeChanged(int repeatMode) {
                       //模式变化
                   }
               });

11.覆写Activity和Fragment周期方法

            Override
            public void onResume() {
                super.onResume();
                Log.d(TAG, "onResume");
                exoPlayerManager.onResume();
            }

            @Override
            public void onPause() {
                super.onPause();
                Log.d(TAG, "onPause");
                exoPlayerManager.onPause();
            }


            @Override
            protected void onDestroy() {
                exoPlayerManager.onDestroy();
                super.onDestroy();

            }

            @Override
            public void onConfigurationChanged(Configuration newConfig) {
                exoPlayerManager.onConfigurationChanged(newConfig);//横竖屏切换
                super.onConfigurationChanged(newConfig);
            }

            @Override
            public void onBackPressed() {
            //使用播放返回键监听
             if(exoPlayerManager.onBackPressed()){
                 finish();
             }
            }

三.列表

1.列表播放,只能使用ManualPlayer,在你的VideoHolder

上一篇:安卓MP3音频录制,支持类似IOS原生的单边或者双边波形显示
下一篇:Android支持全屏、小窗口的视频播放器
  • 一个完美的Android视频播放条控件(刻度尺)
    一个完美的 Android 视频播放条控件(刻度尺),可以将控件与时间对应起来,也可以对控件进行移动和缩放,把时间戳和位置对应起来 ##一、前言 最近公司需要,需要一个视频播放条控件,可以将控件与时间对应起来,也可以对控件进行移动和缩放。(PS:公司是做
  • Android基于IJKPlayer,实现了多功能的视频播放器源码
    视频播放器(IJKplayer),HTTPS支持,支持弹幕,支持滤镜、水
  • Android支持全屏、小窗口的视频播放器
    NiceVieoPlayer Android支持全屏、小窗口的视频播放器,完美实现全屏、小窗口播放切换
  • 安卓MP3音频录制,支持类似IOS原生的单边或者双边波形显示
    MP3音频录制,支持类似IOS原生的单边或者双边波形显示,低版本音频权限兼容,本地或者在线音频播放。可以单纯使用录制功能,也可以单纯使用图形,播放也支持波形显示,录制波形和播放波形会根据声音频率变色的功能,边播边缓存功能。 录制音频为MP3保存本地
  • EvilsLive一款开源的视频直播项目
    项目介绍 EvilsLive 是一个视频直播件开发工具包(SDK), 目前只支持 Android, 以后还会支持 Web/IOS 等平台。 主要负责视频直播的采集、推流、预览、播放、美图支持。 欢迎大家 Star, 你们的关注才是我们持续的动力! 注意: 目前此项目还在持续更新中....