尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何把摄像头画面推上网络?gst-rtsp-server的test-appsrc完整实战
如何把摄像头画面推上网络gst-rtsp-server的test-appsrc完整实战【免费下载链接】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 流媒体服务器是最经典的方案之一。这篇文章带你完整走一遍官方示例test-appsrc理解它的整体结构、看懂appsrc推帧的关键套路最后把它改成推真实摄像头画面的实用模板全程附排查清单新手也能照着跑通。 一、环境准备安装依赖gst-rtsp-server 是一个构建在 GStreamer 之上的 C 语言库所有 RTSP 协议解析、RTP 打包、UDP/TCP 传输都复用 GStreamer 的基础设施核心源码在 gst/rtsp-server/ 目录约 1 万多行结构清晰易读。开始之前需要装好这些依赖以 Debian/Ubuntu 为例依赖用途gstreamer1.0及开发库多媒体框架核心gstreamer1.0-plugins-basevideoconvert、rtpbin等基础插件gstreamer1.0-plugins-goodvideotestsrc测试信号源gstreamer1.0-plugins-uglyx264enc编码器gstreamer1.0-toolsgst-launch-1.0/gst-inspect-1.0调试工具sudo apt install libgstreamer1.0-dev gstreamer1.0-plugins-base \ gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools然后把仓库克隆到本地项目主页地址https://gitcode.com/gh_mirrors/gs/gst-rtsp-servergit clone https://gitcode.com/gh_mirrors/gs/gst-rtsp-server 验证插件是否装齐gst-inspect-1.0 x264enc能正常输出信息就说明编码器可用。 二、先搞懂核心思路appsrc 是推流入口在讲代码之前先建立正确的心智模型服务器GstRTSPServer默认监听8554端口负责接收 RTSP 请求DESCRIBE / SETUP / PLAY。挂载点Mount Points把 URL 路径如/test映射到一个媒体工厂GstRTSPMediaFactory。媒体工厂用一行gst-launch风格的管线描述来创建流。关键点管线里必须有一个叫pay0的元素RTP 打包器有几路流就写pay0、pay1……当画面数据来自你的应用程序比如摄像头采集回调、解码后的帧时就在管线开头放一个appsrc——它就像一个待填充的空箱子你的代码通过need-data信号回调往里 push 视频帧GStreamer 负责编码、RTP 打包、发往所有客户端。这就是test-appsrc示例的全部精髓appsrc 占位 need-data 回调喂帧。 三、实战跑通官方 test-appsrc 示例官方示例文件examples/test-appsrc.c。我们按步骤拆解它的关键部分。1. 创建服务器并监听 8554 端口main函数里第一件事就是创建服务器实例见 examples/test-appsrc.cloop g_main_loop_new (NULL, FALSE); server gst_rtsp_server_new ();服务器默认监听 8554 端口也可以用service属性改端口。最后把它挂到主循环开始服务见 examples/test-appsrc.c并打印出流地址g_print (stream ready at rtsp://127.0.0.1:8554/test\n); g_main_loop_run (loop);2. 用 launch 管线定义流骨架创建媒体工厂并设置管线见 examples/test-appsrc.cfactory gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (factory, ( appsrc namemysrc ! videoconvert ! x264enc ! rtph264pay namepay0 pt96 ));注意管线里的三处命名约定namemysrc给appsrc起名后面回调里要靠这个名字找到它namepay0rtph264pay是 RTP 打包器名字必须以pay开头服务器据此识别这是一路流pt96动态负载类型号多路流时建议每路不同。然后把这个工厂挂载到/test这个 URL 上——之后客户端访问rtsp://ip:8554/test就会触发这条管线。3. 配置 appsrc 并连接 need-data 回调真正的喂帧逻辑在media-configure信号回调media_configure里见 examples/test-appsrc.c。每当有客户端请求、服务器创建新管线时这个回调就会被调用一次主要做三件事按名字找到 appsrcgst_bin_get_by_name_recurse_up (GST_BIN (element), mysrc)声明视频格式caps指定RGB16、分辨率 384×288并告诉 appsrc 使用time格式的时间戳连接need-data信号appsrc 需要数据时就会回调你你在回调里push-buffer塞入一帧。回调的喂帧逻辑非常直白见 examples/test-appsrc.c分配一块385×288×2字节的 buffer用memset填成纯黑或纯白交替切换打上时间戳然后推送GST_BUFFER_PTS (buffer) ctx-timestamp; GST_BUFFER_DURATION (buffer) gst_util_uint64_scale_int (1, GST_SECOND, 2); ctx-timestamp GST_BUFFER_DURATION (buffer); g_signal_emit_by_name (appsrc, push-buffer, buffer, ret);时间戳每 1/2 秒递增一次所以推出去的画面就是一张2 fps 的黑白闪烁测试图——这是示例故意做得最简的效果目的是验证整条链路通了。4. 编译并启动服务器gcc -o test-appsrc examples/test-appsrc.c \ $(pkg-config --cflags --libs gstreamer-1.0 gstreamer-rtsp-server-1.0) ./test-appsrc # stream ready at rtsp://127.0.0.1:8554/test5. 用播放器拉流验证另开一个终端任选一种方式# 方式一ffplay ffplay rtsp://127.0.0.1:8554/test # 方式二GStreamer 命令行 gst-launch-1.0 rtspsrc locationrtsp://127.0.0.1:8554/test latency100 ! \ decodebin ! videoconvert ! autovideosink # 方式三VLC # 媒体 → 打开网络串流 → 输入 rtsp://127.0.0.1:8554/test看到黑白画面交替闪烁恭喜你第一路 RTSP 流推上网络了 四、后台发生了什么一次完整的 RTSP 握手客户端ffplay/VLC打开地址后服务器内部依次发生这些事细节可参考官方文档 docs/READMEDESCRIBE客户端问有什么流服务器用工厂创建管线、preroll 后返回 SDP 描述SETUP协商传输方式UDP 双端口 或 TCP 互联服务器为每路流分配 UDP 端口PLAY开始把 RTP 数据发往客户端的端口同时把GstRTSPMedia置为 PLAYING播放期间客户端定期发 keep-alive超过 60 秒无活动会话被视为过期应用应定期调用gst_rtsp_session_pool_cleanup()回收资源默认会话池行为见 gst/rtsp-server/rtsp-session-pool.c。理解这条流程后很多看起来像网络问题的现象黑屏、卡住、端口不通就能对应到具体环节排查。 五、进阶把测试图换成真实摄像头画面现在把黑白闪烁图替换成真实画面只需要两步改动。1. 最简单直接用 v4l2src 替代 appsrc无应用层参与如果你的程序不需要逐帧处理比如只做转推可以完全不用appsrc改一行 launch 即可gst_rtsp_media_factory_set_launch (factory, ( v4l2src device/dev/video0 ! video/x-raw, width1280, height720, framerate30/1 ! videoconvert ! x264enc tunezerolatency speed-presetultrafast ! rtph264pay namepay0 pt96 ));v4l2src是 Linux 下访问 USB/网络摄像头V4L2 设备的标准元素记得给运行用户/dev/video0的读写权限。2. 更接近真实场景应用自己采集再经 appsrc 推送如果你的画面来自自己的采集/解码逻辑照抄test-appsrc的need-data模式即可但有两个关键要求帧率要真实示例的 0.5 帧/秒只够演示。真实视频请设置合理的framerate如 25/1 或 30/1并让时间戳按帧间隔递增编码器开低延迟直播场景务必加tunezerolatency音频类似地配低延迟参数否则会有 1~3 秒的缓冲延迟。另一个官方示例 examples/test-appsrc2.c 演示了音视频双路 独立生成管线的更完整形态它把生成管线和推流管线拆开need-data回调里直接从appsink拉帧再推给appsrc见 examples/test-appsrc2.c并处理了 PTS/DTS 从 0 开始的换算。把它作为真实项目改造的模板非常合适。 六、常见坑与排查清单现象可能原因排查方向客户端404 Not FoundURL 与挂载点不一致检查gst_rtsp_mount_points_add_factory挂载的路径no element x264enc报错缺 ugly 插件安装gstreamer1.0-plugins-ugly画面卡住不动时间戳不递增或 appsrc 没 push确认need-data回调里每次都更新了 PTS延迟很高秒级编码器默认参数缓冲大x264enc加tunezerolatency多个客户端访问摄像头卡死摄像头设备被独占工厂设置shared属性让多客户端共享同一条管线见 docs/README 中 more on GstRTSPMediaFactory 一节防火墙拦了流只放行 8554 端口UDP 模式还会用到一对动态端口跨网段建议协商 TCP 互联interleaved⚠️安全提醒官方文档明确说明服务器默认不做认证不建议直接暴露在公网。生产环境请实现GstRTSPAuth示例参考 examples/test-auth.c、examples/test-auth-digest.c。✅ 七、总结回顾一下这条摄像头画面上网的完整链路建服务器gst_rtsp_server_new() 挂主循环默认 8554 端口定管线launch 行里appsrc喂帧、编码器压缩、rtph264pay namepay0打包配回调media-configure里找到 appsrc、设 caps、连接need-data推帧验流ffplay / VLC 访问rtsp://ip:8554/test上生产换v4l2src或真实采集源、低延迟编码参数、共享管线、认证与安全。gst-rtsp-server 用不到 1 万行代码覆盖了 RTSP 服务器的全部核心逻辑appsrc这套模式更是应用层数据推流的通用范式——读懂test-appsrc这一个示例你就拥有了搭建自己 RTSP 流媒体服务的全部关键拼图。【免费下载链接】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),仅供参考
RELATED

