如何使用FFmpeg将MP3文件推流到SRS且能被PotPlayer正常播放
问题原因
原命令的核心问题是RTMP协议不支持直接输出裸MP3封装格式,你指定-f mp3输出到RTMP地址时,输出的流不符合RTMP的传输规范,PotPlayer无法识别该流的封装结构导致播放失败。
解决方案
方案1:无转码直接推流(推荐,无音质损失)
将输出封装格式改为RTMP原生支持的FLV格式,音频流直接复用原MP3编码,不需要转码:
ffmpeg.exe -re -stream_loop -1 -i ./ring.mp3 -c:a copy -f flv rtmp://${domain}/live/test
方案2:转码为通用AAC编码(兼容性最好)
如果原MP3的编码参数(如采样率、声道数、编码层级)不符合FLV封装规范,可转码为RTMP通用的AAC编码,PotPlayer对该格式的适配最成熟:
ffmpeg.exe -re -stream_loop -1 -i ./ring.mp3 -c:a aac -b:a 128k -ar 44100 -ac 2 -f flv rtmp://${domain}/live/test
额外排查项
- 确认RTMP服务端正常运行,1935默认端口未被防火墙拦截,推流地址的域名、应用名、流名配置完全正确
- 确认PotPlayer拉流地址与推流地址完全一致,无拼写错误
- 可先通过FFmpeg拉流测试排查服务端问题:执行
ffmpeg -i rtmp://${domain}/live/test -c copy test_output.flv,如果能正常生成可播放的FLV文件,则说明推流正常,问题出在PotPlayer的拉流配置;如果拉流失败,则需要先排查RTMP服务端配置。
内容的提问来源于stack exchange,提问作者radiorz
相关产品推荐
相关产品推荐

