美文网首页
Android多媒体框架--10:stop/pause/resu

Android多媒体框架--10:stop/pause/resu

作者: DarcyZhou | 来源:发表于2023-04-24 08:17 被阅读0次

  相对于start,stop/pause/resume就相对比较简单,主要是通过控制GenericSource中的状态值。

void NuPlayer::GenericSource::stop() {
    mStarted = false;
}

void NuPlayer::GenericSource::pause() {
    mStarted = false;
}

void NuPlayer::GenericSource::resume() {
    mStarted = true;

    (new AMessage(kWhatResume, this))->post();
}

停止、暂停、恢复几个动作,相关函数中仅是改变mStarted,其它几乎什么事情都没做。

  • 播放器的暂停:表示的是暂停播放;

  • 解封装模块的暂停:表示暂停将读取并缓存好的数据提供给播放器,这一点同样适用于停止,恢复和start则相反。

  所以,不管是停止、暂停还是恢复的函数,关键都不在函数本身,而在于mStarted变量对于向外提供数据的函数的影响,也就是dequeueAccessUnit(对应start中queueAccessUnit方法)。

01.png
status_t NuPlayer::GenericSource::dequeueAccessUnit(
        bool audio, sp<ABuffer> *accessUnit) {
    if (audio && !mStarted) { // 如果是音频,并且mStarted为false,则不提供数据,返回block
        return -EWOULDBLOCK;
    }
    // ...
}

该函数用于为播放器提供原始媒体数据,audio表示是否为音频,accessUnit则是需要填充的buffer指针。

  可以看到,如果GenericSource::stop()或者GenericSource::pause()函数调用后,mStarted变为了false,那么播放器将无法得到媒体数据,也就无法播放了。如果是视频还是可以从该函数中获取数据,但对于播放器而言,视频和音频肯定是同时播放,如果没了音频,视频也不会独活的。

相关文章

网友评论

      本文标题:Android多媒体框架--10:stop/pause/resu

      本文链接:https://www.haomeiwen.com/subject/wafiddtx.html