告别手写管线:用gst-rtsp-server的MediaFactory和挂载点5行代码开播
【免费下载链接】gst-rtsp-serverRTSP server based on GStreamer. This module has been merged into the main GStreamer repo for further development.项目地址: https://gitcode.com/gh_mirrors/gs/gst-rtsp-server
gst-rtsp-server是基于 GStreamer 的 RTSP 流媒体服务器库,它把 RTSP 协议处理、RTP 打包、会话管理全部封装好,开发者只需声明"推什么流、挂在哪个 URL"。本文带你认识它的两大核心组件——MediaFactory(媒体工厂)和挂载点(MountPoints),5 行代码就能开播 🎬。
为什么别再手写 RTSP 管线?
如果只用 GStreamer,你要自己处理:RTSP 信令(DESCRIBE/SETUP/PLAY)、RTP 打包、多客户端会话、UDP 端口分配……动辄几百行。
而 gst-rtsp-server 的思路是:你只管声明管线,剩下的它全包。服务器内部由GstRTSPServer统一管理会话池、挂载点、认证和线程池,默认监听8554端口。
两个核心概念,一看就懂
🏭 MediaFactory:用 gst-launch 语法"生产"管线
GstRTSPMediaFactory负责为请求创建媒体管线。默认实现直接接受gst-launch 语法字符串,你平时用gst-launch-1.0写的管线可以原样搬进来,只需要遵守一个约定:
每个流必须有一个命名为
pay0、pay1…… 的负载器(payloader),服务器会按这个名字自动找出流。
定义见 rtsp-media-factory.h 对应的gst/rtsp-server/rtsp-media-factory.h。
📍 挂载点:把 URL 和工厂连起来
GstRTSPMountPoints是一张URL → MediaFactory 的路由表。客户端请求rtsp://主机:8554/test时,服务器就去找/test挂的是哪个工厂,再由它生产管线。接口在gst/rtsp-server/rtsp-mount-points.h。
5 行代码开播:最小可运行骨架
/* 5行核心代码:声明工厂、挂管线、挂URL */ mounts = gst_rtsp_server_get_mount_points (server); factory = gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (factory, "( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )"); gst_rtsp_mount_points_add_factory (mounts, "/test", factory);加上gst_rtsp_server_new ()、gst_rtsp_server_attach (server, NULL)和主循环,一个 RTSP 服务就起来了。完整可编译示例就在仓库里:
examples/test-readme.c—— 最小示例,与上面 5 行一一对应examples/test-video.c—— 音视频双流 + 认证 + TLS 的完整演示examples/test-launch.c—— 直接命令行传入任意 launch 行开播
想本地体验可以先克隆仓库:
git clone https://gitcode.com/gh_mirrors/gs/gst-rtsp-server验证:播放器打开即可播
服务启动后终端会打印stream ready at rtsp://127.0.0.1:8554/test,用 VLC 或gst-play-1.0打开这个地址,就能看到这个 H.264 测试信号 📺
高频配置项速查表
| 方法 | 作用 | 什么时候用 |
|---|---|---|
gst_rtsp_media_factory_set_shared | 多客户端共享同一条管线 | 摄像头等独占设备、直播流 |
gst_rtsp_media_factory_set_enable_rtcp | 开启 RTCP 反馈 | 统计丢包、自适应码率 |
gst_rtsp_media_factory_set_latency | 增加发送缓冲延迟 | 弱网环境防卡顿 |
gst_rtsp_server_set_service | 修改监听端口 | 避免 8554 端口冲突 |
默认情况下每个客户端都会新建一条管线;直播摄像头场景务必set_shared (factory, TRUE),否则多个观众会抢设备。
常见问题排查
❓ 打开 URL 返回 404挂载点没挂对:确认add_factory的路径和请求的 URL 一致(/test≠/test/),且工厂在attach之前挂好。
❓ 401 Unauthorized服务器上配了认证(GstRTSPAuth)而播放器没带凭据。参考examples/test-auth.c了解 Basic 认证与角色权限的写法。
❓ 管线加了却不出流检查pay%d命名——名字写错(如pay、payload0)服务器就找不到负载器。
❓ 客户端卡住不动记得周期性调用gst_rtsp_session_pool_cleanup ()清理超时会话,examples/test-video.c里的timeout回调就是干这个的。
延伸阅读
docs/README—— 官方 HOWTO,从初始化到会话管理的完整讲解gst/rtsp-server/—— 服务器核心源码,约 11000 行,可读性很好examples/—— 覆盖认证、多播、ONVIF、录播等十几个场景的现成模板
💡 小贴士:默认工厂只支持 launch 字符串?仓库还提供了
GstRTSPMediaFactoryURI(按 URL 动态建流),见gst/rtsp-server/rtsp-media-factory-uri.h,适合"一个挂载点服务多个文件"的场景。
掌握MediaFactory + 挂载点这两块拼图,你就不再需要手写任何 RTSP 底层代码——声明管线、挂上 URL,剩下的交给 gst-rtsp-server。🚀
【免费下载链接】gst-rtsp-serverRTSP server based on GStreamer. This module has been merged into the main GStreamer repo for further development.项目地址: https://gitcode.com/gh_mirrors/gs/gst-rtsp-server
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考