前言

  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. SpringBoot3启动报错 java.lang.ClassNotFoundException: java.text.ListFormat

    问题 在使用SpringBoot3创建web项目的时候日志报错java.lang.ClassNotFoundException: java.text.ListFormat. 具体报错如下: java. ...

  2. maven配置jdk版本

    修改默认的jdk版本 在maven安装目录 apache-maven-3.6.1\conf\setting.xml 添加 <profile> <id>jdk18</id& ...

  3. 经济订货量之"最优经济订货批量和平均存货量和最佳订货次数和订货间隔期和保管费用率"

    案例一(最佳订货量) 案例二(最佳订货量+平均存货量) 年需求 = 每周需求*52周 案例三(保管费用率案例和最佳订货量) 保管费用率案例 案例四(最佳订货批量 + 最佳订货次数) 案例五(最佳订货量 ...

  4. django实例(2)

    S14day19---->urls.py from django.contrib import adminfrom django.conf.urls import url,includeurlp ...

  5. AI 狂飙时代,开源项目的新机遇?

    我每天都会刷 GitHub 热榜,围观全球开发者们都在捣鼓啥新鲜的玩意儿.我真切地感受到 AI 的浪潮汹涌而至,它正以一种摧枯拉朽(这个词可能有点猛,但感觉就是这么快!)的速度,改变着软件开发行业,同 ...

  6. 网络编程:阻塞I/O和进程模型

    父进程和子进程 进程是程序执行的最小单位,一个进程有完整的地址空间.程序计数器等,如果想创建一个新的进程,使用函数 fork 就可以 pid_t fork(void) 返回:在子进程中为0,在父进程中 ...

  7. AI 极客低代码平台快速上手 --生成Python代码

    1.侧栏菜单选择"Python": 点击代码区右上角的"代码魔法棒"图标,在弹出的确认面板中点击"确认"按钮,一秒生成基于FastApi最新 ...

  8. Linux 在文件中统计关键字出现的次数

    摘要:在当前文件或者当前目录下所有文件中,使用Linux命令grep.awk.sed.rg或者cat统计关键字出现的次数. 目录 问题背景 解决办法 使用grep和wc命令 使用awk命令模式匹配 使 ...

  9. 【中文】【吴恩达课后编程作业】Course 2 - 改善深层神经网络 - 第三周作业

    [中文][吴恩达课后编程作业]Course 2 - 改善深层神经网络 - 第三周作业 - TensorFlow入门 上一篇:[课程2 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:[课程3 ...

  10. 现在的AI还能写出短剧剧本了?

    本文由 ChatMoney团队出品 现在大家打开抖音.小红书,琳琅满目,目光所能及的都是各种吸精剧情的小短剧,虽然这些短剧的制作成本低,但是作为编剧的要写脚本,可不认为这么容易啊......... 接 ...