1

我有一个应用程序可以记录存储在缓冲区中的 LPCM 中的原始音频数据。我想将数据封装在传输流中,并通过 UDP 将该传输流发送到另一台主机上的流分段器(根据 HTTP Live Streaming 规范)。

FFmpeg 提供了一个命令行实用程序来执行此操作,但使用文件作为输入 ffmpeg -re -i output.aac -acodec copy -f mpegts udp://127.0.0.1:5555

我的第一个想法是使用 FFmpeg API,尤其是libavformat库。libavformat 是否提供了一个复用器,可用于将 LPCM 中的音频封装到传输流中,还是我必须从头开始实现它?

我找到了这个源代码https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mpegts.c但我不确定它是否真的符合我的要求。

谢谢你的帮助,

4

2 回答 2

1

因此,根据您关于在 TS 中不需要它一定是 LPCM 的评论,您将需要:

  1. 解码您的音频/读取帧
  2. 将其编码为适合在传输流中发送的内容,例如 mp3 或 AAC 我相信这是选项列表:https ://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mpegts.h#L45- L64
  3. 将其打包在适合您的网络条件的 TS 中,例如数据包大小等
  4. 通过 UDP 发送

这里有一个合理的例子:https ://github.com/rvs/ffmpeg/blob/master/libavformat/output-example.c

正如 szatmary 之前的回答中提到的,您也可以将其通过管道传输到 ffmpeg,这可能是最简单的

于 2018-04-19T20:04:56.097 回答
0

您可以通过 libavformat 直接使用 ts muxer。但是,您也可以使用 -i 将音频通过管道传输到 ffmpeg -

于 2018-04-16T16:56:21.753 回答