Python ffmpeg rtmp 循环推流脚本(热更新播放列表)

本文介绍了一种使用Python编写的脚本,该脚本配合ffmpeg进行rtmp推流时,能自动重读并更新播放列表,避免手动重启。即使发生播放错误或网络中断,脚本也能恢复播放,提供了一定的容错性和免维护性。播放列表文件是一个JSON字典,键为文件名(不包含后缀),值标记播放顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前排提醒:

此脚本已更新,并增加了自动断流续推功能,见下:

https://blog.csdn.net/tansuo2005/article/details/130573500?spm=1001.2014.3001.5502

使用ffmpeg进行rtmp推流时,播放列表是一次性载入的,如果要修改播放列表,需要手工重启ffmpeg,很是麻烦。

于是便写了一个简单的脚本,脚本每次播完一个文件后,都会立刻重读播放列表确认要播放的文件,达到了只要修改播放列表文件,无需重启ffmepg,当一个视频播完后,自动读取最新的播放列表播放的目的。

这个脚本还有一个额外的好处,那就是如果一个视频播放错误,或推流过程中暂时断网,不会导致异常退出,当网络恢复时,又会恢复播放(但不会续播,而是会播放网络恢复那一刻时的视频),达到了一定程度上的免维护。

播放列表文件(videolist.json):

{
 "file1": false,
 "file2": true,
 "file3": false,
 "file4": false
}

### 使用 PythonFFmpeg 进行 RTMP 协议下的 MP3 音频送 要实现通过 RTMP 协议送 MP3 音频的功能,可以利用 FFmpeg 处理音视频的强大能力,并结合 Python 调用 FFmpeg 命令来完成操作。以下是具体方法: #### 方法概述 FFmpeg 是一种强大的多媒体处理工具,支持多种输入输出格式以及协议[^2]。为了在 Python 中调用 FFmpeg MP3 文件到 RTMP 服务器,可以通过 `subprocess` 模块执行 FFmpeg 命令。 #### FFmpeg 命令结构 以下是一个典型的用于送 MP3 音频文件至 RTMP 服务器的 FFmpeg 命令: ```bash ffmpeg -re -i input.mp3 -vn -acodec copy -f flv -y rtmp://your.rtmp.server/live/stream_key ``` - `-re`: 表示按原始媒体文件的时间基逐帧读取,模拟实时播放效果。 - `-i input.mp3`: 输入的 MP3 文件路径。 - `-vn`: 禁用视频编码(因为这里是纯音频)。 - `-acodec copy`: 不重新编码音频,直接复制原始音频。 - `-f flv`: 设置封装格式为 FLV,这是 RTMP 常用的容器格式。 - `rtmp://...`: 输出目标地址,即 RTMP URL[^1]。 #### 在 Python 中调用 FFmpeg 下面是一段基于 Python 的代码示例,展示如何使用 `subprocess.run()` 来运行上述 FFmpeg 命令并送 MP3 音频: ```python import subprocess def push_mp3_to_rtmp(input_file, rtmp_url): command = [ 'ffmpeg', '-re', # 按时间基逐帧读取 '-i', input_file, # 输入 MP3 文件 '-vn', # 禁用视频 '-acodec', 'copy', # 直接复制音频 '-f', 'flv', # 封装格式设置为 FLV '-y', # 如果存在同名文件则覆盖 rtmp_url # RTMP 地址 ] try: result = subprocess.run(command, check=True) print("Push completed successfully.") except subprocess.CalledProcessError as e: print(f"An error occurred while pushing stream: {e}") # 示例参数 input_mp3 = "example.mp3" rtmp_server_url = "rtmp://your.rtmp.server/live/stream_key" push_mp3_to_rtmp(input_mp3, rtmp_server_url) ``` 此脚本定义了一个函数 `push_mp3_to_rtmp()`, 它接受两个参数:一个是本地 MP3 文件路径,另一个是要送的目标 RTMP 地址。该函数会启动一个子进程以运行 FFmpeg 命令并将结果打印出来。 #### 注意事项 当遇到某些特殊情况时,可能需要调整 FFmpeg 参数。例如,在某些情况下如果发现缺少必要的信息,则可尝试启用 `-flv_metadata true` 或者其他相关选项来解决潜在问题[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩编程的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值