如何基于Wowza、FFmpeg搭建直播测试服务器并生成HLS playlist.m3u8?
解决Wowza直播HLS流生成与播放问题
我来帮你一步步梳理整个流程,同时针对你遇到的直播模式问题逐一排查修正。
一、完整流程:Wowza + FFmpeg推流 + HLS Playlist生成 + 播放
1. 先配置Wowza直播应用
首先在Wowza管理后台创建一个直播应用(比如命名为live):
- 进入 Applications > Add Application,选择「Live」类型(单服务器或集群根据你的需求选)
- 切换到 Playback 选项卡,找到HLS配置区域,确保:
- 勾选「Enabled」开启HLS输出
- 「Playlist Type」选择「Live」(别选VOD,这是关键)
- 可以调整「Segment Duration」(比如10秒,后续FFmpeg的关键帧间隔要和这个匹配)
2. 用FFmpeg正确推流到Wowza
你的推流命令不完整,我给你补全并优化,适配Wowza的RTMP接收要求:
ffmpeg -re -i "myInputTestVideo.mp4" \ -vcodec libx264 -vb 150000 -g 60 -vprofile baseline -level 2.1 \ -acodec aac -ab 64000 -ar 48000 -ac 2 \ -f flv rtmp://[你的Wowza服务器IP]:1935/live/myStream
- 关键参数解释:
-re:按视频原始帧率推流,模拟真实直播节奏-g 60:如果你的视频是30fps,这个参数对应2秒一个关键帧,和HLS分片时长匹配(若分片设为10秒,可把-g改成300)-f flv:指定输出格式为FLV,这是Wowza接收RTMP流最兼容的封装格式- 音频补全
-ac 2(双声道)和完整的-ar 48000(48kHz采样率),确保HLS兼容性
3. Wowza自动生成HLS Playlist
当FFmpeg成功推流后,Wowza会自动生成HLS主播放列表和分片文件。你可以通过以下URL访问:http://[你的Wowza服务器IP]:1935/live/myStream/playlist.m3u8
先在浏览器打开这个地址,如果能看到类似下面的内容,说明生成成功:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:10.0, media_xxxx_0.ts #EXTINF:10.0, media_xxxx_1.ts
4. 用HLS Player播放
移动端APP直接使用上面的HTTP URL即可播放:
- iOS可以用系统自带的
AVPlayer直接加载 - Android推荐用
ExoPlayer(原生MediaPlayer对HLS的支持有限)
二、针对你的直播模式问题排查
你说点播正常但直播不行,大概率是这几个环节出了问题:
1. 检查Wowza的HLS直播配置
再次确认你的直播应用的HLS设置:
- 「Playlist Type」必须是「Live」,而非VOD
- 「Enabled」一定要勾选,否则Wowza不会生成HLS流
- 检查「Base Path」是否正确,默认路径是
${com.wowza.wms.context.VHostConfigHome}/content/${com.wowza.wms.context.ApplicationInstance},一般无需修改
2. 验证推流是否成功
- 推流后,打开Wowza管理后台的 Stream Manager,查看是否有
myStream流显示为「Online」,如果没有,说明推流未成功 - 查看FFmpeg输出日志:若出现「Connection refused」,检查Wowza的1935端口是否开放、防火墙是否拦截RTMP流量;若为编码错误,检查输入视频格式是否正常
3. 排查HLS Playlist访问问题
如果浏览器访问playlist.m3u8返回404:
- 确认流名称和应用名称都正确(比如你推的是
myStream,就不能用其他名称访问) - 检查Wowza的HTTP端口(默认1935)是否能被外部访问,移动端APP的网络是否能打通到Wowza服务器
4. 移动端播放的小细节
- 如果是HTTPS环境,要确保Wowza配置了SSL证书,且播放器支持HTTPS的HLS流
- 避免在移动端用HTTP协议访问(部分Android版本限制明文流量),最好配置HTTPS
内容的提问来源于stack exchange,提问作者Ziv Barber
相关产品推荐
相关产品推荐

