V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
haoyh1
V2EX  ›  程序员

这么多音频编码,蜂窝的 AMR, BT 的 SBC,除此之外还有 mp3, aac 这些比较通用的,它们都是由什么硬件实现的?

  •  
  •   haoyh1 · 2022-01-22 00:53:58 +08:00 · 2374 次点击
    这是一个创建于 1072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    尤其是 amr ,难道是用基带解码的? 我看微信也是用的 amr ,但微信很难调用到这么底层吧 如果用 cpu 那岂不是就软解了

    9 条回复    2022-01-22 17:31:37 +08:00
    ferock
        1
    ferock  
       2022-01-22 01:23:31 +08:00 via iPhone
    码率不高软解也没太大问题…毕竟 64k 就可以听个响了,128k 属于可用音质了,比起视频动不动 800kps 或者 2000kps ,这个比特率太低了
    kkocdko
        2
    kkocdko  
       2022-01-22 01:42:45 +08:00
    大多数是软解,比如 mp3 的 lame 软解就足够快了,编码也很快的,在现代 cpu 上不算个事
    yyfearth
        3
    yyfearth  
       2022-01-22 04:06:15 +08:00
    这些编码软件当时 CPU 都没问题 现在的 CPU 更是轻松
    不过现在很多 CPU 或者硬件会有带硬件加速可以 硬解 SBC AAC AC3 这些了
    硬解也只要调用系统的 API 就可以实现 只要做好系统兼容性就好 具体软件不需要操心
    Borden
        4
    Borden  
       2022-01-22 04:21:32 +08:00
    虽然没研究过,但是我想有 api 可以调的吧,coreAudio 啥的,然后系统库提交给硬件 codec 。
    deanguqiang
        5
    deanguqiang  
       2022-01-22 08:14:03 +08:00 via iPhone
    这些 codec 最简单的 arm cm4 来软解都毫无压力
    mxalbert1996
        6
    mxalbert1996  
       2022-01-22 11:10:21 +08:00 via Android
    音频编码的复杂度根本不需要硬解
    cev2
        7
    cev2  
       2022-01-22 13:27:31 +08:00   ❤️ 3
    首先,第一个问题,威信用的可不是 amr 格式,amr 扩展名可能是为了历史兼容保留的,实际是 silk 格式,所以你如果用标准 amr 的音频播放软件是打不开威信的 amr 文件的。
    其次,安卓呢给你提供了两个大宝贝 API ,一个叫 MediaCodec ,一个叫 AudioTrack ,这俩呢先一边等会儿。
    然后,你手机如果是联发哥的呢,发哥会给你在系统中预装很多编解码器,比如 omx.mtk.xxx 。要是糕通的呢,通哥也会给你预装一堆 omx.qcom.xxx 。然后安卓是谷哥的嘛,谷哥也会给你预装一堆 omx.google.xxx 。再就是你的手机是 vivi 牌的,爱爱也会给你预装一堆 omx.vivi.xxx 。反正嘛,硬件厂商给你预装的编解码器呢大概率就是它芯片能支持的硬解码器,像谷歌这样的软件厂商呢给你预装的大概率就是软解码实现,当然也不绝对,看它们喜好。
    最后轮到威信,威信播放语音信息时就有很多种选择了,威信可以选择:
    ①威信直接把 silk 格式的文件丢给 MediaCodec ,MediaCodec 呢就顺着上面系统注册了的解码器挨个找,诶,找到一个 omx.mtk.opus.decoder 的解码器,这个解码器是发哥提供的,然后解码工作就丢给了发哥的芯片去硬解。如果找到了一个 omx.google.opus.decoder 的解码器,这是谷哥提供的,然后解码工作就交给了软件实现的解码器去软解。
    ②威信把文件丢给 MediaCodec 后,MediaCodec 找了一圈“这解码,多是一件美事儿啊”,没有找到任何支持此格式的解码器。那就是系统解码不了呗,威信通过内置的 silk 库把 silk 格式的 amr 文件自己解码为 PCM ,然后把 PCM 流丢给 AudioTrack 剩下的安卓就给你完成了,这也是软解。
    这些呢,都是我瞎说的。
    icyalala
        8
    icyalala  
       2022-01-22 13:31:20 +08:00   ❤️ 1
    一个是这种程度的编解码计算量都太小,没必要
    二个是如果没有性能压力,为了保证跨平台一致性,微信喜欢用 C/C++ 自己写基础库
    xsen
        9
    xsen  
       2022-01-22 17:31:37 +08:00
    音频一般都是软编软解,因为数据量小,对 cpu 的消耗差不多可以忽略不计

    对于音频来说,编解码一致都不会是难点;更难的是音频的前后处理,最复杂、最难的应该是回音
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2627 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.