实现简单的MPEG-TS复用器

时间:2018-04-16 16:25:13

标签: c++ ffmpeg libavformat transport-stream

我有一个应用程序可以在存储在缓冲区中的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,但我不确定它是否真的能满足我的要求。

感谢您的帮助,

2 个答案:

答案 0 :(得分:0)

您可以直接通过libavformat使用ts muxer。但是,您也可以使用-i -

将音频传输到ffmpeg

答案 1 :(得分:0)

因此,基于您的评论,不需要它必须是TS中的LPCM,您需要:

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

    正如szatmary之前的回答中所提到的那样你也可以把它管道到ffmpeg,这可能是最简单的