美文网首页
音频焦点

音频焦点

作者: 重新起步 | 来源:发表于2021-08-11 21:32 被阅读0次

    开发音视频的时候,都会遇到音频焦点的相关问题;那啥是音频焦点呢?
    我理解的音频焦点是,
    就像上课一样,老师问了一个问题,大家都可以回答问题,如果大家都在下面回答,那么7嘴8舌的,声音就很嘈杂,谁的都听不清,这个时候,老师会说,知道答案的举手,举手的同学很多,老师就会选择其中一个把话筒递给他回答,选中的这个回答完了,老师又会把话筒递给下一个举手回答的;在这个过程中,没有拿到话筒的学生能不能说话呢,依旧是可以的,只是我们按照惯例,没有话筒的学生需要肃静;所以音频焦点不是强制的,只是大家都遵守的一个规定;

    在上面的例子中,每一个学生就是一个音视频的app,老师就是audiomanager,学生举手,就是在申请音频焦点,话筒就是音频焦点。

    例如,
    1.我正在放qq音乐,如果此时我再播放腾讯视频,总不能放视频的同时,再播放这音乐,那么我们就听不清视频里的人物在说的是啥了,所以在播放腾讯视频前,会告诉audiomanager,腾讯视频要占用音频焦点了,audiomanager会通知qq音乐,你已经失去焦点了,那么失去焦点的qq音乐,就会去暂停自己的播放;

    2.我在用咕咚,然后打开喜马拉雅,我咕咚需要暂停吗,不需要,因为咕咚只会在固定的1公里,2公里进行短暂的播报,所以他在焦点丢失的时候,不需要去暂停;

    开发的时候,如果是使用mediaplayer ,我们需要自己去申请音频焦点,监听焦点的获取和丢失,这个一般有三种类型的焦点,网上百度有好多;其中一个是AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK,这种duck使用的场景主要是你播放视频的时候,来了一条短信,短信一般是叮咚一下就结束,所以短信申请的是duck类型的音频焦点,视频失去焦点的类型就是:AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK

    但是我们再开发VideoView的时候,又不太一样;下面是videoview提供的方法

     public void setAudioAttributes(@NonNull AudioAttributes attributes) {
            if (attributes == null) {
                throw new IllegalArgumentException("Illegal null AudioAttributes");
            }
            mAudioAttributes = attributes;
        }
    

    这个方法给我的感受就是videoview会自己管理音频焦点
    实际开发中,应该啥时候请求焦点,啥时候释放焦点?
    明天写个demo自己验证一下;

    相关文章

      网友评论

          本文标题:音频焦点

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