音频焦点

2021-08-11  本文已影响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自己验证一下;

上一篇下一篇

猜你喜欢

热点阅读