1,ACC音频文件格式

首先ACC音频文件由一帧一帧的ADTS帧组成,每个ADTS帧包含ADTS头部和AAC数据。所以进行包传输的时候要进行对包音频每一帧进行解析,如同H264文件那样找到每个NALU(每一帧)是靠的前3个或4个字节。

ADTS头部通常为7个字节,并且头部包含aac_frame_length,表示ADTS帧的大小

1,main函数同样是对acc文件每一帧解析,取出数据。

根据头部得出adtsHeader.aacFrameLength数据长度,得到数据部分

 while(1){printf("--------------------------------\n");ret = read(fd, frame, 7);if(ret <= 0){lseek(fd, 0, SEEK_SET);continue;            }if(parseAdtsHeader(frame, &adtsHeader) < 0){printf("parse err\n");break;}ret = read(fd, frame, adtsHeader.aacFrameLength-7);if(ret < 0){printf("read err\n");break;}rtpSendAACFrame(socket, argv[1], CLIENT_PORT,rtpPacket, frame, adtsHeader.aacFrameLength-7);usleep(23000);}

2,rtpSendAACFrame函数准备好每一帧的数据部分和数据部分大小,然后留给rtp.c文件进行数据发送

static int rtpSendAACFrame(int socket, char* ip, int16_t port,struct RtpPacket* rtpPacket, uint8_t* frame, uint32_t frameSize)
{int ret;rtpPacket->payload[0] = 0x00;rtpPacket->payload[1] = 0x10;rtpPacket->payload[2] = (frameSize & 0x1FE0) >> 5; //高8位rtpPacket->payload[3] = (frameSize & 0x1F) << 3; //低5位memcpy(rtpPacket->payload+4, frame, frameSize);  //RTP载荷中的前四个字节是有特殊含义的, 一起组成了数据包ret = rtpSendPacket(socket, ip, port, rtpPacket, frameSize+4);//重新封装一层,这个函数只不过是加了数据部分的前4个特殊含义的字节。if(ret < 0){printf("failed to send rtp packet\n");return -1;}rtpPacket->rtpHeader.seq++;  //序列号加1/** 如果采样频率是44100* 一般AAC每个1024个采样为一帧* 所以一秒就有 44100 / 1024 = 43帧* 时间增量就是 44100 / 43 = 1025* 一帧的时间为 1 / 43 = 23ms*/rtpPacket->rtpHeader.timestamp += 1025;return 0;
}

RTSP-传送ACC音频文件相关推荐

  1. 使用FFMPEG库封装264视频和acc音频数据到MP4文件中

    准备 ffmepeg 4.4 一段H264的视频文件 一段acc格式的音频文件 封装流程 1.使用avformat_open_input分别打开视频和音频文件,初始化其AVFormatContext, ...

  2. esp32~MP3音频文件学习,app架构

    从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余.音频信号在时域和频域上具有相关性,也即存在数据冗余.将音频作为一个信源,音频编码的实质是减少音频中的冗余. 自然界中的 ...

  3. html录音并转为音频文件,HTML5音频API Web Audio

    此文介绍HTML5音频API的主要框架和工作流程,因为音频处理模块很多,因此只简单介绍几种音频处理模块,并通过例子来展示效果.后续会介绍利用HTML5音频API实现的项目,欢迎大家关注,敬请期待. H ...

  4. python构建聊天机器人之录制声音保存为音频文件(利用pyaudio进行录音)

    最近心血来潮想利用 python构建一个智能语音聊天机器人,这样就能在我们无聊的时候和我们聊天以此打发时间啦:). 要想最终实现聊天机器人的构建需要经过一系列过程功能的实现,大致思路为程序接受用户的语 ...

  5. mt8735 android5.1调试MIC增益参数和去除录制的音频文件播放有电流声

    问题描述:录制的音频文件播放时有很明显的"滴滴~"声,根据硬件提供的建议,将MIC种类改为ACC模式,如下: +++ b/vendor/mediatek/proprietary/c ...

  6. php文件如何转音频,如何转换音频文件,mp3格式转换器,音频格式转换器,

    现在网上有很多音频格式转换器,小编今天在百度搜索了一下:"音频格式转换器",大家猜一下出现了多少个结果?你们肯定猜不到了啦:三百多万个.是不是很多啊?虽然现在转换音频的软件有很多, ...

  7. 音频文件类型和编码方式

    1.音频编码方式 PCM(有损):采样-量化-编码,模拟信号-数字脉冲 DPCM(有损):差分脉冲调制编码,量化过程是与前一个值做差再量化 ADPCM(有损) LPCM(非压缩) AAC(有损) AP ...

  8. C语言解析WAV音频文件

    转载:http://www.cnblogs.com/LexMoon/p/wave-c.html 1.C语言解析WAV音频文件 代码地址: Github : https://github.com/Cas ...

  9. 《自拍教程69》Python 批量重命名音频文件,AV专家必备!

    本篇主要学习如何Python自定义模块并调用该模块,并重点介绍Python正则表达式的强大的文本处理能力. 案例故事: 任何一款终端产品只要涉及音频输出,就肯定涉及音频的解码, 作为一名专业的AV ( ...

  10. 不同音频文件如何进行数据恢复?

    人类能够听到的所有声音都称之为音频.在互联网科技高度发展的今天,各类设备和软件层出不穷,而其中大部分都可以以文件的形式对声音进行传输和保存,对于这些存储声音的文件称之为音频文件. 在案件调查中,如果能 ...

最新文章

  1. 45个超实用的JavaScript技巧及最佳实践(一)
  2. 004-2-拟合,drop-out
  3. 一个简单的epoll测试例子
  4. 使用BlazeDS实现Java和Flex通信之hello world
  5. ORACLE会话以及SQL执行信息查询
  6. 文档根元素 project 必须匹配 doctype 根 null_快评:全新MG5上市6.49万起,但买它必须准备10万?...
  7. MyCat分布式数据库集群架构工作笔记0001---Mycat简介
  8. 华科计算机系研究生遗书,看完华中科大研究生遗书《狗血的研究生生涯》,泪目了!有话要说...
  9. C语言速看,C语言高速入门系列(二)
  10. c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
  11. Golang在Linux环境下的POSIX风格socket编程
  12. bzoj 1058: [ZJOI2007]报表统计(set+multiset)
  13. 一台mysql数据库服务器_在一台服务器安装多个MySQL数据库
  14. Sketch 76 for mac(矢量绘图设计软件)
  15. java基于springboot+vue的虚拟游戏道具交易商城 element
  16. NumberFormat和DecimalFormat
  17. 冰点文库下载器v3.2.9
  18. 远程访问 Sql Server Express
  19. 最新行政区划省市区镇街道村 导入数据库 MYSQL (2021年4月 )
  20. 用计算机写作文的好处,谈谈对电脑写作的意义,电脑写作与网络写作的含

热门文章

  1. 使用VS开发QT项目时出现找不到QT头文件
  2. gom引擎传奇MapInfo.txt地图参数详解
  3. mapInfo文件格式详解,其中有“细说Mapinfo索引文件*.ind”
  4. 新功能,赶紧用起来,CSDN浏览器助手-脚本功能,兼容油猴脚本安装使用
  5. 地图标识符号大全_资源小结:中国分省地图大全(10.23版)
  6. 年终总结:我的2016
  7. ssm(spring+spring mvc+mybatis+maven)高仿bilibili视频网站项目实例
  8. 2020 cr节目源_直播源2020-10-10
  9. 加密与解密 调试篇(二) Windows调试器实现(一)
  10. OLT忘记登陆密码如何修改