ffmpeg - 使用 FFMPEG 从 UDP Multicast MPEG TS 流重新编码 AUDIO 的奇怪问题

标签 ffmpeg multicast aac transcoding mpeg2-ts

我想将音频流从一个 udp 多播 MPEG TS 流重新编码为 aac 到另一个。
我有一个 udp 多播 mpeg ts 流,里面有 1 个视频、3 个音频和 1 个字幕流。我想将音频流的协议(protocol)从 mp2 更改为 aac。如果忽略字幕流一切正常。

ffmpeg -re -i udp://224.2.2.42:1234 -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a:0 libfdk_aac -c:a:1 libfdk_aac -c:a:2 libfdk_aac -f mpegts "udp://224.4.0.1:1234?pkt_size=1316"
Stream mapping:                                                                                                        
  Stream #0:0 -> #0:0 (copy)                                                                                           
  Stream #0:1 -> #0:1 (mp2 (native) -> aac (libfdk_aac))                                                               
  Stream #0:2 -> #0:2 (mp2 (native) -> aac (libfdk_aac))                                                               
  Stream #0:3 -> #0:3 (mp2 (native) -> aac (libfdk_aac))
并用 astra 分析,一切都是 好的 :
astra --analyze udp://224.4.0.1:1234
Jan 13 20:07:42: INFO: Bitrate: 6434 Kbit/s
Jan 13 20:07:43: INFO: Bitrate: 5821 Kbit/s
Jan 13 20:07:44: INFO: Bitrate: 3011 Kbit/s
Jan 13 20:07:45: INFO: Bitrate: 3536 Kbit/s
Jan 13 20:07:46: INFO: Bitrate: 1742 Kbit/s
Jan 13 20:07:47: INFO: Bitrate: 4460 Kbit/s
Jan 13 20:07:48: INFO: Bitrate: 3819 Kbit/s
Jan 13 20:07:49: INFO: Bitrate: 5915 Kbit/s
Jan 13 20:07:50: INFO: Bitrate: 4183 Kbit/s
但是,如果我包含和字幕流:
/ffmpeg -re -i udp://224.2.2.42:1234 -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:4 -c:v copy -c:s copy -c:a:0 libfdk_aac -c:a:1 libfdk_aac -c:a:2 libfdk_aac -f mpegts "udp://224.4.0.1:1234?pkt_size=1316"
Stream mapping:                                                                                                        
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (mp2 (native) -> aac (libfdk_aac))
  Stream #0:2 -> #0:2 (mp2 (native) -> aac (libfdk_aac))
  Stream #0:3 -> #0:3 (mp2 (native) -> aac (libfdk_aac))
  Stream #0:4 -> #0:4 (copy)
我用 astra --analyze udp://224.4.0.1:1234 得到了这个
Jan 13 20:10:36: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:37: INFO: Bitrate: 11763 Kbit/s
Jan 13 20:10:38: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:39: INFO: Bitrate: 9198 Kbit/s
Jan 13 20:10:40: INFO: Bitrate: 1686 Kbit/s
Jan 13 20:10:41: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:42: INFO: Bitrate: 14344 Kbit/s
Jan 13 20:10:43: INFO: Bitrate: 1273 Kbit/s
Jan 13 20:10:44: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:45: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:46: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:47: INFO: Bitrate: 20570 Kbit/s
Jan 13 20:10:48: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:49: INFO: Bitrate: 11492 Kbit/s
Jan 13 20:10:50: INFO: Bitrate: 4231 Kbit/s
Jan 13 20:10:51: INFO: Bitrate: 0 Kbit/s
Jan 13 20:10:52: INFO: Bitrate: 0 Kbit/s
有人可以解释一下并给我解决方案吗?
我只想将音频流的协议(protocol)从 UDP MPEG TS 多播流从 mp2 更改为 aac 并将其流式传输到另一个多播地址,如我上面的示例。
就这样
伊万

最佳答案

我找到了解决方案。这是 ffmpeg 的严重问题,来自 ffmpeg 聊天室的好人告诉了我解决方案。众所周知,libavformat 等待字幕的时间可能太长。
有一个补丁:
https://patchwork.ffmpeg.org/project/ffmpeg/patch/20200311213635.51736-1-rcombs@rcombs.me/
如果没有这个补丁,ffmpeg 在输入流包含和视频/音频轨道中的字幕轨道的时段“吐出”数据包
这个补丁在 不是 包含在 Debian/Ubuntu 的 ffmpeg 预编译包中。你应该应用它并从源代码编译 ffmpeg !!!

关于ffmpeg - 使用 FFMPEG 从 UDP Multicast MPEG TS 流重新编码 AUDIO 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70701367/

相关文章:

video - 使用 zsh 和 ffmpeg 从嵌套目录中的视频递归生成静止图像

visual-c++ - C++/CLI -- 0xc000007b (INVALID_IMAGE_FORMAT) 带有/clr 选项

c++ - 为 C/C++ 中的多播守护程序获取客户端列表(事件客户端)(Gstreamer API 或 C 套接字)

android - 将 Wav 文件重新编码为 AAC LC、AMR WB/NB

android - PCM -> AAC (Encoder) -> PCM(Decoder) 实时正确优化

video - 如何在 chrome 中播放 MPEG-TS

video - FFMPEG:使用drawtext以及自动换行和填充创建视频

c# - 在 C# 中使用 AForge.Video.FFMEG 向图像添加文本

linux - 同一网络中的2个Weblogic集群

node.js - 是否有相当于 JGroups 的 Node.js 来提供可靠的多播?