android播放器1004,Android音频开发MediaPlayer(-38,0)(-1004)错误解决-程序员宅基地

技术标签: android播放器1004  

最近在开发音视频,我用的都是mediaplayer,有时会出现error(-38, 0),MediaPlayer: stop called in state 0 或者是其它错误,应该是在还未就绪的情况下调用了start导致发生-38。

在播放视频的过程中时候,如果缓冲的部分播完了,而没有继续缓冲视频而播放就会报error(1, -1004),当报完错之后,播放器不会再继续自动缓冲播放。目前没有发现解决的办法,暂时的解决方案就是更换播放引擎,使用B站的开源播放器ijkplayer。

下面贴出我的初始化和销毁mediaplayer对象的代码。仅供参考

初始化方法(初始化完,在onPrepared里调用mMediaPlayer.start());

public void playPrepareAsync() {

try {

if (mUrl == null) {

return;

}

destoryMediaPlayer();

mMediaPlayer = new MediaPlayer();

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mMediaPlayer.setOnCompletionListener(this);

mMediaPlayer.setOnPreparedListener(this);

mMediaPlayer.setOnSeekCompleteListener(this);

mMediaPlayer.setOnErrorListener(this);

mMediaPlayer.setOnBufferingUpdateListener(this);

if (mUrl.startsWith("android.resource://")) {

mMediaPlayer.setDataSource(this, Uri.parse(mUrl));

} else {

mMediaPlayer.setDataSource(mUrl);

}

mMediaPlayer.prepareAsync();

} catch (IllegalArgumentException e) {

e.printStackTrace();

Log.e(TAG, "IllegalArgumentException无法播放" + mUrl);

} catch (IOException e) {

Log.e(TAG, "IOException无法播放" + mUrl);

e.printStackTrace();

} catch (Exception e) {

Log.e(TAG, "Exception无法播放" + mUrl);

setErrPlayState("" + "播放失败 " + e.toString());

}

}

