最好经手一个小的功能将mp2实时流转成AAC并发布成rtmp音频流,本身不是很难的一个需求,

一个晚上就能将功能开发好。功能开发完毕后,找来一音频文件利用Ffmpeg命令将音视频文件推成

实时udp格式音频流,具体的推送命令是:

ffmpeg.exe -r -i F:\test.mp2 -acodec copy -f mp2 udp://127.0.0.1:1234

  测试程序以udp://127.0.0.1:1234为输入源,rtmp://127.0.0.1/live/stream为输出流。从输入到输出

经过解码、过滤器、编码最后封装,这些基本的原理及代码之前的博文已经写过,也有相关的视频进行

讲述,本文不再赘述。

测试程序运行后,通过ffplay播放输出音频流地址rtmp://127.0.0.1/live/stream,开始一分钟左右可以

音频播放正常,过了一分钟后声音出现卡顿。开始以为是推送的速度问题,对原有的程序做了些改进:将

读包一单独线程,编解码及发送单独一线程。修改程序后,卡顿的现象还在,显然没有找到问题。接下来

考虑可能是读udp数据出了问题,增加各种UDP参数设置重新再测试,卡顿的现象依然在。经过多番折腾

发现问题出在filter上:filter SRC端每Push一次,SINK端需要一直读取Frame直到读取方法返回负值。源

代码也是这么写的,不小心埋了Bug,实际执行的情况是每次SINK端只读一次即返回。正常的代码片段如下

void Transcode(std::shared_ptr<AVPacket> packet)
{
int gotOutput = ;
AVFrame *pSrcAudioFrame = av_frame_alloc();
bool decodeResult = decodeAudio(packet.get(),pSrcAudioFrame);
if(decodeResult)
{
while (true)
{
AVFrame *filtFrame = av_frame_alloc();
int ret = av_buffersink_get_frame_flags(buffersinkCtx, filtFrame, );
if(ret < )
{
av_frame_free(&filtFrame);
break;
}
std::shared_ptr<AVPacket> pkt(static_cast<AVPacket*>(av_malloc(sizeof(AVPacket))), [&](AVPacket *p) { av_packet_free(&p); av_freep(&p); });
av_init_packet(pkt.get());
pkt->data = NULL;
pkt->size = ; ret = avcodec_encode_audio2(encodeContext, pkt.get(), filtFrame, &gotOutput);
if (ret >= && gotOutput)
{
WritePacket(pkt);
}
av_frame_free(&filtFrame);
}
}
av_frame_free(&pSrcAudioFrame);
}

如需交流可加QQ群1038388075,766718184 或者QQ3501870

博主提供Ffmpeg、GB28181视频教程

播放地址: http://www.iqiyi.com/u/1426749687

源码及Demo下载地址:http://www.chungen90.com/?news_2/

视频下载地址:    http://www.chungen90.com/?news_3/

Ffmpeg音频转码 卡顿(MP2转AAC)的更多相关文章

  1. ffmpeg 音频转码

    大多数厂家摄像机输出的音频流格式都是PCM,有一些场合(比如讲音视频流保存成Ts流)需要将PCM格式转成AAC格式.基本的思路是先解码得到音频帧,再将音频帧编码成AAC格式.编码和解码之间需要添加一个 ...

  2. ffmpeg使用转码学习

    ffmpeg在官网上描述自身:是一个对视频和音频进行记录,转换,流化的完整的跨平台解决方案.事实上,现在有很多工具都是基于ffmpeg来进行视频音频的处理工具的.比如鼎鼎大名的格式工厂,就是使用ffm ...

  3. C# 使用 ffmpeg 进行音频转码

    先放一下 ffmpeg 的官方文档以及下载地址: 官方文档:http://ffmpeg.org/ffmpeg.html 下载地址:http://ffmpeg.org/download.html 用 f ...

  4. 使用WaveOut API播放WAV音频文件(解决卡顿)

    虽然waveout已经过时,但是其api简单,有些时候也还是需要用到. 其实还是自己上msdn查阅相应api最靠谱,waveout也有提供暂停.设置音量等接口的,这里给个链接,需要的可以自己查找: h ...

  5. 解决由于显卡驱动BUG导致桌面右键卡顿的问题:bat文件源码

    @ ECHO OFF%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...

  6. 揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿

    作者:予涛 途坦 这个夏天,没什么能够比一场酣畅淋漓的奥运比赛来的过瘾.但是,在视频平台直播观看比赛也有痛点:"卡顿" 和 "延时".受限于不同地域.复杂的网络 ...

  7. 【腾讯Bugly干货分享】TRIM:提升磁盘性能,缓解Android卡顿

    Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处.在业内,Android 手机一直有着 ...

  8. 4.Android App 优化之消除卡顿

    转载:http://gold.xitu.io/post/582583328ac247004f3ab124 1, 感知卡顿 用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI ...

  9. ART:Android 摆脱卡顿的希望?

    与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各 ...

随机推荐

  1. vboxmanage查询正在运行的vbox虚拟机

    系统:linux通用,virtualbox5.0 每次用下面命令启动vm虚拟机时,发现没办法知道它的IP. $ vboxmanage startvm <vmname> --type hea ...

  2. Dreamweaver安装须知

    1.断网安装,否则让你登录邮箱什么的,安装完成后退出,先不要运行: 2.将破解的文件直接复制到安装的文件的地方覆盖:(将32文件夹下的amtlib.dll复制到安装完毕的dw_cs6下,覆盖原来的am ...

  3. Python的功能模块[4] -> pdb/ipdb -> 实现 Python 的单步调试

    pdb / ipdb 模块 / pdb / ipdb Module pdb 和 ipdb 的主要作用是用于 Python 程序的单步调试,Python 的调试可参考链接. 下面是一个简单的使用示例 i ...

  4. 第九章 Android-UI组件(2)

    一.图像视图(ImageView) 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  5. iptables 要点总结

    http://jiayu0x.com/2014/12/02/iptables-essential-summary/

  6. Introduction to the TestFlight SDK

    https://developer.apple.com/testflight/ When you want to test an app on your device, usually you plu ...

  7. XCode下的iOS单元测试

    XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit.通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能.本文将演示如何在 ...

  8. [置顶] docker--基础镜像和dockerfile

    制作基础镜像 注意:需要在CentOS6下操作 准备工作 yum -y install febootstrap 下载ISO镜像文件到服务器 mkdir /mnt/centos6/ mount -o l ...

  9. Java三大器之拦截器(Interceptor)的实现原理及代码示例

    1,拦截器的概念    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...

  10. 接口测试工具(Postman)

    给大家介绍一款HTTP接口测试工具 -- Postman ! 优点: 1. 支持参数名与参数值自定义,无论head还是body 2. 支持多种方法调用,包含get与post 3. 支持鉴权加密,包含b ...