Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于自定义请看 #410

Open
CarGuo opened this issue Aug 30, 2017 · 40 comments
Open

关于自定义请看 #410

CarGuo opened this issue Aug 30, 2017 · 40 comments

Comments

@CarGuo
Copy link
Owner

CarGuo commented Aug 30, 2017

项目中主要提供一些常用的基础功能,很多方法都有保护方法,继承好即可修改逻辑。

关于ui,可以虽然自定义,返回你的ui逻辑,内部已经尽可能的做了判空,如果还有哪里没处理好空判断请提出。

你可以使用相同id调整布局,或者完全使用自己的布局

@Chenayi
Copy link

Chenayi commented Aug 31, 2017

如果我在自定义布局中没有定义相对应的控件id,是否会出问题

@CarGuo
Copy link
Owner Author

CarGuo commented Aug 31, 2017

理论上是没问题的

@CarGuo
Copy link
Owner Author

CarGuo commented Sep 1, 2017

系统MediaMetadataRetriever和https://github.com/wseemann/FFmpegMediaMetadataRetriever

@DingSong
Copy link

DingSong commented May 2, 2018

surface_container为id的一个ViewGroup是必须的

@marvin-an
Copy link

你好,请问控件的进度条是否可以隐藏?

@CarGuo
Copy link
Owner Author

CarGuo commented Jul 29, 2018

@lhzlg3368 直接继承,重载getLayoutId,在你的布局里去掉就可以了。

@jessZhao2019
Copy link

是我自定义的不对吗?怎么经常播放视频出现卡顿情况 地址如下http://gv.static.nextjoy.com/article/video/26779803.flv.mp4

@zkq815
Copy link

zkq815 commented Jul 24, 2019

目前使用了这个框架,在视频播放的时候,因为手机宽高比的原因,有些视频左右有黑边,有些视频上下有黑边,请问是否提供了可以代码设置视频内容宽高的方法?期待你的回复,谢谢

@hhuas
Copy link

hhuas commented Jul 24, 2019 via email

@zkq815
Copy link

zkq815 commented Jul 24, 2019 via email

@hhuas
Copy link

hhuas commented Jul 24, 2019 via email

@zkq815
Copy link

zkq815 commented Jul 24, 2019 via email

@hhuas
Copy link

hhuas commented Jul 24, 2019 via email

@zkq815
Copy link

zkq815 commented Jul 24, 2019 via email

@iamlfc
Copy link

iamlfc commented Sep 3, 2019

感谢作者的开源,我是第一次使用这个库,在自定义的ui的时候遇到一些问题:请问如何给自定义ui里边的按钮添加点击事件
版本 :6.0.3
需求:我需要在右上角添加一个新的按钮,比如说分享按钮 继承 StandardGSYVideoPlayer 之后,通过getLayoutId 方法设置了自己的layout 应该在那个方法里边设置这个按钮点击事件?希望各位使用过的前辈指导一下。

@huangyuan0pplabs
Copy link

我继承StandardGSYVideoPlayer,使用自己的布局文件,添加了一个ImageView,在自定义的GSYVideoPalyer里使用findViewById获取它病绑定点击事件,点击事件有效,但是在changeUiToNormal()等方法里使用它时却报它是个空的·····不知道为啥····最后没办法重写GSYVideoControlView添加控件才解决····

@hhuas
Copy link

hhuas commented Nov 21, 2019

自定义布局需要在两个地方都绑定id,横屏和竖屏是不一样的

@huangyuan0pplabs
Copy link

自定义布局需要在两个地方都绑定id,横屏和竖屏是不一样的

请问除了那个init外还需要在哪里绑定呢?app/src/main/java/com/example/gsyvideoplayer/video/SampleCoverVideo.java里的那个ImageView也只是在init绑定的。

@hhuas
Copy link

hhuas commented Nov 21, 2019

@OverRide
protected void init(Context context) {
super.init(context);
initView();
}

private void initView() {
    mSwitchSize = (TextView) findViewById(R.id.switchSize);
    //切换视频清晰度
    mSwitchSize.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mHadPlay && !isChanging) {
                showSwitchDialog();
            }
        }
    });
}
  • 全屏时将对应处理参数逻辑赋给全屏播放器
    *

    • @param context
    • @param actionBar
    • @param statusBar
    • @return
      */
      @OverRide
      public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
      SmartPickVideo sampleVideo = (SmartPickVideo) super.startWindowFullscreen(context, actionBar, statusBar);
      sampleVideo.mSourcePosition = mSourcePosition;
      sampleVideo.mListItemRect = mListItemRect;
      sampleVideo.mListItemSize = mListItemSize;
      sampleVideo.mType = mType;
      sampleVideo.mUrlList = mUrlList;
      sampleVideo.mTypeText = mTypeText;
      sampleVideo.mSwitchSize.setText(mTypeText);

    //在这绑定id

    return sampleVideo;
    

    }

@huangyuan0pplabs
Copy link

@OverRide
protected void init(Context context) {
super.init(context);
initView();
}