public void destoryMediaPlayer() {

try {

if (mediaPlayer != null) {

mediaPlayer.setOnCompletionListener(null);

mediaPlayer.setOnPreparedListener(null);

mediaPlayer.reset();

mediaPlayer.release();

mediaPlayer = null;

}

} catch (Exception e) {

}

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29621655/article/details/117515055

智能推荐

Android的log保存到文件上查看_android log.v 存为文件-程序员宅基地

文章浏览阅读2.1w次。在调试的时候一般都是在logcat中看日志的信息,以便找出BUG和调试信息,但是如果在真机上的话不可能一直连接电脑查看日志,所以生成日志文件并保存,是一个比较普遍的需求,下面就是最近实现的一个例子。欢迎大家讨论并给出别的思路。 import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream_android log.v 存为文件

c语言--printf--scanf--运算符_c语言带运算scanf-程序员宅基地

文章浏览阅读1.4k次。printf将变量的内容输出到显示器。四种用法:printf("字符串\n");printf("输出控制符",输出参数);printf("输出控制符1 输出控制符2...",输出参数1,输出参数2); //输出控制符和输出参数个数必须一一对应printf("输出控制符 非输出控制符",输出参数,输出参数);以%开头一般都是输出控制符,输出控制符包含如下%d %ld %f %c %lf %x %X %#X %o %s为什么需要输出控制符。01组成的代码可以表示数据也可以表示指_c语言带运算scanf

初试 Kubernetes 动态卷配置使用 RBD 作为 StorageClass_failed to provision volume with storageclass-程序员宅基地

文章浏览阅读3.7k次。目录Kubernetes StorageClass 介绍环境、软件准备Kubernetes 使用 RBD 作为 StorageClass1、Kubernetes StorageClass 介绍Kubernetes 集群存储 PV 支持 Static 静态配置以及 Dynamic 动态配置,动态卷配置 (Dynamic provisioning) 可以根据需要动态的创建存储卷。我们知道,之前的静态配..._failed to provision volume with storageclass

三元组存放的稀疏矩阵的转置_三元组存储稀疏矩阵进行转置-程序员宅基地

文章浏览阅读1.7k次。稀疏矩阵: 非零元素很少,但是分布没有规律的矩阵。(即可以用三元组来存放每个非零元)。三元组顺序表的定义:#define size 3typedef int Elemtype;typedef struct{ int i,j;//非零元的行,列 Elemtype e;//非零元元素 }Triple;//三元组 typedef struct{ Triple date[size+1]..._三元组存储稀疏矩阵进行转置

java判断熟数字_java大牛须知道的25点-程序员宅基地

文章浏览阅读49次。1. 你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class、object、interaction以及statediagrams.2. 你需要学习Java语言的基础知识以及它的核心类库(collections、serialization、streams、networking、multithreading、reflection..._熟门熟码是什么数字

在DOS下输入C:fdisk/mbr 是什么意思?-程序员宅基地

文章浏览阅读543次。Fdisk是我们在硬盘分区时最常用的命令,但有的读者可能还不知道,Fdisk命令还有一个未公开参数/MBR,如果在DOS提示符下使用Fdisk /?不会发现此参数,但是这个参数却有很重要的作用,MBR是主引导记录(Master Boot Record)的缩写。那么,Fdisk /MBR是如何工作的呢?下面和各位读者共同学习一下。 先来看看主引导扇区,硬盘的零柱面零磁道..._在dos下用fdisk/mbr命令进行修复

随便推点

MSYS2安装和使用_pacman windows-程序员宅基地

文章浏览阅读546次,点赞14次,收藏12次。msys2是一款跨平台编译套件,它模拟linux编译环境,支持整合mingw32和mingw64,能很方便的在windows上对一些开源的linux工程进行编译运行。更重要的是它支持pacman包管理器;这意味着你可以很方便的安装所需要的软件包和开发库,而不需要自己去找源码编译。_pacman windows

JDK8 日期格式化_jdk date pattern-程序员宅基地

文章浏览阅读1w次。为什么要格式化我们中国人习惯 yyyy-MM-dd HH:mm:ss 这种格式的日期,但奈何框架是歪国大佬们写的,他们的日期格式与我们相差甚远,好在 Spring Boot 提供了 spring.jackson.date-format,但它只能格式化 java.util.Date。那么解决办法是什么呢?在 JDK8 中,一个新的重要特性就是引入了全新的时间和日期API,它被收录在 java..._jdk date pattern

不是python中用于开发用户界面的第三方库-Python计算生态习题(50题)-程序员宅基地

文章浏览阅读6k次,点赞3次,收藏36次。1、Python网络爬虫方向的第三方库是A. requestB. jiebaC.itchatD.time答案:A2、Python网络爬虫方向的第三方库是A、numpyB、scrapyC、ArcadeD、FGMK答案:B3、Python数据分析方向的第三方库是A、BokehB、dataswimC、scipyD、Gleam答案:C4、Python数据分析方向的第三方库是A、PlotlyB、PyQtDa..._python第三方库习题

线程的状态-Thread的状态包括:New、Runnable、Blocked、Waiting、Timed Waiting和Terminated_thread terminated-程序员宅基地

文章浏览阅读544次。在Java程序中,一个线程对象只能调用一次start()方法启动新线程,并在新线程中执行run()方法。一旦run()方法执行完毕,线程就结束了。因此,Java线程的状态有以下几种:New:新创建的线程,尚未执行; Runnable:运行中的线程,正在执行run()方法的Java代码; Blocked:运行中的线程,因为某些操作被阻塞而挂起; Waiting:运行中的线程,因为某些操作在等待中; Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待; Termina_thread terminated

【AI视野·今日CV 计算机视觉论文速览 第259期】Tue, 3 Oct 2023_humannorm: learning normal diffusion model for hig-程序员宅基地

文章浏览阅读543次。AI视野·今日CS.CV 计算机视觉论文速览Tue, 3 Oct 2023 (showing first 100 of 167 entries)Totally 100 papers上期速览更多精彩请移步主页Daily Computer Vision PapersGPT-Driver: Learning to Drive with GPT Authors Jiageng Mao, Yuxi Qian, Hang Zhao, Yue Wang我们提出了一种简单而有效的方法,可以将 O_humannorm: learning normal diffusion model for high-quality and realistic 3d

vivado仿真器文件没有针对VCS的,这个时候将ip文件夹下的sim 和simulation文件夹给到VCS就可以_vivado不支持vcs-程序员宅基地

文章浏览阅读1k次。这个时候将ip文件夹下的sim 和simulation文件夹给到VCS就可以_vivado不支持vcs

推荐文章

热门文章

相关标签