音频格式G711转PCM的代码

简介: 音频格式G711转PCM的代码

今天调试摄像头的音频格式,始终不对。原始音频为8000,16位,帧率50。每帧的数据应该是320字节。


 接收到手上,RTP包为171字节,数据为160,只有一半。这是怎么回事?一开始总是认为RTP接收有问题,反复核查确认代码及流程正确。那么就是格式进行了转换。什么格式?开始认为是AAC,后来发现不对,AAC压缩率更高。


 最后根据这个160、 320,搜索了一个,说G711会变成原来的一半。赶紧试试,果然成功。代码如下:

  public static byte[] convertG711ToPcm(byte[] g711Buffer, int length, byte[] pcmBuffer)
  {
    if (pcmBuffer == null)
    {
      pcmBuffer = new byte[length*2];
    }
    for (int i=0; i<length; i++)
    {
      byte alaw = g711Buffer[i];
      alaw ^= 0xD5;
      int sign     =  alaw & 0x80;
      int exponent = (alaw & 0x70) >> 4;
            // 这个移位多此一举?结果应该一直是8
      int value    = (alaw & 0x0F) >> 4 + 8;
      if (exponent != 0)
      {
        value += 0x0100;
      }
      if (exponent > 1)
      {
        value <<= (exponent - 1);
      }
      value = (char)((sign == 0 ? value : -value) & 0xFFFF);
      pcmBuffer[i*2+0] = (byte) (value      & 0xFF);
      pcmBuffer[i*2+1] = (byte) (value >> 8 & 0xFF);
    }
    return pcmBuffer;
  }


目录
相关文章
|
开发工具 git
【git 实用指南】git 修复错误提交,版本回退
【git 实用指南】git 修复错误提交,版本回退
247 1
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
587 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
编解码 Linux 开发者
初探FFplay:多媒体播放器的快速入门指南
【10月更文挑战第15天】FFplay是一个由FFmpeg项目提供的轻量级多媒体播放器,它使用FFmpeg库来解码和播放音频/视频流。FFplay非常适合那些想要深入了解多媒体编解码技术和音视频播放流程的开发者或爱好者。本文将介绍FFplay的基本功能、安装配置步骤以及如何使用命令行参数来播放多媒体文件。
1675 0
|
内存技术
音频格式G711转PCM的代码
音频格式G711转PCM的代码
474 0
|
11月前
|
人工智能 监控 算法
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
3D-Speaker是阿里巴巴通义实验室推出的多模态说话人识别开源项目,结合声学、语义和视觉信息,提供高精度的说话人识别和语种识别功能。项目包含工业级模型、训练和推理代码,以及大规模多设备、多距离、多方言的数据集,适用于多种应用场景。
2710 18
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
|
API 语音技术
基于Asterisk和TTS/ASR语音识别的配置示例
本文介绍了如何在Asterisk服务器上配置TTS(文本转语音)和ASR(自动语音识别)引擎,包括安装Asterisk、选择并配置TTS和ASR引擎、编辑Asterisk配置文件以实现语音识别和合成的功能,以及测试配置的有效性。具体步骤涉及下载安装包、编辑配置文件、设置API密钥等。
790 1
|
Linux
RPM 管理软件包的依赖关系
RPM 管理软件包的依赖关系
1199 1
|
机器学习/深度学习 数据采集 人工智能
使用Python和Scikit-learn实现机器学习分类任务
使用Python和Scikit-learn实现机器学习分类任务
442 1
|
SQL 监控 druid
MySQL连接池DataSource怎么使用?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,特别聚焦于阿里巴巴的DruidDataSource。DruidDataSource是一个高效的Java数据库连接池,包含监控、SQL防护和日志功能。文中通过示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成,并提到了启用SQL监控。此外,还分享了设置连接池参数的技巧,如合理设定初始、最大和最小连接数,并强调了定期监控和使用内置监控工具优化性能的重要性。
686 0
uniapp 安装插件 uView (多平台快速开发的UI框架)
uniapp 安装插件 uView (多平台快速开发的UI框架)
727 0