使用Python + FFmpeg + Nginx的在线RTMP广播:无法有连续的输出流

问题描述 投票:0回答:1

考虑一个类似于在线广播的应用程序,我试图传输用户选择的音频文件序列,用户可以提前足够的时间选择将在序列中播放的文件,以便再现不会被静音。我在 Python 脚本和运行 Nginx 的 RTMP 服务器中使用 FFmpeg。 问题在于,中断一个文件与另一个文件之间的传输似乎会中断输出传输。有时文件会被跳过,有时它只会让客户端崩溃。

我已经尝试过使用“-re”实时传输文件序列,并且我也尝试过不使用“-re”,在Python中创建一个自定义队列管理器,目的是尝试仅保留“n”服务器缓冲区中的文件。 以下是代码摘录:

ffmpeg_命令= [ 'ffmpeg', '-loglevel', '警告', # '-re', # 以本机帧速率读取输入 '-i',文件路径, '-c:a', 'aac', '-ar', '44100', '-buffsize', '1024k', '-af', 'atempo=1.0', '-b:a','128k', '-f', 'flv', '-flvflags', 'no_duration_filesize', rtmp_url # 服务器地址 ] subprocess.run(ffmpeg_command, check=True)

关于如何解决这个问题有什么建议吗?

python nginx ffmpeg rtmp
1个回答
0
投票

如果您正在寻找新的解决方案,请考虑使用 FFmpeg 的串联功能,而不是单独发送文件。您可以创建一个“concat”文件,按照播放顺序列出所有音频文件。这种方法将多个文件视为单个连续流,这可能会解决中断问题。

例如:

file 'path/to/file1.mp3'
file 'path/to/file2.mp3'
file 'path/to/file3.mp3'

然后将 FFmpeg 与 concat 解复用器一起使用:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy -f flv rtmp_url
© www.soinside.com 2019 - 2024. All rights reserved.