要解决RTMP协议不在白名单的问题,需要调整FFmpeg命令中的-protocol_whitelist
参数,允许使用rtmp
协议。以下是修改后的代码:
def send_stream(rtmp_url):
"""推流到指定地址"""
cmd = [
'ffmpeg',
'-re',
'-i', get_pipe_path('live.m3u8'),
'-c', 'copy',
'-f', 'flv',
'-protocol_whitelist', 'file,rtmp', # 允许file和rtmp协议
rtmp_url
]
subprocess.run(cmd)
修改说明:
- 协议白名单调整:将
-protocol_whitelist
的值从'file'
改为'file,rtmp'
,明确允许FFmpeg使用file
(读取本地HLS切片)和rtmp
(推流到RTMP地址)协议。 - 兼容性与安全:仅添加必要的协议,避免使用
all
以减少潜在的安全风险。
这样修改后,FFmpeg就能正常处理输入(HLS文件)和输出(RTMP推流)的协议,错误即可解决。