如何使用编码的AAC数据手动创建AVPacket以发送mpegts?

时间:2016-01-21 00:28:59

标签: c++ ffmpeg aac

我正在开发使用FFMPEG API发送mpeg2ts流的应用程序。(avio_open,avformat_new_stream等...)

问题是该应用程序已经具有AAC-LC音频,因此音频帧不需要编码,因为我的应用程序只是绕过从套接字缓冲区接收的数据。

要使用FFMPEG打开并发送mpegts,我必须拥有AVFormattContext数据,据我所知,这是从编码器的FFMPEG API创建的。

我可以使用编码的AAC-LC数据手动创建AVFormatContext吗?或者我应该解码和编码数据?我知道的信息是samplerate,codec,bitrate ..

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

是的,如果您的容器支持,您可以按原样使用编码数据。这里涉及两个步骤 - 编码和多路复用。编码压缩数据,多路复用将它们混合在输出文件中,因此数据包被正确交错。 FFMpeg发行版中的Muxing示例帮助了我。

您还可以查看以下类:https://sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp - 此文件来自我的某个项目,并包含视频编码器。从第402行开始,您将看到未转换音频的设置 - 这是一种hackish方式,但它有效。不幸的是我仍然最终重新编码音频,因为对于我的格式,我不可能实现我需要的帧完美同步