MediaPlayer error(-38, 0) 异常处理

news2024/10/6 4:13:31

文章目录

  • 1、参考资料
  • 2、业务背景
  • 3、解决方案

1、参考资料

Media Player called in state 0, error (-38,0)
MediaPlayer的使用

2、业务背景

  • 对时长超过 5s 的音频提供裁剪、试听功能,裁剪、试听最大时长均为 5s。当视频长度在 5s ~ 6s 之间,试听暂停时,可能整个音频播放完成了,此时会回调 onCompletion 方法,试听封装类会在播放完成后调用 reset 方法。此时,再次点击播放试听,调用 start 方法时,播放无声音。
  • new MediaPlayer() 或者 任何状态调用了 reset 方法之后, 进入 Idle (闲置) 状态
private fun playPrepare(audioPath: String?) {
    audioPath ?: return
    MLog.d(TAG, "playAudio: audioPath = $audioPath")
    if (mediaPlayer == null) {
        mediaPlayer = ListenKit.instance
        mediaPlayer?.play(audioPath, startNow = false, listener = object : ListenKit.Listener {
            override fun onPrepared() {
                MLog.d(TAG, "playAudio: onPrepared currentCutStartTime = $currentCutStartTime")
            }

            override fun onCompletion() {
                MLog.d(TAG, "playAudio: onCompletion")
            }
        })
    }
}

private fun playAudio(audioPath: String?) {
    ...
    mediaPlayer?.start()
    ...
}

private fun stopAudioIfNeed() {
    MLog.d(TAG, "stopAudioIfNeed: isPlaying = $isPlaying")
    if (isPlaying) {
        ...
        mediaPlayer?.pause()
        ...
    }
}

3、解决方案

  • 在试听结束后添加 seekTo 代码,避免播放完成,即可避免在 reset 之后调用 start 导致播放异常
private fun stopAudioIfNeed() {
    MLog.d(TAG, "stopAudioIfNeed: isPlaying = $isPlaying")
    if (isPlaying) {
        ...
        mediaPlayer?.pause()
        // 针对时长在 5s~6s 之间的音频,若播放完成,会回调 onCompletion 方法,此时再调用 start,播放无声音,出现下面的信息:
        // Attempt to perform seekTo in wrong state: mPlayer=0x0, mCurrentState=1
        // error (-38, 0)
        mediaPlayer?.seekToPosition(0) // 注意!!!
        ...
    }
}

PlaybackCompleted 状态转移 : 如果设置了循环模式SetLooping(), 那么播放完毕之后会重新进入Started状态;若没设置循环,则调用 OnCompletion.onCompletion() 回调方法, MediaPlayer 会进入 PlaybackCompleted 状态;
也可以在该状态直接调用start()进入Started状态
image

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

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

相关文章

Flink on yarn任务日志怎么看

1、jobmanager日志 在yarn上可以直接看 2、taskmanager日志 在flink的webui中可以看,但是flink任务失败后,webui就不存在了,那怎么看? 这是jobmanager的地址 hadoop02:19888/jobhistory/logs/hadoop02:45454/container_e03_16844…

Apache应用和配置

目录 构建虚拟 Web 主机基于域名的虚拟主机基于IP地址的虚拟主机基于端口的虚拟主机 Apache 连接保持构建Web虚拟目录与用户授权限制Apache 日志分割 构建虚拟 Web 主机 虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中每一个站点实际上并不独立占用整个服务…

【发电机、输变电JDL-5400A 电流继电器 报警信号切除故障JOSEF约瑟】

名称:电流继电器;品牌:JOSEF约瑟;型号:JDL-5400A;触点容量:250V2A;返回时间:≤35ms;整定范围:0.03-19.9A;特点:返回系数高…

应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信

一 背景 OPC(OLE for Process Control,用于过程控制的OLE)是工业自动化领域中常见的通信协议。它提供了一种标准化的方式,使得不同厂商的设备和软件可互相通信和交换数据。OPC Classic是旧版OPC规范,通过使用COM&…

LabVIEWCompactRIO 开发指南第六章42

LabVIEWCompactRIO 开发指南第六章42 要使用用户控制的I/O示例方法进行编程,请按照以下步骤操作,这些步骤引用了图6.9中的示例程序。 初始化进程 1.调用重置I/O函数。此调用完成后,模块已准备好使用用户控制的I/O采样函数执行采集。必须首…

财务共享五大价值助力央企构建世界一流财务管理体系

如果说小微企业是我国市场经济的毛细血管的话,那么央企就是承载着我国市场发展的主动脉。以规模为导向来看,央企完成了第一次长征,但央企在盈利能力、市场份额、行业地位、专利技术与优势、品牌影响力、市值管理、标准和规则制定话语权等软实…

从1万张模板中找的运营知识图谱,超级牛!

