从UDP多播MPEG TS流中使用FFMPEG重新编码AUDIO的奇怪问题



我想重新编码从mp2到aac的音频流,从一个udp多播MPEG TS流到另一个。

我有一个udp多播mpeg ts streram,里面有1个视频、3个音频和1个字幕流。我想将音频流的协议从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分析,一切都OK:

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得到的--分析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

有人能解释一下并给我解决方案吗?

我只想将音频流的协议从UDP MPEG TS多播流从mp2更改为aac,并将其流式传输到另一个多播地址,就像我上面的例子一样。这都是

Ivan

我找到了一个解决方案。这是ffmpeg的一个严重问题,来自ffmpeg聊天室的一位好人告诉了我解决方案。众所周知,libavformat等待字幕的时间可能太长。

有一个补丁:

https://patchwork.ffmpeg.org/project/ffmpeg/patch/20200311213635.51736-1-rcombs@rcombs.me/

如果没有这个补丁ffmpeg";吐出";当输入流组成时的时段上的分组和视频/音频轨道中的字幕轨道

NOT中的此补丁包含在Debian/Ubuuntu的ffmpeg预编译包中。你应该应用它并从源代码编译ffmpeg!!!

最新更新