前言

  Gstreamer还有一个重要的功能就是充当rtsp流媒体服务器。

 

注意

  本ubuntu是虚拟机,对延迟可能影响较大,延迟可作为参考,物理机可能更快。

 

Demo

  

 

RTP和RTSP支持

  GStreamer对RTP和RTSP都有很好的支持,其RTP/RTSP栈多年来已被广泛应用于各种关键任务和低延迟场景的生产中,从小型嵌入式设备到大型视频会议和指挥控制系统。

安装gst和gst-rtsp-server

安装gstreamer1.0环境

sudo apt-get update
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
sudo apt-get install libglib2.0-0

查看本地gst版本

  

下载对应版本GStreamer-rtsp-server

  下载地址:https://gstreamer.freedesktop.org/src/gst-rtsp-server/
  

 

Ubuntu编译gstreamer-rtsp-server

步骤一:下载解压

cd ~/work/src
tar xvf gst-rtsp-server-1.16.3.tar.xz

  

步骤二:配置

cd gst-rtsp-server-1.16.3/
./autogen.sh

  

步骤三:出现配置错误“gtk-doc >= 1…12”

  

sudo apt-get install gtk-doc-tools

  继续:

./autogen.sh

  完成:
  

步骤四:编译

make -j4
make

  

  

步骤五:安装部署

sudo make install

  

  

步骤六:测试gst-rtsp-server

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! mpph264enc ! rtph264pay name=pay0 pt=96 )"

  

./test-launch “( videotestsrc ! video/x-raw,width=640,height=480,framerate=30/1 ! timeoverlay ! tee name=vsrc vsrc. ! queue ! videoconvert ! ximagesink vsrc. ! queue ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )”

  

  

  关掉防火墙重启,再次连接:
  

  检查摄像头支持的格式:
  

  推送测试视频流:

./test-launch "( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )"

  

  继续测试摄像头,增加调试宏:
  

  

  整理如下:
  

  将:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=30/1 ! queue ! x264enc ! rtph264pay name=pay0 pt=96 )"

  改为:

./test-launch "(  v4l2src device=/dev/video0 ! video/x-raw, format='YUY2', width=640, height=480, framerate=30/1  ! queue ! x264enc ! rtph264pay name=pay0 pt=96 )"

  继续,报错:
  

  修改:

GST_DEBUG=1 ./test-launch "( v4l2src device=/dev/video0 ! video/x-raw, format=YUY2, width=640, height=480, framerate=30/1  ! queue ! x264enc ! rtph264pay name=pay0 pt=96 )"

  继续:
  

  修改:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! queue ! videoconvert ! x264enc ! rtph264pay name=pay0 pt=96 )"

  继续,播放了,延迟4-5s左右:
  

  优化参数:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! queue ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

  继续,延迟还有1.4s左右:
  

  继续优化:

./test-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

  还是1.4s左右:
  

步骤七:使用image/jepg格式

./test-launch "( v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

  

  修改为:

GST_DEBUG=1 ./test-launch "( v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! jpegdec ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay name=pay0 pt=96 )"

  

 

与live555直接在getNextFramed对比

  

   

  此方法需要2秒多,且用的是mpeg。