运营现在是时下大家都很熟悉的一个行业,我们熟知的有内容运营、用户运营、产品运营、新媒体运营、活动运营 社群运营、电商运营、品牌运营等多种运营方式。 想要做好运营,其实是需要很丰富的知识体系的,今天就给大家分享一些厉害的运营图谱。…

英伟达曝光超级芯片 黄仁勋:AI已重塑计算机产业

5月29日,英伟达再曝新品“NVIDIA DGX™超级计算机”,为生成式AI语言应用、推荐系统和数据分析工作负载的巨型模型提供硬件支持。 该计算机的核心组件是已经全面投产的英伟达Grace Hopper超级芯片——2000 亿个晶体管,在同一封装内集成了72核…

TC-PERM系列 单/双通道消光比测试仪

单/双通道消光比测试仪可独立进行偏振消光比测试、光功率测试、数字调零、数字校准、手动或自动选择量程,配备 USB(RS232) 接口,上位机软件可自动进行数据测试、 记录、分析,可方便地组成自动测试系统。 广泛应用于光通信设备、光纤、光无源器…

Deep Frequency Filtering for Domain Generalization论文阅读笔记

这是CVPR2023的一篇论文,讲的是在频域做domain generalization,找到频域中generalizable的分量enhance它,suppress那些影响generalization的分量 DG是一个研究模型泛化性的领域,尝试通过各自方法使得模型在未见过的测试集上有良好…

zabbix监控山石防火墙

一、导入监控模板 <Template Net Hillstone StoneOS SNMPv2> 导入前请确保zabbix内置的模板Template Net Network Generic Device SNMPv2存在。 支持山石E系列和X系列防火墙 兼容Zabbix 4.x和5.x。 二、监控内容 SNMP状态和接口速率由Template Net Network Generic De…

2023年互联网Java工程师高级面试八股文汇总(1260道题目附解析)

今年的行情&#xff0c;让招聘面试变得雪上加霜。已经有不少大厂&#xff0c;如腾讯、字节跳动的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言&#xff0c;甚至失去了难得的机会。 现如今&#xff0c;情…

基于imx8m plus开发板全体系开发教程5:Cortex-M7开发

前言&#xff1a; i.MX8M Plus 开发板是一款拥有 4 个 Cortex-A53 核心&#xff0c;运行频率 1.8GHz;1 个 Cortex-M7 核心&#xff0c;运行频率 800MHz;此外还集成了一个 2.3 TOPS 的 NPU&#xff0c;大大加速机器学习推理。 全文所使用的开发平台均为与NXP官方合作的FS-IMX8…

Linux Apache 网页优化【网页压缩 网页缓存 隐藏版本号 防盗链】

Apache 网页与安全优化 在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的配置已经不适用当今互联网时代。 为了适应企业需求&#xff0c;就需要考虑如何提升Apa…

网络安全合规-数据分类分级(三)

概念定义 数据分类分级应该将分类和分级分开进行理解。 分类指根据数据的用途和含义去定义数据。更偏向数据治理&#xff0c;而非数据安全治理。 分级指依据数据分类的结果以及数据价值对数据进行分级。是数据安全治理的范畴。 分级类别及依据目前大部分标准将分级定义为核心、…

代码自动生成:低代码与人工智能。

代码自动生成&#xff1a;低代码与人工智能TOC 在当前gpt大行其道的情况下&#xff0c;很多人都对自动生成代码感兴趣。这里将讨论一些与代码自动生成有关的话题&#xff1a; 严格的、闭包的、无歧义的范式系统是代码自动生成的前提与保障&#xff0c;没有这样的范式系统&…

微服务框架01--了解了解Spring Cloud

1.Spring Cloud简介 Spring Cloud是基于Spring Boot的一整套实现微服务的框架。他提供了微服 务开发所需的配置管理、服务注册与发现、断路器、智能路由、微代理、控制 总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是跟 Spring Boot框架一起使用的话&am…

有哪些代码编辑器可以推荐? - 易智编译EaseEditing

以下是一些常用的代码编辑器&#xff0c;并对它们进行简单介绍&#xff1a; Visual Studio Code&#xff1a; Visual Studio Code&#xff08;简称VS Code&#xff09;是由微软开发的免费、跨平台的代码编辑器。 它具有丰富的功能和插件生态系统&#xff0c;支持多种编程语言…

Ansible自动化工具离线部署K8s【1.27版本】

文章目录 一、前提须知二、使用Ansible部署K8S集群步骤三、拓展内容1、添加多个Node节点 一、前提须知 单Master&#xff0c;多Node部署架构需要主机网络互通&#xff0c;没有网络限制需要使用root用户权限进行部署 二、使用Ansible部署K8S集群步骤 第一步&#xff1a;获取离…

通过Nginx来查看Linux中的文件

环境是Centos7.6 一、下载Nginx rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm yum install -y nginx 二、配置nginx.conf 用yum下载的软件安装的地方比较散&#xff0c;建议多用find查找 cd /etc/nginx vim ng…