推广 热搜: csgo  vue  2023  angelababy  gps  信用卡  新车  htc  落地  控制 

教你使用超简单的视频播放器JiaoZiVideoPlayer

   2023-08-01 网络整理佚名2400
核心提示:在之前的项目中用到了视频播放的功能,在网上看了看使用了大家用的比较多的一个开源项目让我迅速的实现了视频播放的相关功能。的简单使用Jz播放器的简单使用,只需要在布局文件中引入该文件,然后为其设置待播放视频的链接和播放视频的封面图即可。主要特点可以完全自定义UI和任何功能可以完全自定义UI和任何功能一行代码切换播放引擎,支持的视频格式和协议取决于播放引擎,.播放目录下的视频

在之前的项目中,我使用了视频播放的功能。 在网上看到并使用了一个大家用的比较多的开源项目,让我很快就实现了视频播放的相关功能。

便于使用

JZVideoPlayerStandard jzVideoPlayerStandard = (JZVideoPlayerStandard) findViewById(R.id.jz_vedio);
//设置播放视频链接和视频标题
jzVideoPlayerStandard.setUp(VEDIO_URL
                , JZVideoPlayer.SCREEN_WINDOW_NORMAL, "饺子在哪里");
                
//为播放视频设置封面图
jzVideoPlayerStandard.thumbImageView.setImageResource(R.mipmap.ic_launcher);

复制

Jz播放器的简单使用只需要在布局文件中引入该文件,然后设置要播放的视频的链接和要播放的视频的封面图片即可。 我们不需要关心其他播放相关的事情。

代码结构分析

主要特点 您可以完全自定义UI和任何功能 您可以完全自定义UI和任何功能 一行代码即可切换播放引擎,支持的视频格式和协议取决于播放引擎.media。 完美检测列表 滑动实现全屏播放、小窗播放 可在 、 、 、 等多种嵌套模式下全屏工作 加载、暂停、暂停等多种状态下可正常进入全屏和退出全屏回放。 多种视频适配屏幕方式,可覆盖全屏,全屏可裁剪重力感应自动进入全屏全屏后手势修改进度和音量Home键退出界面暂停播放,返回界面继续播放用户指南

1...添加类库

implementation 'cn.jzvd:jiaozivideoplayer:7.0.3'

复制

2.添加布局


    

复制

3.设置视频地址、缩略图地址、标题

MyJzvdStd jzvdStd = (MyJzvdStd) findViewById(R.id.jz_video);
jzvdStd.setUp("http://jzvd.nathen.cn/c6e3dc12a1154626b3476d9bf3bd7266/6b56c5f0dc31428083757a45764763b0-5287d2089db37e62345123a1be272f8b.mp4"
                            , "饺子闭眼睛");
jzvdStd.thumbImageView.setImage("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640");

复制

4进

@Override
public void onBackPressed() {
    if (Jzvd.backPress()) {
        return;
    }
    super.onBackPressed();
}
@Override
protected void onPause() {
    super.onPause();
    Jzvd.releaseAllVideos();
}

复制

5. 在.xml中

nfigChanges="orientation|screenSize|keyboardHidden"
    android:screenOrientation="portrait" /> 

复制

上面只是一个简单的视频播放功能,但是大家的项目需求应该不仅仅需要播放视频,所以我们来写一下其他一些常见的添加缩略图的使用方法

Glide.with(this).load(Url).into(myJzvdStd.thumbImageView);   //推荐使用Glide

复制

自动播放

      自动播放有两种 这里随便选择添加一个,
    1. myJzvdStd.startButton.performClick();
    2. myJzvdStd.startVideo();

复制