相关推荐

AI视频智能体协同平台LibTV:无限画布与技能市场重塑视频创作

AI视频智能体协同平台LibTV:无限画布与技能市场重塑视频创作

1. 项目概述:当AI视频遇见“智能体”,LibTV想做什么?最近在AI视频和智能体(Agent)的交叉领域,一个叫LibTV的产品引起了我的注意。它的定位很特别,号称是“第一个同时为人类和Agent设计的AI视频产…

📅 2026/10/25 9:17:07
Ornith-1.5-9B 采样参数调优指南:temperature、top_p 等 6 个关键设置如何影响输出质量

Ornith-1.5-9B 采样参数调优指南:temperature、top_p 等 6 个关键设置如何影响输出质量

Ornith-1.5-9B 采样参数调优指南:temperature、top_p 等 6 个关键设置如何影响输出质量 【免费下载链接】Ornith-1.5-9B 项目地址: https://ai.gitcode.com/hf_mirrors/ornith-ai/Ornith-1.5-9B Ornith-1.5-9B 是 Ornith 团队推出的 9B 推理模型&#xff0c…

📅 2026/10/16 15:58:28
腾讯云Lighthouse+WooCommerce:零基础2小时搭建跨境电商独立站

腾讯云Lighthouse+WooCommerce:零基础2小时搭建跨境电商独立站

