g711a音频编码记录

45 篇文章 0 订阅
2 篇文章 0 订阅

写了个安卓wav pcm http直播流的程序。客户端采用sdl2 直接播放pcm.工作的很好,但是,非常耗费带宽

差不多100kb/s的网速。非常不利于外网的音频传输。尝试用zlib压缩,效果不尽理想。只压缩成90%。节约了1/10带宽

遂放弃。尝试了安卓端mp3直播,效果不错,差不多带宽30kb/s 。但是mp3有个很大的问题,就是延迟增大了几秒。研究了下

wav压缩音频格式,发觉还有g711a,这个算法比较简单,就是将short的音频数据压缩成byte。空间节约了一半,网络传输就可以达到50kb/s。经过几个小时的捣鼓,实验成功了。下面记录下关键代码。

安卓端。

wav头 原来音频格式是1 表示pcm 现在改成6 表示g711a

 header[20] = 6;  //这个表示a law PCM

 

采集音频

    short[] inG711Buffer = new short[minBufferSize];
                    byte[] outG711Buffer = new byte[minBufferSize];
                    int nReadBytes = aRecord.read(inG711Buffer,0,inG711Buffer.length);
                    G711Code.G711aEncoder(inG711Buffer,outG711Buffer,nReadBytes); // g711编码pcm
                     
                    SocketS.send2All(outG711Buffer,nReadBytes); 


    

c++

//解压第一个参数的g711数据给pcm
        decode(g711_buffer, pcm, g711_buffer_size , G711_A_LAW);

       audio_pos = (Uint8 *)pcm;
        //Audio buffer length 
        audio_len = g711_buffer_size *2 ;
        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值