private void initView() {
    mSwitchSize = (TextView) findViewById(R.id.switchSize);
    //切换视频清晰度
    mSwitchSize.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mHadPlay && !isChanging) {
                showSwitchDialog();
            }
        }
    });
}
  • 全屏时将对应处理参数逻辑赋给全屏播放器
    *

    • @param context
    • @param actionBar
    • @param statusBar
    • @return
      */
      @OverRide
      public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
      SmartPickVideo sampleVideo = (SmartPickVideo) super.startWindowFullscreen(context, actionBar, statusBar);
      sampleVideo.mSourcePosition = mSourcePosition;
      sampleVideo.mListItemRect = mListItemRect;
      sampleVideo.mListItemSize = mListItemSize;
      sampleVideo.mType = mType;
      sampleVideo.mUrlList = mUrlList;
      sampleVideo.mTypeText = mTypeText;
      sampleVideo.mSwitchSize.setText(mTypeText);

    //在这绑定id

    return sampleVideo;
    

    }
    搞定了,确实是这样的,不过好像是用已经有的控件给那个传进来的GSYBaseVideoPlayer的对应控件传值,而不是直接使用findviewById,谢谢大佬。

@huangyuan0pplabs
Copy link

@OverRide
protected void init(Context context) {
super.init(context);
initView();
}

private void initView() {
    mSwitchSize = (TextView) findViewById(R.id.switchSize);
    //切换视频清晰度
    mSwitchSize.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mHadPlay && !isChanging) {
                showSwitchDialog();
            }
        }
    });
}
  • 全屏时将对应处理参数逻辑赋给全屏播放器
    *

    • @param context
    • @param actionBar
    • @param statusBar
    • @return
      */
      @OverRide
      public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
      SmartPickVideo sampleVideo = (SmartPickVideo) super.startWindowFullscreen(context, actionBar, statusBar);
      sampleVideo.mSourcePosition = mSourcePosition;
      sampleVideo.mListItemRect = mListItemRect;
      sampleVideo.mListItemSize = mListItemSize;
      sampleVideo.mType = mType;
      sampleVideo.mUrlList = mUrlList;
      sampleVideo.mTypeText = mTypeText;
      sampleVideo.mSwitchSize.setText(mTypeText);

    //在这绑定id

    return sampleVideo;
    

    }

额,还是有问题,我在这边尝试findViewById方法以及直接赋值的方法,但是非全屏时没问题,转化为全屏后就不行了,最后还是冲Controll类开始重写直接添加一个控件,后续有时间再研究下。还是谢谢大佬了。

@hhuas
Copy link

hhuas commented Nov 21, 2019

我没做全屏的功能处理,我直接全屏时隐藏了,但是你可以试试在全屏绑定id时给它加一个点击的监听看看,应该有效果,自定义一个点击监听的接口,在页面监听一下,有回调就操作
*
* @param context
* @param actionBar 是否有actionBar,有的话需要隐藏
* @param statusBar 是否有状态bar,有的话需要隐藏
* @return
*/
@OverRide
public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
GSYBaseVideoPlayer gsyBaseVideoPlayer = super.startWindowFullscreen(context, actionBar, statusBar);
if (gsyBaseVideoPlayer != null) {
StandardGSYVideoPlayer gsyVideoPlayer = (StandardGSYVideoPlayer) gsyBaseVideoPlayer;
gsyVideoPlayer.setLockClickListener(mLockClickListener);
gsyVideoPlayer.setNeedLockFull(isNeedLockFull());
initFullUI(gsyVideoPlayer);
//比如你自定义了返回案件,但是因为返回按键底层已经设置了返回事件,所以你需要在这里重新增加的逻辑
}
return gsyBaseVideoPlayer;
}

@JackHarson
Copy link

目前使用了这个框架,在视频播放的时候,因为手机宽高比的原因,有些视频左右有黑边,有些视频上下有黑边,请问是否提供了可以代码设置视频内容宽高的方法?期待你的回复,谢谢

private fun getVideoScale(path: String): String {
    val retriever = MediaMetadataRetriever()
    retriever.setDataSource(path)
    val width: String = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)
    val height: String = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)
 
    return width
}

@CarGuo CarGuo closed this as completed May 22, 2020
@CarGuo CarGuo reopened this May 22, 2020
@CarGuo
Copy link
Owner Author

CarGuo commented May 22, 2020

文档提供这些接口

@wangrunxiang
Copy link
Contributor

@CarGuo 我这边目前有m3u8,服务器做了加密,需求要请求的时候在http上面带上header给服务器,服务器给一个字符串客户端,客户端拿本地的秘钥去解密这个字符串,然后解出来的结果用来解密视频播放,这套逻辑应该怎么自定义?

@CarGuo
Copy link
Owner Author

CarGuo commented Jun 18, 2020

@CarGuo 我这边目前有m3u8,服务器做了加密,需求要请求的时候在http上面带上header给服务器,服务器给一个字符串客户端,客户端拿本地的秘钥去解密这个字符串,然后解出来的结果用来解密视频播放,这套逻辑应该怎么自定义?

你看 Dev 分支,有自定义hls的代码,你需要就是处理给 AES128 Source 的 key

