美文网首页
音视频学习(五)

音视频学习(五)

作者: 主音King | 来源:发表于2020-08-06 11:57 被阅读0次

音频编码

  • WAV编码
    是在PCM数据格式的前面加44个字节,分别用来存储PCM的采样率、声道数、数据格式等信息
    特点:音质好,大量软件支持
    场景:多媒体开发中间文件、保存音乐和音效素材

  • MP3编码
    使用LAME编码(MP3编码格式的一种实现)中高码率的MP3文件,听感接近WAV文件。
    特点:音质128Kbit/s 压缩比比较高,大量软件和硬件支持,兼容性好
    场景:高比特率下对兼容性有要求。

  • AAC编码
    新一代音频有损压缩技术,附加的编码技术(PS、SBR)等,衍生出LC-AAC、HE-AAC、HE-AAC v2三种主要编码格式。
    特点:在小于128Kbit/s码率表现优异,多用于视频中音频编码
    场景:128Kbit/s一下的音频编码,多用于视频音频轨的编码。

  • Ogg编码
    潜力编码,音质好,完全免费。支持情况不好,无法和MP3相比。
    特点:比MP3更小的码率实现比MP3更好的音质,兼容性不好,流媒体特性不支持
    场景:语言聊天音频消息场景

Android平台音频渲染

AudioTrack

是Android SDK提供最底层音频播放API,允许输入裸数据PCM。和MediaPlayer相比,压缩的音频文件(MP3、AAC等),只需要自行解码操作和缓冲区控制。
1、配置AudioTrack

public AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat,
            int bufferSizeInBytes, int mode)

streamType:多种音频管理策略,定义在AudioManager中

    /**电话铃声 */
    public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;
    /** 系统铃声 */
    public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;
    /** 铃声*/
    public static final int STREAM_RING = AudioSystem.STREAM_RING;
    /** 音乐声 */
    public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
    /** 警告声 */
    public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;
    /** 通知声 */
    public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;

sampleRateInHz:采样率,可选:8000, 16000, 22050, 24000, 32000, 44100, 48000等。

channelConfig:声道数的配置,常量在AudioFormat中,CHANNEL_IN_MONO(单声道)、CHANNEL_IN_STEREO(双声道), 建议采用单声道。

audioFormat:数据位宽,即采样格式,常量定义在AudioFormat中,ENCODING_PCM_16BIT(兼容所有手机)、ENCODING_PCM_8BIT

bufferSizeInBytes:配置内部音频缓冲区大小,AudioTrack提供bufferSizeInBytes函数 getMinBufferSize,建议该函数计算大小,不要手动计算。
mode:AudioTrack提供两种播放模式,在AudioTrack中定义MODE_STATIC,需要一次性写入缓冲区,简单高效,用于播放铃声、系统提醒音频片段;另一个MODE_STREAM,需要按照一定时间间隔不断写入音频数据,理论可以应用任何音频播放场景。
Play:

//当前播放实例是否初始化成功,如果处于初始化成功的状态并且未播放的状态,那么就调用 play
if (null != mAudioTrack && mAudioTrack.getState() != AudioTrack.STATE_UNINITIALIZED && mAudioTrack.getPlayState() != PLAYSTATE_PLAYING)
   mAudioTrack.play();

OpenSL ES使用

Open Sound Library for Embedded System 嵌入式音频加速标准。
是无授权、跨平台、针对嵌入式硬件音频加速API,提供标准、高性能、低响应时间音频功能实现方法,实现了软/硬音频性能的直接跨平台部署,降低执行标准,促进高音频市场发展。


image.png

总结

一些基础知识和AudioTrack以及OpenSL ES渲染裸流音频数据。

相关文章

网友评论

      本文标题:音视频学习(五)

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