GStreamer开发笔记(九):gst-rtcp-server安装和部署实现简单的rtsp-server服务器推流Demo的更多相关文章

  1. Lucene/Solr搜索引擎开发笔记 - 第2章 Solr安装与部署(Tomcat篇)

    一.安装环境 图1-1 Tomcat和Solr的版本 我本机目前使用的Java版本为JDK 1.8,因为Solr 4.9要求Java版本为1.7+,请注意. 二.Solr部署到Tomcat流程 图1- ...

  2. Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)

    一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...

  3. Flume1.9.0的安装、部署、简单应用(含分布式、与Hadoop3.1.2、Hbase1.4.9的案例)

    目录 目录 前言 什么是Flume? Flume的特点 Flume的可靠性 Flume的可恢复性 Flume的一些核心概念 Flume的官方网站在哪里? Flume在哪里下载以及如何安装? 设置环境变 ...

  4. Zend Server安装后首次运行就出现Internal Server Error的解决

    无论是使用哪个版本的Zend Server来搭建PHP服务器,首次运行都会出现Internal Server Error的错误,对很多新手而言,每当看到这种错误时,那一刻内心绝对都是崩溃的.然而,这个 ...

  5. Zend Server安装后首次运行就出现Internal Server Error的解决(转)

    新近学习php,结果装了Zend Server上来就报错,网上找到了解决方法,照着做果然可行,转之. 刚才安装了Zend Server,安装后首次运行就爆出了一个Internal Server Err ...

  6. Nodejs学习笔记(1) Nodejs安装+借助express模块简单部署服务器

    1 安装 1.1 下载和安装 1.2 什么是REPL?如何使用? 1.3 npm对单一模块的安装和删除功能 1.4 通过package.json自定义模块(安装模块) 1.5 设置全局目录 2 部署网 ...

  7. 吴裕雄--天生自然Django框架开发笔记:Django Nginx+uwsgi 安装配置

    Django Nginx+uwsgi 安装配置 使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,需要一个可以稳定而持续的服务器,比如 ...

  8. Android开发笔记之《Window下安装Ubuntu双系统,Grub无法显示Window选项》

    解决方法是: 在terminal里面输入: sudo update-grub 会找到windows的grub 重启电脑就可以了.

  9. Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

    前言   mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5 ...

  10. Qt+ECharts开发笔记(三):ECharts的柱状图介绍、基础使用和Qt封装Demo

    前言   上一篇成功是EChart随着Qt窗口变化而变化,本篇将开始正式介绍柱状图介绍.基础使用,并将其封装一层Qt.  本篇的demo实现了隐藏js代码的方式,实现了一个条形图的基本交互方式,即Qt ...

随机推荐

  1. Spring创建Bean的三种方式及Bean的生命周期

    目录 Spring创建Bean的三种方式及Bean的生命周期 Spring创建Bean的三种方式 第一种方式:使用默认构造函数创建 第二种方式:使用普通工厂中的方法创建对象 第三种方式:使用工厂中的静 ...

  2. 通过adb访问SQLite数据库

    根据<第一行代码>第二版进入到数据库的文件夹,但是如果照书本直接cd data/data/包名/databases 的话是会报错的,错误信息如下 cd: /data/data/包名 /da ...

  3. 通过cmd/批处理 开启关闭windows中的mysql数据库

    目录 cmd 开启关闭mysql 批处理 开启关闭mysql 每次通过服务开启关闭mysql太麻烦,可以通过cmd或批处理来解决 cmd 开启关闭mysql cmd需要使用管理员打开 //开启mysq ...

  4. Go 1.22 相比 Go 1.21 有哪些值得注意的改动?

    本系列旨在梳理 Go 的 release notes 与发展史,来更加深入地理解 Go 语言设计的思路. https://go.dev/doc/go1.22 Go 1.22 值得关注的改动: for ...

  5. SpringBoot 在IDEA中用MAVEN打包报错

    今天在打包的时候遇到一个报错,项目可以正常运行但是就是无法使用MAVEN 的insert和package进行打包 报错如下 [ERROR] Tests run: 1, Failures: 0, Err ...

  6. odoo里面的动作

    来源:Odoo中的五种action都是继承自ir.actions.actions模型实现的子类,共有五种,下面会一个一个给出具体例子 1.链接Action(ir.actions.act_url):ta ...

  7. 启智树提高组day1T1 3436 : A:Doughnut

    启智树提高组day1T1 3436 : A:Doughnut 原题传送门 题目描述 Aloisia有很多很多甜甜圈.有一天,她在地上画了n+1个格子,想从第1个格子跳到第n+1个格子.规则是,Aloi ...

  8. 解决 Electron 安装失败问题的实用指南

    遇到安装失败问题? 在国内或其他网络受限的环境中,安装 Electron 时可能会遇到各种错误.以下是一些解决这些问题的有效方法. 如果您在Electron-Egg安装过程中遇到安装npm包报错的问题 ...

  9. Ceph性能测试

    一.测试分类 ceph的性能测试包含rados性能测试和rbd性能测试 二.测试工具 rados性能测试工具:使用ceph自带的rados bench工具.rados losd-gen工具 rbd性能 ...

  10. Web前端入门第 68 问:JavaScript 事件循环机制中的微任务与宏任务

    JS 是单线程语言.这句话对不对? 按照目前的情况来看,JS 自从支持了 Web Worker 之后,就不再是单线程语言了,但 Worker 的工作线程与主线程有区别,在 Worker 的工作线程中无 ...