跳转到指定位置播放

    //这里只有开始播放时才生效
    mJzvdStd.seekToInAdvance = 20000;
    //跳转制定位置播放
    JZMediaManager.seekTo(30000);
   2.播放sd卡下视频
    public void cpAssertVideoToLocalPath() {
            try {
                InputStream myInput;
                OutputStream myOutput = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/local_video.mp4");
                myInput = this.getAssets().open("local_video.mp4");
                byte[] buffer = new byte[1024];
                int length = myInput.read(buffer);
                while (length > 0) {
                    myOutput.write(buffer, 0, length);
                    length = myInput.read(buffer);
                }
     
                myOutput.flush();
                myInput.close();
                myOutput.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    myJzvdStd.setUp(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/local_video.mp4", "饺子不信",Jzvd.SCREEN_WINDOW_NORMAL, );
    这里很多人问为什么播不了,请认真怒url,播不了就是url没怒对

复制

播放目录中的视频

           复制Demo中CustomMediaPlayerAssertFolder类到你的项目下
            ----------------------------------------------------------------------------
            JZDataSource jzDataSource = null;
            try {
                jzDataSource = new JZDataSource(getAssets().openFd("local_video.mp4"));
                jzDataSource.title = "饺子快长大";
            } catch (IOException e) {
                e.printStackTrace();
            }
            jzvdStd.setUp(jzDataSource, JzvdStd.SCREEN_WINDOW_NORMAL);
            Glide.with(this)
                    .load("http://jzvd-pic.nathen.cn/jzvd-pic/1bb2ebbe-140d-4e2e-abd2-9e7e564f71ac.png")
                    .into(jzvdStd.thumbImageView);
     
            Jzvd.setMediaInterface(new CustomMediaPlayerAssertFolder());//进入此页面修改MediaInterface,让此页面的jzvd正常工作

复制

直接全屏播放

JzvdStd.startFullscreen(this, JzvdStd.class, VideoConstant.videoUrlList[6], "饺子辛苦了");

复制

打开小窗就可以玩了

mJzvdStd.startWindowTiny();

复制

列表项滑动打开小窗口即可播放

    1.Listview
       listView.setonScrollListener(new AbsListView.onScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) { 
     
                }
                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                    Jzvd.onScrollAutoTiny(view, firstVisibleItem, visibleItemCount, totalItemCount);
                  // Jzvd.onScrollReleaseAllVideos(view, firstVisibleItem, visibleItemCount, totalItemCount);  这是不开启列表划出小窗 同时也是画出屏幕释放JZ 划出暂停
                }
            });
    2. RecyclerView  划出列表开启小窗
       recyclerView.addonChildAttachStateChangeListener(new RecyclerView.onChildAttachStateChangeListener() {
                @Override
                public void onChildViewAttachedToWindow(View view) {
                    Jzvd.onChildViewAttachedToWindow(view, R.id.videoplayer);
                }
     
                @Override
                public void onChildViewDetachedFromWindow(View view) {
                    Jzvd.onChildViewDetachedFromWindow(view);
                }
            });
    2.1 RecyclerView划出屏幕释放JZ,同时也是不开启列表划出显示小窗
        recyclerView.addonChildAttachStateChangeListener(new RecyclerView.onChildAttachStateChangeListener() {
                @Override
                public void onChildViewAttachedToWindow(View view) {
     
                }
     
                @Override
                public void onChildViewDetachedFromWindow(View view) {
                    Jzvd jzvd = view.findViewById(R.id.videoplayer);
                    if (jzvd != null && jzvd.jzDataSource.containsTheUrl(JZMediaManager.getCurrentUrl())) {
                        Jzvd currentJzvd = JzvdMgr.getCurrentJzvd();
                        if (currentJzvd != null && currentJzvd.currentScreen != Jzvd.SCREEN_WINDOW_FULLSCREEN) {
                            Jzvd.releaseAllVideos();
                        }
                    }
                }
            });

复制

小屏没有声音,全屏有声音

    创建一个类继承JzvdStd并在XML设置
    public class JzvdStdVolumeAfterFullscreen extends JzvdStd {
        public JzvdStdVolumeAfterFullscreen(Context context) {
            super(context);
        }
     
        public JzvdStdVolumeAfterFullscreen(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
     
        @Override
        public void onPrepared() {
            super.onPrepared();
            if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
                JZMediaManager.instance().jzMediaInterface.setVolume(1f, 1f);
            } else {
                JZMediaManager.instance().jzMediaInterface.setVolume(0f, 0f);
            }
        }
     
        
        @Override
        public void startWindowFullscreen() {
            super.startWindowFullscreen();
            JZMediaManager.instance().jzMediaInterface.setVolume(1f, 1f);
        }
     
        
        @Override
        public void playonThisJzvd() {
            super.playonThisJzvd();
            JZMediaManager.instance().jzMediaInterface.setVolume(0f, 0f);
        }
    }

复制

全屏状态下播放完毕,不要退出全屏

    创建一个类继承JzvdStd并在XML设置
    public class JzvdStdAutoCompleteAfterFullscreen extends JzvdStd {
        public JzvdStdAutoCompleteAfterFullscreen(Context context) {
            super(context);
        }
     
        public JzvdStdAutoCompleteAfterFullscreen(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
     
        @Override
        public void startVideo() {
            if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
                Log.d(TAG, "startVideo [" + this.hashCode() + "] ");
                initTextureView();
                addTextureView();
                AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
                mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
                JZUtils.scanForActivity(getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
     
                JZMediaManager.setDataSource(jzDataSource);
                JZMediaManager.instance().positionInList = positionInList;
                onStatePreparing();
            } else {
                super.startVideo();
            }
        }
     
        @Override
        public void onAutoCompletion() {
            if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
                onStateAutoComplete();
            } else {
                super.onAutoCompletion();
            }
     
        }
    }

复制

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON