版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzehn/article/details/89026676
今天写一篇介绍ijkplayer播放器的文章,同时也作为自己学习ijkplayer的记录和总结。言归正传,ijkplayer可以说是当今移动端播放器界的新宠,简单的接口设计,跨平台支持(同时支持IOS和Android),而且还开源,支持二次开发,基于这些优点,ijkplayer深受广大移动端音视频开发工作者的喜爱。
pause()是ijkplayer暂停播放内容的接口方法,其调用顺序如下图所示:
ijkmp_pause_l()方法的实现:
static int ijkmp_pause_l(IjkMediaPlayer *mp)
{
assert(mp);
MP_RET_IF_FAILED(ikjmp_chkst_pause_l(mp->mp_state));
ffp_remove_msg(mp->ffplayer, FFP_REQ_START);
ffp_remove_msg(mp->ffplayer, FFP_REQ_PAUSE);
ffp_notify_msg1(mp->ffplayer, FFP_REQ_PAUSE);
return 0;
}
其中有个有意思的地方,不知道是不是ijkplayer维护者手抖的原因,在函数命名上有个明显的错误,我始终感觉,调用的ikjmp_chkst_pause_l()方法的名字应该是ijkmp_chkst_pause_l(),把ijk写成ikj应该不是有意为之。好了,言归正传,看一看它的具体实现:
static int ikjmp_chkst_pause_l(int mp_state)
{
MPST_RET_IF_EQ(mp_state, MP_STATE_IDLE);
MPST_RET_IF_EQ(mp_state, MP_STATE_INITIALIZED);
MPST_RET_IF_EQ(mp_state, MP_STATE_ASYNC_PREPARING);
// MPST_RET_IF_EQ(mp_state, MP_STATE_PREPARED);
// MPST_RET_IF_EQ(mp_state, MP_STATE_STARTED);
// MPST_RET_IF_EQ(mp_state, MP_STATE_PAUSED);
// MPST_RET_IF_EQ(mp_state, MP_STATE_COMPLETED);
MPST_RET_IF_EQ(mp_state, MP_STATE_STOPPED);
MPST_RET_IF_EQ(mp_state, MP_STATE_ERROR);
MPST_RET_IF_EQ(mp_state, MP_STATE_END);
return 0;
}
可以看出,函数的作用就是状态判断。