解决 GSYVideoPlayer 连续切换视频 出现黑屏只有声音没有画面的问题

问题描述

如果这个播放器用来recycleView中,实现类似抖音的效果,会发现刷了一段时间,会出现只有声音没有画面的情况。这个时候是因为surface没有创建(具体原因未知)。GSYTextureView中的onSurfaceTextureAvailable方法没有回调。

其他人也遇到过
GSYTextureRenderView onSurfaceAvailable 不调用(已添加硬件加速) #1740

解决方案

如果发现surface没有创建成功就手动调用。继承StandardGSYVideoPlayer 重写以下四个方法

public class TRSVideoPlayer extends StandardGSYVideoPlayer {
   

    boolean isSurfaceAvailable;
    @Override
    protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime, boolean forceChange) {
   
        super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange);
        //以下代码要解决的问题是,如果这个播放器用来recycleView中,实现类似抖音的效果
        //会发现刷了一段时间,会出现只有声音没有画面的情况。这个时候是因为surface没有创建(具体原因未知)
        //通过调用requestLayout可以创建surface。但是只在当前控件上调用requestLayout不起作用
        //需要一直往上调用。
        if (getCurrentState() == CURRENT_STATE_PLAYING || getCurrentState() == CURRENT_STATE_PLAYING_BUFFERING_START) {
   
            if (!isSurfaceAvailable) {
   
                Debuger.printfLog("VideoView 播放器缓冲中 isAddRenderView " + isSurfaceAvailable + " 当前播放器状态 " + getCurrentState());
                try {
   
                  requestLayoutLoop(this);
                } catch (Exception | OutOfMemoryError e) {
   
                    onCompletion();
                }

                return;
            }
        }
    }
    //一直循环向上调用。
    private void requestLayoutLoop(Object obj){
   
        if(obj==null){
   
            return;
        }
        if(!(obj instanceof View)){
   
            return;
        }
        View view= (View) obj;

        view.requestLayout();
        requestLayoutLoop(view.getParent());
    }

    @Override
    protected void addTextureView() {
   
        super.addTextureView();
  		//每次添加TextrueView就重置状态
        isSurfaceAvailable = false;
    }

    @Override
    public void onSurfaceAvailable(Surface surface) {
   
        super.onSurfaceAvailable(surface);
        isSurfaceAvailable = true;
      
    }
  }

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 18:20:02       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 18:20:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 18:20:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 18:20:02       18 阅读

热门阅读

  1. Linux中find文件查找工具应用

    2024-01-03 18:20:02       33 阅读
  2. linux系统类型及分类

    2024-01-03 18:20:02       30 阅读
  3. VivadoAndTcl: get_cells

    2024-01-03 18:20:02       37 阅读
  4. 2023年我的编程之旅:技术演进与自我成长的纪录

    2024-01-03 18:20:02       41 阅读
  5. @EqualsAndHashCode(callSuper = true)注解讲解

    2024-01-03 18:20:02       37 阅读
  6. STM32 Bit-Bang I2C

    2024-01-03 18:20:02       27 阅读
  7. QT (C++)定位内存越界(踩内存)问题

    2024-01-03 18:20:02       30 阅读