【发布时间】:2023-03-30 14:35:01
【问题描述】:
我有一个应用程序将原始 音频 数据记录在 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,但我不确定它是否真的符合我的要求。
感谢您的帮助,
【问题讨论】:
-
libavformat/mpegtsenc.c是 TS 复用器,但它不复用 LPCM。欢迎补丁。 -
它有任何类型的文档还是我必须深入研究代码?
-
个人多路复用器本身没有记录。基本流程是一样的:你初始化,写头(如果适用),写数据包,写尾,deinit。查看文件底部的相关函数。
-
在通过网络传输时是否必须有 LPCM?作为一种未压缩的格式,您可能无法找到所需的内容,因为它对网络传输效率不高。您可以编码和传输,然后解码回 LPCM 将是一个相当简单的过程。如果你真的只是想通过网络推送 LPCM,只需在套接字上发送它,不需要 ffmpeg
-
@Andrew 不,我不需要转入 LPCM。我的音频是在 LPCM 中原生生成的,但我可以轻松地将其编码为更合适的格式,例如 AAC。但是,我确实需要在 MPEG 传输流中传输它,因为它是服务器进程所期望的。
标签: c++ ffmpeg libavformat transport-stream muxer