标准G726音频解码和与H264视频封装为avi
avilib库并不能直接支持G726音频的封装,源码中只支持G711A、G711U和MULAW_PCM,但查看源码可发现,avilib其实也是将G711U等音频先解码为16位linear PCM,再将PCM与H264封装为avi格式音视频,从而实现G711U等与H264的封装。因此我们可以将G726先解码为linear PCM,再用avilib接口将音视频封装为avi文件。
线性PCM是最原始的音频数据,各种格式的音频都可以由线性PCM经过一系统压缩算法而得到。 G.726是ITU-T定义的音频编码算法,有16kbps、24kbps、32kbps、40kbps四种比特率,不同的比特率区别在于码字的不同,其采样率都是8000HZ。 G.726编解码器把 128kbit/s 线性数据(64kbit/s PCM数据)压缩为 16kbit/s、24kbit/s、32kbit/s、40kbit/s 数据压缩比分别为8:1、16:3、4:1和16:5,码字分别为2、3、4和5 bits。采用越高压缩比,码率越小,质量越差。
将G726解码为PCM可利用标准的G726解码库,网上有源码可供下载,这里提供我所用的一个开源源码,https://download.csdn.net/download/zqj6893/5649281。在解码时要注意,g726_decode()的返回值应该*2再返回给上一级调用。
自己解码封装过程中所遇见的问题:
(1)解码G726后并封装为avi文件后,音视频只有视频没有声音,后来在网上看到一个可以分析avi文件格式的软件AtomicBrowser,将我的avi文件与正常的avi文件比较分析后发现,是在封装过程中没有正确设置avi文件音频的通道、频率等参数。之后检查代码发现没有是使用avilib库中的AVI_set_audio()接口进行设置所致,使用该接口并填入正确的参数后便有了声音。
(2)解决avi文件没有声音的问题后,发现虽然视频有声音,但都是噪音,猜想很可能是音频填入的参数,于是仔细检查代码,发现g726_decode()解码之后的返回值没有*2,改过后声音就正常了。
注意:海思平台的G726解码可能和标准的不一样。
参考:https://blog.csdn.net/byxdaz/article/details/83183770
https://blog.csdn.net/byxdaz/article/details/78430490
https://blog.csdn.net/li_wen01/article/details/80623580
https://blog.csdn.net/chinadragon76/article/details/22917003
标准G726音频解码和与H264视频封装为avi相关推荐
- ijkplayer源码分析 音频解码流程
前言 本系列如下: 整体概述 视频渲染流程 音频播放流程 read线程流程 音频解码流程 视频解码流程 视频向音频同步 start流程和buffering缓冲策略 本文是流程分析的第四篇,分析ijkP ...
- 音视频封装格式、编码格式
音视频封装格式.编码格式 概述 常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid ...
- 使用mp4v2将aac音频h264视频数据封装成mp4开发心得
这阵子在捣鼓一个将游戏视频打包成本地可播放文件的模块.开始使用avi作为容器,弄了半天无奈avi对aac的支持实在有限,在播放时音视频时无法完美同步. 关于这点avi文档中有提到: For AAC, ...
- 音视频开发之旅(36) -FFmpeg +OpenSL ES实现音频解码和播放
目录 OpenSL ES基本介绍 OpenSL ES播放音频流程 代码实现 遇到的问题 资料 收获 上一篇我们通过AudioTrack实现了FFmpeg解码后的PCM音频数据的播放,在Android上 ...
- iOS8系统H264视频硬件编解码说明
iOS8系统H264视频硬件编解码说明 转载自:http://www.tallmantech.com/archives/206#more-206 公司项目原因,接触了一下视频流H264的编解码知识,之 ...
- iOS系统H264视频硬件编解码说明
公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...
- java aac rtp封装_分享一段H264视频和AAC音频的RTP封包代码
1. H264视频的RTP封包 static int h264_parse(Track *tr, uint8_t *data, size_t len) { h264_priv *priv = tr-& ...
- 音视频开发(31)---H264 视频信息与压缩编码
H264 视频信息与压缩编码 一.人与世界的交互 从远古时代人类文明诞生之日起,人类就在人类就在不断为适应环境.改造环境而艰苦斗争.其中最为基础的前提就是利用感官对外界信息的获取.利用各种感官,人类可 ...
- H264视频高压心得——兼容华为U8800+(硬解720P)
原文: http://www.cnblogs.com/zyl910/archive/2011/11/22/h264_encode_u8800.html H264视频高压心得--兼容华为U8800+(硬 ...
最新文章
- [Linux内核]软中断与硬中断
- 洛谷 P3182 [HAOI2016]放棋子(错排问题)
- IBM为世博会服务支持建立快速反应通道
- JDBC修改数据库(Object类的应用)
- java 调用.net webservice axis2_java利用axis2调用.net写的webservice,传递自定义的实体类参数...
- mac远程redis_Linux:使用Mac远程(局域网内)访问Ubuntu主机上的Redis服务
- java 调用js 解析yml_nodejs库yaml读取yml或yaml配置文件
- Kubernetes系列之理解K8s Service的几种模式
- bool可以是java得标识符嘛_Java-标识符--修饰符--关键字
- Javascript面向对象全面剖析 —创建对象
- Matlab画图相关知识
- 第22篇 项目进度管理__计划评审技术__重点内容
- 计算机科学技术技术的发展趋势,计算机科学与技术的发展趋势分析
- java实现在线预览的功能(一)word转html
- 中国十大域名圈高手 看看知道几个
- 1.金融点滴 - 什么是做多、做空?国内股市为什么不能做空?
- 文本语音阅读器——Python简单实现
- 计算机视觉和机器学习_我从计算机视觉和机器学习硕士课程中学到的东西
- 电子线路设计技巧7:UC3843A升压电路中振荡频率和占空比的确定方法
- 求集合的所有非空子集