=================================================
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错误,找到引起问题的原因,进而获得解决方案。
本文分析了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']
579

被折叠的 条评论
为什么被折叠?



