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

问题描述

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

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

解决方案

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

public class TRSVideoPlayer extends StandardGSYVideoPlayer {boolean isSurfaceAvailable;@Overrideprotected 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());}@Overrideprotected void addTextureView() {super.addTextureView();//每次添加TextrueView就重置状态isSurfaceAvailable = false;}@Overridepublic void onSurfaceAvailable(Surface surface) {super.onSurfaceAvailable(surface);isSurfaceAvailable = true;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/591207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python - 数据结构与算法之 排列与组合

目录 一.引言 二.排列 A-Permute ◆ 定义 ◆ 计算 ◆ 性质 ◆ 实现 三.组合 C-Combine ◆ 定义 ◆ 计算 ◆ 性质 ◆ 实现 四.经典算法题目 1.全排列 [无重复] 2.全排列 [有重复] 3.组合 [可重复] 4.子集 [无重复] 5.子集 [有重复] 五.总结 一.引言 关于排列…

云原生十二问

一、什么是云原生? 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代企业希望构建高度可扩展、灵活且具有弹性的应用程序,可以快速更新以满足客户需求。为此,他们使用现代工具和技术,这些工具和技术本质上支…

科普帖:什么是XaaS-一切皆服务模型(包含10个示例类别)

有时似乎有太多的商业首字母缩写词要记住。随着快速变化的技术进步和云计算的出现,新的类别将不断涌现。XaaS 就是这样一个最新的补充。 该领域的大多数读者都知道SaaS(软件即服务)、IaaS(基础设施即服务)和PaaS&…

【CISSP学习笔记】5. 安全架构和工程

该知识领域涉及如下考点,具体内容分布于如下各个子章节: 使用安全设计原理来研究、实施与管理工程过程理解安全模型的基本概念(例如 Biba、Star Model、Bell-LaPadula 等模型)基于系统安全要求选择控制措施理解信息系统 (IS) 的安…

强大的隐藏应用 Hides 5中文 for mac

Hides 5是一款Mac上的应用程序,旨在帮助用户隐藏其他应用程序并专注于当前任务,从而提高工作效率。其主要功能包括对焦模式、隐藏所有打开的应用程序、隐藏除当前活动应用之外的所有打开的应用程序、支持全局热键、可定制性、支持多种显示方式等。 Hide…

【map】【滑动窗口】【优先队列】LeetCode480滑动窗口中位数

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本文涉及的基础知识点 C算法:滑动窗口总结 map 优先队列 题目 中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两…

注意力机制(attention mechanism)

1、注意力 灵长类动物的视觉系统接收了大量的感官输入,这些感官输入远远超出了大脑能够完全处理的能力。然而,并非所有刺激的影响都是同等的。意识的汇聚和专注使灵长类动物能够在复杂的视觉环境中将注意力引向感兴趣的物体,例如猎物和天敌。…

【XR806开发板试用】FreeRTOS创建任务测试

这篇来学习下,XR806开发板在FreeRTOS系统下创建两个任务测试,由于没有找到学习的文档,试着参考例程来测试。 一、复制工程 上篇测试了hello_demo的测试例程,直接复制这个工程文件,在此基础上修改 rootubuntu:/home/…

列表赋值,添加元素,删除元素,修改元素值

# append:附加,在列表中加入一个值 # remove(v):移除,在列表中删除原来的列表中存在的一个值 # 如果要删除原来的列表中不存在的一个值则会报错 ,例如: # ctrl / 可以多行注释 # 列表索引: p…

HarmonyOS官网案例解析——保存应用数据

介绍 本篇Codelab将介绍如何使用基础组件Slider,通过拖动滑块调节应用内字体大小。要求完成以下功能: 实现两个页面的UX:主页面和字体大小调节页面。拖动滑块改变字体大小系数,列表页和调节页面字体大小同步变化。往右拖动滑块字体…

Linux安装consul的两种方式(在线和离线)

目录 📚第一章 前言📗背景📗软件概述 📚第二章 部署📗在线部署📕需要root权限📕执行安装命令📕启动consul服务📕验证consul服务 📗离线部署📕下载…

[原创][R语言]股票分析实战[7]:时间转换 与 股票涨幅计算

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

Ef Core花里胡哨系列(1) SafeDelete、ReadOnly、Audit 安全删除、只读、审计等

Ef Core花里胡哨系列(1) SafeDelete、ReadOnly、Audit 安全删除、只读、审计等 在软件设计中,软删除是一种常见的数据管理技术,用于标记和隐藏被删除的数据,而不是永久地从数据库中删除它们。软删除通常通过在数据表中添加一个额外的标志列&…

Server Send Event(基于Http协议的单向消息通信)

简介 Server-Sent Events(SSE)是一种简单的技术,允许服务器向客户端推送实时更新。在Spring Boot项目中,我们可以使用SseEmitter类来实现SSE功能。本文将详细介绍如何在Spring Boot项目中使用SSE,并给出一个使用示例。…

(九)上市企业实施IPD成功案例分享之——欧普

LED通用照明应用是LED照明应用市场的第一驱动力,由于LED照明技术发展迅速,以及成本快速下降,已成为全球主流照明光源。近年来,通过将智能控制模块嵌入LED通用照明终端,形成了具有自动控制、系统化控制等功能的智能照明…

听GPT 讲Rust源代码--library/panic_unwind

File: rust/library/panic_unwind/src/seh.rs 在Rust源代码中,rust/library/panic_unwind/src/seh.rs这个文件的作用是实现Windows操作系统上的SEH(Structured Exception Handling)异常处理机制。 SEH是Windows上的一种异常处理机制&#xff…

【Webpack】加载其他型模块

非模块化文件 非模块化文件指的是并不遵循任何一种模块标准的文件。 最常见的就是在 script标签引用jQuey及其各种插件 如何使用 Webpack打包这类文件呢? 其实只要直接引人即可,如: import ./jquery.min.js;但假如我们引人的非模块化文件是以隐式全局变量声明的方…

mongodb启动失败

● mongodb.service - High-performance, schema-free document-oriented database Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: disabled) Active: inactive (dead) 1月 02 10:18:10 lcy mongod[7013]: ERROR: child process fail…

EDI 项目推进流程

EDI 需求确认 交易伙伴发来EDI对接邀请,企业应该如何应对? 首先需要确认EDI需求,通常包括传输协议和报文标准以及传输的业务单据类型。可以向交易伙伴发送以下内容: (中文版) 与贵司建立EDI连接需要使用…

软件黑盒测试

软件黑盒测试是一种测试方法,它不考虑被测试的软件的内部结构和代码,只关注输入和输出。黑盒测试的目的是验证软件是否符合规格说明书、用户需求和功能规范等要求。通常,黑盒测试包括以下几个步骤: 确定测试目标:确定测…