@df13954
Copy link

df13954 commented Jun 30, 2020

以下是我在自定义过程中,发现的关键节点,可以在这些节点修改逻辑,或者定制ui。希望对使用的朋友有点帮助。


播放器

显示与隐藏方法:这个显示底部,顶部,及其他控制按钮,

onClickUiToggle

点击锁回调和锁ui改变

lockTouchLogic
mLockCurScreen 锁的状态变量
//锁定屏幕点击
protected boolean mLockCurScreen = true;

    //是否需要锁定屏幕
protected boolean mNeedLockFull = true;
GSYVideoControlView包含面板的点击事件

播放按钮:

updateStartImage

清晰度

showSwitchDialog

静音

GSYVideoManager.instance().setNeedMute(mute);
mMute.setOnClickListener点击事件

虚拟键隐藏

GSYVideoControlView

if (mHideKey && mIfCurrentIsFullscreen && mShowVKey) {
                                        hideNavKey(mContext);
                                    }

当前播放进度:

getCurrentPositionWhenPlaying

播放总时长

getDuration

@wangrunxiang
Copy link
Contributor

@CarGuo 代码大概在dev分支的哪里?

@MYaoDan
Copy link

MYaoDan commented Jul 11, 2020

你好,请问控件的进度条是否可以隐藏?

请问你隐藏了吗?如何实现的?

@wangrunxiang
Copy link
Contributor

@MYaoDan 直接隐藏控件就可以了

@MYaoDan
Copy link

MYaoDan commented Jul 14, 2020 via email

@aloe20
Copy link

aloe20 commented Dec 10, 2020

getLayoutId的值想从xml传过来,但在执行此方法前拿不到AttributeSet的值,能否在init(Context)方法加上AttributeSet参数呢?

@zp0511
Copy link

zp0511 commented Apr 17, 2021

继承StandardGSYVideoPlayer,在类里面写了个回调提供给外部监听,当切换为横屏播放时,回调就变为null了,切换为竖屏时也还是正常的。请问大佬需要怎么处理呢

@zhangboshu
Copy link

请问, 有在进度条上打关键点的功能吗?

@Mr-Zheng-yz
Copy link

请问能否像 ImageView 的 centerInside 属性一样,来根据每个视频宽高,动态调整以达到视频完全展示的效果(当然短边的黑边不可避免)

@xhw15815912
Copy link

@CarGuo 作者您好,我用播放器自定义的界面,播放竖屏视频的时候,显示的播放视频只有中间的一个小方块并且显示不全,但是显示正常的大视频展示就是全屏的,什么方法可以让竖屏方法自适应显示呢

@xhw15815912
Copy link

解决了,在以上的评论中找到了surface_container的空间,将控件的宽高改为了全屏

@zhoukp616
Copy link

@OverRide
protected void init(Context context) {
super.init(context);
initView();
}

private void initView() {
    mSwitchSize = (TextView) findViewById(R.id.switchSize);
    //切换视频清晰度
    mSwitchSize.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mHadPlay && !isChanging) {
                showSwitchDialog();
            }
        }
    });
}
  • 全屏时将对应处理参数逻辑赋给全屏播放器
    *

    • @param context
    • @param actionBar
    • @param statusBar
    • @return
      */
      @OverRide
      public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
      SmartPickVideo sampleVideo = (SmartPickVideo) super.startWindowFullscreen(context, actionBar, statusBar);
      sampleVideo.mSourcePosition = mSourcePosition;
      sampleVideo.mListItemRect = mListItemRect;
      sampleVideo.mListItemSize = mListItemSize;
      sampleVideo.mType = mType;
      sampleVideo.mUrlList = mUrlList;
      sampleVideo.mTypeText = mTypeText;
      sampleVideo.mSwitchSize.setText(mTypeText);

    //在这绑定id

    return sampleVideo;
    

    }

额,还是有问题,我在这边尝试findViewById方法以及直接赋值的方法,但是非全屏时没问题,转化为全屏后就不行了,最后还是冲Controll类开始重写直接添加一个控件,后续有时间再研究下。还是谢谢大佬了。

使用currentPlayer调用控件就可以了,init或者initView里面有绑定id的话,这里不需要重新绑定的

@Vindac
Copy link

Vindac commented Jun 3, 2023

记录一下我遇到的问题,继承StandardGSYVideoPlayer进行的自定义 当前播放时间和总时间在全屏的时候隐藏了
image
解决方案,关注一下布局里面 @+id/layout_bottom 的View,是否设置了background,如果没有设置,一定要设置,而且不能为全透明
image

@912334508
Copy link

记录一个在全屏状态下播放其他视频的异常问题:

异常用法(直接使用播放view setUp 会出现黑屏无法播放 ):
play.setUp("https://res.exexm.com/cw_145225549855002", false, "22");
play..startPlayLogic();

正常用法(先getCurrentPlayer()):
play.getCurrentPlayer().setUp("https://res.exexm.com/cw_145225549855002", false, "22");
play.getCurrentPlayer().startPlayLogic();

记录一下坑了几天 各种试错发现的问题!!!!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests