关于音频编解码这一块的内容,感觉就g729这个算法麻烦一点。

在网上查找资料关于g729有很多内容,大致也了解了一下。g729算法算是一个类,里面细分还有很多具体的东西,在ITU官网上下载的g729包里面,有各种各样的:g729a、g729b、g729c等等,自己实在是不知道该使用哪一个,仔细阅读了文档以后,才发现,g729a是适合自己的。具体来说,每个都实现的功能不同,有的算法中提供了关于码率选择,有的提供了VDA等功能,不过自己用不到,所以,就选择了g729a这个最基本的压缩算法。在网上搜索了一下,g729和g729a的区别在于:g729a的算法质量提高了,相当于g729的加强版,恩,就它了。

在linux下进行编译的时候,发现了一个问题:压缩后的文件,居然比压缩前的文件还大,我也是醉了。在网上搜索查资料,才发现,很多人在ITU下载的东西,编译后都遇到同样的问题。问题的关键在于如何优化。好吧,继续查找资料,我发现很资料关于优化这一块的内容,都是残缺不全的。这可是有点坑呀!想要去看的话,搜索:“g729算法 去串行化”即可。下面我是找了很长时间才找到的,是关于bits.c文件的修改,希望对大家有所帮助吧。

#include "stdafx.h"
#include "typedef.h"
#include "ld8a.h"
#include "tab_ld8a.h"static void bit2byte(Word16 para,int bitlen,unsigned char * bits,int bitpos) ;
static Word16 byte2bit(int bitlen,unsigned char * bits,int bitpos) ;void prm2bits_ld8k(Word16 *para,unsigned char *bits)
{int i;int bitpos = 0;for (i = 0;i<PRM_SIZE;i++){bit2byte(*para++,bitsno[i],bits,bitpos);bitpos+=bitsno[i];}}void bit2byte(Word16 para,int bitlen,unsigned char * bits,int bitpos)
{int i;int bit = 0;unsigned char newbyte = 0;unsigned char *p = bits + (bitpos / 8);for (i = 0 ;i<bitlen;i++){bit = (para >> (bitlen - i -1) ) &0x01;newbyte = (1 << (7-bitpos%8));if(bit == 1)*p |= newbyte;else*p &= ~newbyte;bitpos++;if (bitpos % 8 == 0)p++;}
}void bits2prm_ld8k(unsigned char *bits,Word16 *para)
{int i;int bitpos = 0;for (i = 0;i<PRM_SIZE;i++){*para++=byte2bit(bitsno[i],bits,bitpos);bitpos += bitsno[i];}}Word16 byte2bit(int bitlen,unsigned char * bits,int bitpos)
{int i;int bit = 0;Word16 newbyte = 0;Word16 value = 0;unsigned char *p = bits + (bitpos / 8);for (i = 0 ;i< bitlen;i++){bit = (*p >> (7 - bitpos % 8)) &0x01;if (bit == 1) {newbyte = (1<<(bitlen -i-1));value |= newbyte;}bitpos++;if(bitpos%8 == 0)p++;}  return value;
}

这是主要的东西,也是网上找的,其他细枝末节的东西我就不往上写了,需要的话,大家可以去搜索一下。而且自己已经测试过了,是可以进行16:1压缩的。
ps:我遇到了一个坑爹的问题,使用memcpy函数进行复制拷贝,可是当参数为char类型的时候,可以;参数为word16类型的时候,失败。好吧,可能是自己理解的不够!

g729编解码的总结相关推荐

  1. G711(PCM/PCMA/PCMU),G721,G723,G729等 音频编解码

    G711,G721,G723音频编解码,G729音频库,Android G711(PCMA/PCMU).G726.PCM音频转码到AAC,ffmpeg接收g723音频流,Android G726语音编 ...

  2. 语音编码分类及编解码标准

    G.711类型:Audio 制定者:ITU-T 所需频宽:64Kbps 特性:算法复杂度小,音质一般 优点:算法复杂度低,压缩比小(CD音质>400kbps),编解码延时最短(相对其它技术) 缺 ...

  3. 音频编码(三)——音频编解码标准

    PCMU(G.711U) 类型:Audio 制定者:ITU-T 所需频宽:64Kbps(90.4) 特性:PCMU和PCMA都能提供较好的语音质量,但是它们占用的带宽较高,需要64kbps. 优点:语 ...

  4. 走进音视频的世界——Opus编解码协议

    Opus是一种开源免费的音频编解码器,支持音乐和语音,具有低延时.带内FEC.DTX.PLC等特点,默认22.5ms延时,非常适用网络实时传输.官网:https://www.opus-codec.or ...

  5. pcma和pcmu pcm编码_语音编码分类及编解码标准

    G.711类型:Audio 制定者:ITU-T 所需频宽:64Kbps 特性:算法复杂度小,音质一般 优点:算法复杂度低,压缩比小(CD音质>400kbps),编解码延时最短(相对其它技术) 缺 ...

  6. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  7. 通过OpenSSL的接口实现Base64编解码

    对openssl genrsa产生的rsa私钥pem文件,使用普通的base64解码会有问题,如使用https://blog.csdn.net/fengbingchun/article/details ...

  8. FFmpeg在Windows上通过dshow编解码方式设置为mjpeg并实时显示测试代码

    Windows上默认的内置摄像头一般支持两种编解码格式:rawvideo和mjpeg.在调用FFmpeg接口时默认的采用rawvideo.这里通过DirectShow实现为mjpeg进行编解码. 通过 ...

  9. Linux下通过v4l2获取视频设备名、支持的编解码及视频size列表实现

    早些时候给出了在Windows下通过dshow获取视频设备信息的实现,包括获取视频设备名.获取每种视频设备支持的编解码格式列表.每种编解码格式支持的video size列表,见:https://blo ...

  10. 通过Windows DShow获取设备名、支持的编解码及视频size列表实现

    之前在https://blog.csdn.net/fengbingchun/article/details/102641967中介绍过通过DShow获取Camera视频的实现,即调用VideoCapt ...

最新文章

  1. 敏感词过滤的php代码,php实现敏感词过滤(Trie树)
  2. FIR仿真module_04
  3. python 机器学习管道_构建机器学习管道-第1部分
  4. MySQL JDBC驱动程序如何处理准备好的语句
  5. Java PropertyPermission newPermissionCollection()方法与示例
  6. idea远程调试修改代码_IDEA远程调试(Remote Debug)Java代码指南
  7. pthread_cleanup_push()/pthread_cleanup_pop()
  8. cakephp 1.3 Models
  9. 总结MyBatis+Spring的整合
  10. 关闭Oracle 11g的DPR特性
  11. 2010湖南省第六界程序设计大赛 B题 --弟弟的作业(nyoj663)
  12. 基于matlab的暴雨强度公式参数推求,小样本流域降雨强度公式和设计降雨分布的推求方法...
  13. 47名应届生毕业生,骗领49万杭州人才补贴!检察机关建议从宽处理
  14. 无人驾驶公司大全(原无人驾驶龙虎榜)
  15. PhotoShop 快速选择工具及选择并遮住使用
  16. 在CAD中插入谷歌地球卫星地图
  17. python基础学习笔记12:Python面向对象编程
  18. pl/sql---存储过程
  19. 3---条形图(matplotlib)
  20. 台达-canopen操作

热门文章

  1. 富士通服务器操作系统安装,U盘为富士通LIFEBOOK SH760笔记本安装原版win7系统教程...
  2. 如何在批处理/ cmd中“注释掉”(添加注释)?
  3. 移动办公系统全自动加密和数字签名解决方案
  4. Git过程中遇到Enter passphrase for key '/c/Users/XXX/.ssh/id_rsa':
  5. WEB 系统架构演变
  6. 深度时空3D卷积神经网络用于交通预测
  7. 视频专辑:LAMP兄弟连李明老师2011年新版原创Linux视频教程
  8. 利用Scrapy爬取豆瓣电影
  9. 微信、QQ防撤回神器,终于被我找到了......
  10. vue实现点击复制文本功能