ios解析G711A

前段时间在做摄像头想关的项目的时候,在播放卡录得时候,摄像头返回来的数据的时候,发现返回来的音频的格式是将pcm编码成G711A的数据。所以只能将G711A转换为pcm,然后在进行播放。于是,就疯狂的在网上找资料。
但是,并没有找到G711A转pcm的相关资料。
于是,就开始研究编码格式.


先补充一下pcm和G711的编码方式
1)pcm
PCM是一种编码格式,pcm是裸流。
所以,pcm我们直接就能够就行播放


2)G711

编码原理请看这篇

在开始讲G711A转为pcm的时候,我们先了解一下pcm是怎么被转换为G711的。
以下的相互转换,都会用到一个三方库。


屏幕快照 2018-06-21 下午3.35.29.png

1)pcm-> G711
从上面的编码原理可以知道,pcm转G711是进行了压缩转换。
起压缩率为1:2, 即把16位数据压缩成8位

    NSUInteger datalength = [inputData length]; 
    Byte *byteData = (Byte *)[inputData bytes];   
    short *pPcm = (short *)byteData;  
    int outlen = 0;    
    int len =(int)datalength / 2;    
    Byte * G711Buff = (Byte *)malloc(len);    
    memset(G711Buff,0,len);   
    int i;    
    for (i=0; i

2)G711A->pcm
因为我们知道pcm转G711是将pcm进行了压缩,那么G711转pcm我们就需要将G711重新编码后,长度会增加会原来的两倍。

我收到的数据是char类型的buffer数据

dataPtr:(const char *)data_ptr

遍历收到的数据,解析每个字节

short * pcmOuT = (short *)(malloc(dataLen*2));//因为转换后长度为原来的两倍,所以申请一个数据长度两倍的数组
for (int i =0; i

这样解析出来的数据就是pcm。可以截止播放.
G711U转pcm也是类似的做法

你可能感兴趣的:(ios解析G711A)