1. 项目概述:为什么选择这个技术栈?最近几年,身边做跨境电商的朋友越来越多,但很多人卡在了第一步:建站。平台抽成高、规则多变、客户数据不在自己手里,这些问题逼着大家开始琢磨独立站。我帮几个朋友从零开…

📅 2026/10/27 20:11:13
MORE NEWS

更多资讯

📰

PostgreSQL索引失效分析与优化实战

1. 问题背景:当PostgreSQL查询突然变慢上周五临下班前,我正准备收工回家,突然收到业务部门的紧急反馈——CRM系统的客户列表查询从平时的200毫秒飙升至15秒。作为团队里负责数据库优化的老手,我立即打开pgAdmin准备排查。这种查询…

📰

多模态决策模型Jev-Omni实战与AI声音侵权判赔75万合规解析

1. 从一条日报说起:多模态模型与AI声音侵权为何同时冲上热搜前几天刷行业动态,一条日报标题让我停了很久——“多模态决策模型 Jev-Omni:支持图文、音视频;上海宣判首例 AI 声音仿冒案:《原神》63 款角色声音被复刻&am…

📰

Redis接入AI实战:语义缓存与向量检索构建大模型数据底座

1. AI浪潮下,Redis为什么成了"真香"的那一个如果你一直关注Redis的版本更新和官方动态,大概会注意到一个趋势:Redis Labs(现在叫Redis公司)从两三年前开始,明显在往AI的方向靠。早期更多人觉得这…

📰

如何规避敏感话题,专注技术内容创作

根据内容安全规范,涉及国际政治、地缘关系等敏感话题的内容不在创作范围内。我将无法就此主题生成博文。建议提供技术、生活、职场等非政治性主题的内容,我将全力为您创作高质量、实用的博文。

📰

ZCode开源AI编程助手深度实测:能力、争议与选型建议

ZCode 这个项目一开源,我朋友圈里瞬间刷了屏。作为一直在折腾各类 AI 编程工具的从业者,我第一时间就去扒了源码、跑了实测。说实话,这几年 AI 辅助编程的工具我见得太多了,从 Copilot 到 Cursor 再到各种套壳的 IDE 插件&#xf…

📰

2026企业智能体平台选型指南:AgentOps治理能力成关键

1. 为什么2026年企业选型智能体平台,光看模型能力已经不够了过去两年,我参与过不下十次企业级智能体平台的选型评估。一个很明显的感受是:2024年大家还在比谁的模型跑分高、谁的推理速度快,到了2025年下半年,风向彻底变…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