音频格式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;
  }


目录
相关文章
|
6月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
204 0
|
6月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
228 0
|
1月前
|
存储 C++ 内存技术
解码mp4文件分别存储为pcm,yuv文件
使用FFmpeg库在C++中解码MP4文件,并将音频数据存储为PCM格式,视频数据存储为YUV格式。
24 3
解码mp4文件分别存储为pcm,yuv文件
|
1月前
|
内存技术
解码AAC裸流为PCM写入文件
使用FFmpeg库将AAC裸流解码为PCM数据并写入文件的过程。
55 4
|
1月前
|
编解码
解码AVC(h264)裸流为yuv420P写入文件
本文介绍了如何使用FFmpeg库解码AVC(H.264)裸流为YUV420P格式并写入文件的过程。
20 2
|
6月前
|
存储 缓存 编解码
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(一)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
207 0
|
内存技术
音频格式G711转PCM的代码
音频格式G711转PCM的代码
290 0
|
安全 Java 语音技术
将mp3格式的音频转换为采样率8k的wav
将mp3格式的音频转换为采样率8k的wav
522 0
|
编解码 算法 数据格式
iOS音视频开发 - 音频编码格式(pcm、wav、mp3、aac、ogg)
我们通常从音乐App(如:网易云音乐)听歌时,会看到一首歌需要的存储空间大概是10M左右,对于手机磁盘来说这是可以接受的。但在网络中实时在线传播的话,这个数据量可能就太大了,所以必须对其进行压缩编码。
|
算法 Windows 内存技术
程序人生 - 音频格式 PCM、WAV、MP3 区别
程序人生 - 音频格式 PCM、WAV、MP3 区别
1480 0