【发布时间】:2022-12-31 14:14:16
【问题描述】:
我有 ubuntu 18.04,我正在安装带有 rtmp 模块的 nginx,当我发送实时音频和视频时 - 音频不工作。来自视频的编解码器是 h 264 和音频 mp3。如何使音频正常工作?
【问题讨论】:
-
嗨师父。或许您应该从专门的 Google 群组开始:groups.google.com/g/nginx-rtmp/search?q=no%20sound 我希望这个群组很活跃,或者这里有人可以帮助您 :)
我有 ubuntu 18.04,我正在安装带有 rtmp 模块的 nginx,当我发送实时音频和视频时 - 音频不工作。来自视频的编解码器是 h 264 和音频 mp3。如何使音频正常工作?
【问题讨论】:
快速回答:nginx-rtmp 不支持 HLS 上的 mp3,但有一些解决方法。
但是因为你没有把你的使用场景描述的比较详细,所以我就一般的场景来讨论一下。
您可以使用 FFmpeg 发布直播流,或者您应该获得支持 MP3 音频编解码器的编码器。例如:
ffmpeg -re -i doc/source.flv -vcodec copy -acodec libmp3lame
-f flv rtmp://localhost/live/livestream
不:据我所知,OBS 仅支持 AAC 音频编解码器。
您可以使用nginx-rtmp 或SRS 作为媒体服务器,然后通过以下方式播放 RTMP 流:
- FFPLAY:
ffplay rtmp://localhost/live/livestream- VLC:
rtmp://localhost/live/livestream您可能想将 RTMP 转换为其他播放器(例如 H5 或手机)的其他协议,让我在下一节中介绍。
播放 MP3 直播
观众从不使用 ffplay 或 VLC 作为播放器,而是使用 H5 或手机,因此您必须将 MP3 over RTMP 转换为其他协议,某些媒体服务器可能不支持。
HLS 是播放器最常用的协议,请注意 nginx-rtmp 不支持 HLS 上的 MP3,请参阅#181。经过一些研究,我发现 nginx-rtmp 强制在 HLS 流中使用 AAC,所以你必须通过合并 this 补丁来修复它。
另一种解决方法是使用SRS,它支持基于 HLS 和其他协议的 MP3。详细用法请看#296。例如:
- 基于 HLS 的 MP3:支持。建议启用
hls_acodec mp3;,使第一段写入时不改变 HLS 的 PMT。- HTTP-TS 上的 MP3:支持。可以使用mpegts.jsH5播放器播放直播,延迟比HLS低。
- 将 MP3 转换为 WebRTC(Opus):支持。使用WebRTC 播放直播,是另一种解决方案。
但是,您可以通过 FFmpeg 将 MP3 编解码器转换为 AAC,因为 AAC 现在被广泛使用,几乎所有的服务器和播放器都支持 AAC,但是它会消耗更多的 CPU(每个流大约 2%)用于音频转码:
ffmpeg -i rtmp://localhost/live/livestream -vcodec copy -acodec aac -f flv rtmp://localhost/live/livestream-aacPS:请注意,您也可以通过 HTTP-MP3 传输进行纯音频直播。
【讨论】: