You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Django的M3U8转RTMP推流问题求助(FFmpeg命令无效)

解决M3U8转推RTMP的FFmpeg命令问题

常见问题排查与修正方案

1. 修复编码兼容性问题

原命令使用-c copy直接复制流,但M3U8中的音视频编码可能不符合FLV容器的要求(比如H.264的Profile/Level不兼容、音频非AAC格式)。强制转码为兼容编码即可解决:

ffmpeg -fflags +igndts+genpts -hide_banner -i https://link/stream.m3u8 -c:v libx264 -profile:v baseline -level 3.0 -c:a aac -f flv rtmp://127.0.0.1/live/stream
  • +genpts:自动生成正确的时间戳,解决流同步异常问题
  • -profile:v baseline -level 3.0:确保H.264编码适配绝大多数RTMP服务器
  • -c:a aac:强制音频转码为FLV标准支持的AAC格式

2. 优化网络分段流处理

M3U8属于HTTP分段流,需添加缓冲、超时参数避免网络波动导致断流:

ffmpeg -fflags +igndts+genpts -hide_banner -timeout 5000000 -i https://link/stream.m3u8 -c:v libx264 -profile:v baseline -level 3.0 -c:a aac -f flv rtmp://127.0.0.1/live/stream
  • -timeout 5000000:设置5秒超时,防止网络卡顿导致进程挂起
  • 若源M3U8是直播流,可追加-re参数模拟实时速率推流:
ffmpeg -re -fflags +igndts+genpts -hide_banner -timeout 5000000 -i https://link/stream.m3u8 -c:v libx264 -profile:v baseline -level 3.0 -c:a aac -f flv rtmp://127.0.0.1/live/stream

3. 修正RTMP地址格式

原命令中RTMP地址缺少//,正确格式应为rtmp://127.0.0.1/live/stream,否则FFmpeg无法正确解析服务器地址。

4. Django服务集成注意事项

  • 禁止在Django主线程中执行FFmpeg命令,需用异步任务框架(如Celery)或subprocess模块管理子进程,避免阻塞HTTP请求
  • 捕获FFmpeg输出日志便于排查错误:
import subprocess

cmd = [
    'ffmpeg', '-fflags', '+igndts+genpts', '-hide_banner',
    '-i', 'https://link/stream.m3u8',
    '-c:v', 'libx264', '-profile:v', 'baseline', '-level', '3.0',
    '-c:a', 'aac', '-f', 'flv', 'rtmp://127.0.0.1/live/stream'
]
result = subprocess.run(cmd, capture_output=True, text=True)
print("FFmpeg输出:", result.stdout)
print("错误日志:", result.stderr)
  • 确保服务器环境安装的FFmpeg版本不低于4.0,旧版本对H.264/AAC的兼容支持较差

内容的提问来源于stack exchange,提问作者Stepan.Basharov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:10:20