最好经手一个小的功能将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. 关于delphi编程的网络文件夹复制的代码精要

    首先必须引用windows api函数库 shellapi ***************************以下为复制文件夹的代码******************************** ...

  2. Web Api 返回图片流给前端

    public class TestController : ApiController { public HttpResponseMessage GetImg() { //获取文件的绝对路径 stri ...

  3. PDF审计工具peepdf

    PDF审计工具peepdf   PDF是Portable Document Format(便携式文档格式)的缩写.它是Adobe公司推出的文件格式规范.现在,PDF是网络电子书籍的主流格式.由于PDF ...

  4. Git从入门到速成

    什么是Git Git是Linux发明者Linus开发的一款新时代的版本控制系统,那什么是版本控制系统呢?怎么理解?网上一大堆详细的介绍,但是大多枯燥乏味,对于新手也很难理解,这里我只举几个例子. 熟悉 ...

  5. 二分图变种之最小路径覆盖、最小点覆盖集【poj3041】【poj2060】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=54859604 向大(hei)佬(e)势力学(di ...

  6. dubbo的中文官网

    https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html

  7. Struts2笔记--Action访问Servlet API

    Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.se ...

  8. JDBC完整版实现

    package songyan.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  9. Java加密技术(一)—— HMACSHA1 加密算法

    HMACSHA1 是从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码). 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值 ...

  10. Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...