android播放器MediaPlayer快进报错error (-2147483648, 0)&error (-38, 0),分析log解决问题

本文分析了Android MediaPlayer在快进操作时遇到的两个错误:(-2147483648, 0)和(-38, 0)。错误1可能由于在onSeekComplete后执行了不必要的pause操作。根据MediaPlayer状态机,直接在开始状态下执行seekTo是允许的。修复方法是移除seekTo后的pause调用和onSeekComplete后的start调用。错误2是由于错误1导致的,当MediaPlayer无效时尝试获取duration。解决方案是理解错误来源并根据MediaPlayer的工作原理来修复。" 48286691,5101559,iOS开发:轻松获取UUID指南,"['iOS开发', 'Swift', 'UUID']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

=================================================
01-02 09:43:00.842: E/tips(6475): ************setViewSeekTo: opCode:1003;curPos:8935;desPos:10635
01-02 09:43:00.842: E/tips(6475): seekTo:10635
01-02 09:43:00.842: V/MediaPlayer(6475): getDuration
01-02 09:43:00.842: V/MediaPlayer(6475): seekTo 10635
01-02 09:43:00.842: V/MediaPlayer(6475): Seek in progress - queue up seekTo[10635]
01-02 09:43:00.842: V/MediaPlayer(6475): isPlaying: 0
01-02 09:43:00.852: V/MediaPlayer(6475): message received msg=200, ext1=1005, ext2=0
01-02 09:43:00.852: W/MediaPlayer(6475): info/warning (1005, 0)
01-02 09:43:00.852: V/MediaPlayer(6475): callback application
01-02 09:43:00.852: V/MediaPlayer(6475): back from callback
01-02 09:43:00.862: V/MediaPlayer(6475): Using cached seek position: 10635
01-02 09:43:00.862: E/tips(6475): ************onSeekComplete: mLastOpCode:1003;curPos:10635
01-02 09:43:00.862: V/MediaPlayer(6475): start
01-02 09:43:01.092: D/skia(6475): failed to malloc mmz memory:230 kbytes
01-02 09:43:01.112: D/skia(6475): failed to malloc mmz memory:4 kbytes
01-02 09:43:01.122: I/MediaPlayer(6475): Info (1005,0)
01-02 09:43:01.132: V/MediaPlayer(6475): isPlaying: 1
01-02 09:43:01.132: V/MediaPlayer(6475): isPlaying: 1
01-02 09:43:01.132: V/MediaPlayer(6475): pause
01-02 09:43:01.132: V/MediaPlayer(6475): message received msg=100, ext1=-2147483648, ext2=0
01-02 09:43:01.132: E/MediaPlayer(6475): error (-2147483648, 0)
01-02 09:43:01.132: V/MediaPlayer(6475): callback application
01-02 09:43:01.132: V/MediaPlayer(6475): back from callback
01-02 09:43:01.142: V/MediaPlayer(6475): Using cached seek position: 10635
01-02 09:43:01.142: E/tips(6475): ************setViewSeekTo: opCode:1003;curPos:10635;desPos:12335
01-02 09:43:01.142: E/tips(6475): seekTo:12335
01-02 09:43:01.142: V/MediaPlayer(6475): getDuration
01-02 09:43:01.142: E/MediaPlayer(6475): Attempt to call getDuration without a valid mediaplayer
01-02 09:43:01.142: V/MediaPlayer(6475): message received msg=100, ext1=-38, ext2=0
01-02 09:43:01.142: E/MediaPlayer(6475): error (-38, 0)
01-02 09:43:01.142: V/MediaPlayer(6475): callback application
01-02 09:43:01.142: V/MediaPlayer(6475): back from callback
01-02 09:43:01.142: I/tips(6475): seekTo: mCanPause=true
01-02 09:43:01.142: I/tips(6475): seekTo: mCanSeekBack=true
01-02 09:43:01.142: I/tips(6475): seekTo: mCanSeekForward=true
01-02 09:43:01.142: V/MediaPlayer(6475): seekTo 12335
01-02 09:43:01.142: E/MediaPlayer(6475): Attempt to perform seekTo in wrong state: mPlayer=0x5ec860, mCurrentState=0
01-02 09:43:01.142: V/MediaPlayer(6475): message received msg=100, ext1=-38, ext2=0
01-02 09:43:01.142: E/MediaPlayer(6475): error (-38, 0)
01-02 09:43:01.142: V/MediaPlayer(6475): callback application
01-02 09:43:01.142: V/MediaPlayer(6475): back from callback
01-02 09:43:01.142: V/MediaPlayer(6475): isPlaying: 1
01-02 09:43:01.142: V/MediaPlayer(6475): pause
01-02 09:43:01.142: E/MediaPlayer(6475): pause called in state 0
01-02 09:43:01.142: V/MediaPlayer(6475): message received msg=100, ext1=-38, ext2=0
01-02 09:43:01.142: E/MediaPlayer(6475): error (-38, 0)
01-02 09:43:01.142: V/MediaPlayer(6475): callback application
01-02 09:43:01.152: V/MediaPlayer(6475): back from callback
01-02 09:43:01.152: E/MediaPlayer(6475): Error (-2147483648,0)
01-02 09:43:01.152: D/VideoPlayer(6475): Error: -2147483648,0
01-02 09:43:01.332: D/skia(6475): failed to malloc mmz memory:67 kbytes
01-02 09:43:01.362: E/MediaPlayer(6475): Error (-38,0)
01-02 09:43:01.362: D/VideoPlayer(6475): Error: -38,0
01-02 09:43:01.372: E/MediaPlayer(6475): Error (-38,0)
01-02 09:43:01.372: D/VideoPlayer(6475): Error: -38,0
01-02 09:43:01.372: E/MediaPlayer(6475): Error (-38,0)
01-02 09:43:01.372: D/VideoPlayer(6475): Error: -38,0
01-02 09:43:01.382: D/skia(6475): failed to malloc mmz memory:230 kbytes
01-02 09:43:01.382: D/skia(6475): failed to malloc mmz memory:4 kbytes
=================================================

代码流程:
1.seekTo函数
mMediaPlayer.seekTo(sec);
mMediaPlayer.pause(); 
2.  onSeekComplete函数
mMediaPlayer.start();  
 
错误1:
01-02 09:43:01.132: E/MediaPlayer(6475): error (-2147483648, 0)

分析log,在  onSeekComplete之后,执行了start和pause(异步操作,延迟到onSeekComplete之后才执行 )操作,产生了错误,所以有可能是因为pause引起的错误。
由MediaPlayer状态机( http://blog.youkuaiyun.com/thl789/article/details/7370438 ),我们可以知道,在Started的状态下是可以直接执行seekTo操作。
代码修改方式如下:
1.在seekTo之后,去掉 mMediaPlayer.pause();  
2.在 onSeekComplete之后,去掉 mMediaPlayer.start();   
测试播放快进正常,修改正确。

错误2
01-02 09:43:01.142: V/MediaPlayer(6475): getDuration
01-02 09:43:01.142: E/MediaPlayer(6475): Attempt to call getDuration without a valid mediaplayer
01-02 09:43:01.142: V/MediaPlayer(6475): message received msg=100, ext1=-38, ext2=0
01-02 09:43:01.142: E/MediaPlayer(6475): error (-38, 0)
错误2 是由于错误1产生后引起的错误。


解决这个错误的过程告诉我们解决问题的方法:
1.先通过log错误查找百度,有现成方案可直接使用。
2.在没有现成的解决方案的情况下, 先了解原理,然后再对应原理分析log错误,找到引起问题的原因,进而获得解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值