树莓派4通过GStreamer推流视频,客户端点击播放后持续加载无画面
解决建议
核心问题:Playlist中的TS文件链接缺失端口
你的GStreamer命令中playlist-root参数只指定了IP,没有加上HTTP服务的8080端口,导致生成的playlist.m3u8里的TS文件地址是http://123.456.78.910/segment_xxxx.ts,而实际HTTP服务在8080端口,浏览器无法找到这些文件,因此一直加载无画面。
修复步骤
- 修改GStreamer推流命令,给
playlist-root加上端口:
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, width=640, height=480, framerate=30/1 ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! x264enc tune=zerolatency speed-preset=ultrafast ! mpegtsmux ! hlssink playlist-root=http://123.456.78.910:8080 location=/home/pi/cam/segment_%05d.ts target-duration=5 max-files=5
额外添加
speed-preset=ultrafast参数,进一步降低编码延迟,适配实时推流场景。
- 重启推流和HTTP服务:
- 终止原有的gst-launch和Python HTTP服务进程
- 重新执行修改后的推流命令,确认进入PLAYING状态
- 重新在
/home/pi/cam目录启动HTTP服务
额外排查验证步骤
- 直接测试TS文件访问:在电脑浏览器中访问
http://123.456.78.910:8080/segment_00001.ts,如果能下载或播放,说明文件共享正常;如果返回404,检查:- 推流命令是否生成了非0字节的TS文件(查看
/home/pi/cam目录下的文件大小) - HTTP服务是否确实在
/home/pi/cam目录启动
- 推流命令是否生成了非0字节的TS文件(查看
- 验证编码环节:在树莓派本地生成测试视频,确认摄像头和编码功能正常:
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, width=640, height=480, framerate=30/1 ! videoconvert ! x264enc tune=zerolatency ! mp4mux ! filesink location=test.mp4
用本地播放器打开test.mp4,确认有正常画面。
- 查看HTTP服务日志:点击播放后,观察Python HTTP服务的终端输出,如果没有TS文件的GET请求,说明playlist地址错误;如果有404响应,检查路径匹配问题。
内容的提问来源于stack exchange,提问作者Benyameen Nissley
相关产品推荐
相关产品推荐

