专栏首页GoCodingRTSP 流相关工具介绍

RTSP 流相关工具介绍

RTSP (Real Time Streaming Protocol),实时流协议,是一种应用层协议,专为流媒体使用。本文将介绍 GStreamer, VLC, FFmpeg 这几个工具,如何发送、接收 RTSP 流。

前提

  • Ubuntu 18.04 LTS (Bionic Beaver)[1]

GStreamer

安装:

sudo apt install libgstreamer1.0-0 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

查看所有插件:

# conda deactivate
gst-inspect-1.0 -a

播放 ~/Videos/test.mp4 文件:

gst-launch-1.0 filesrc location=~/Videos/test.mp4 ! decodebin ! autovideosink

播放 /dev/video0 webcam:

gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw, format=YUY2, width=640, height=480, framerate=30/1 \
! autovideosink

/dev/video0 相关信息,可见后文“关于 Webcam”。

GStreamer RTSP Server

编译 test-launch 例子:

sudo apt install libgstreamer1.0-dev libgstrtspserver-1.0

git clone https://github.com/GStreamer/gst-rtsp-server.git

cd gst-rtsp-server/
git checkout 1.18

cd examples/
gcc test-launch.c -o test-launch $(pkg-config --cflags --libs gstreamer-rtsp-server-1.0)

test-launch 发送 RTSP 测试流:

$ ./test-launch "videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96"
stream ready at rtsp://127.0.0.1:8554/test

gst-launch 接收 RTSP 测试流:

gst-launch-1.0 playbin uri=rtsp://127.0.0.1:8554/test

发送 RTSP,以 test-launch

发送 ~/Videos/test.mp4 文件:

./test-launch "filesrc location=/home/john/Videos/test.mp4 ! decodebin ! x264enc ! rtph264pay name=pay0 pt=96"

发送 /dev/video0 webcam:

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

接收 RTSP,以 gst-launch

gst-launch-1.0 playbin uri=rtsp://127.0.0.1:8554/test
# or
gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8554/test ! decodebin ! autovideosink

参考

  • GStreamer[2]
    • Installing on Linux[3]
    • Command line tools[4]
    • Plugins[5]
  • GStreamer RTSP Server[6]
  • Stream webcam with GStreamer (RTSP)[7]
  • x264 [error]: baseline profile doesn't support 4:2:2[8]

VLC

安装:

sudo snap install vlc
# allow camera permission
snap connect vlc:camera :camera

查看可用模块:

vlc --list

播放 ~/Videos/test.mp4 文件:

vlc file:///home/john/Videos/test.mp4

播放 /dev/video0 webcam:

vlc v4l2:///dev/video0:chroma=mjpg:width=640:height=480:fps=30

发送 RTSP,以 vlc

发送 ~/Videos/test.mp4 文件:

vlc file:///home/john/Videos/test.mp4 \
--sout '#transcode{vcodec=h264}:rtp{sdp=rtsp://:8554/test}'

发送 /dev/video0 webcam:

vlc v4l2:///dev/video0:chroma=yuyv:width=640:height=480:fps=30 \
--sout '#transcode{vcodec=h264,width=640,height=480}:rtp{sdp=rtsp://:8554/test}'

接收 RTSP,以 vlc

vlc rtsp://127.0.0.1:8554/test

参考

  • VLC[9]
    • Modules/file[10]
    • Modules/v4l2[11]
    • Streaming HowTo/Advanced Streaming Using the Command Line[12]
    • Streaming HowTo/Command Line Examples[13]
  • Ubuntu 18.04 Webcam streaming problem[14]

FFmpeg

安装:

sudo apt install ffmpeg

发送 RTSP,以 ffserver

配置 ffserver.conf

HTTPPort 8091
HTTPBindAddress 0.0.0.0
RTSPPort 1554
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -

<Stream test.mp4>
  File "/home/john/Videos/test.mp4"
  Format rtp
</Stream>

开启 ffserver:

$ nohup ffserver -f ffserver.conf &

$ tail nohup.out
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Wed Apr 21 11:28:39 2021 Opening feed file '/home/john/Videos/test.mp4' for stream 'test.mp4'
Wed Apr 21 11:28:39 2021 FFserver started.

接收 RTSP,以 ffplay

ffplay rtsp://127.0.0.1:1554/test.mp4

参考

  • FFmpeg[15]
    • ffserver[16]
  • Streaming RTSP with ffmpeg?[17]
  • Run real time streaming with ffserver?[18]

关于 Media

$ sudo apt install ffmpeg

$ ffprobe ~/Videos/test.mp4
ffprobe version 3.4.8-0ubuntu0.2 Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/john/Videos/test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:10:22.04, start: 0.000000, bitrate: 4205 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 4204 kb/s, 25 fps, 25 tbr, 1200k tbn, 2400k tbc (default)
    Metadata:
      handler_name    : VideoHandler

关于 Webcam

$ sudo apt install v4l-utils

$ v4l2-ctl --list-devices
HD Webcam: HD Webcam (usb-0000:00:14.0-13):
 /dev/video0
 /dev/video1

$ v4l2-ctl -d 0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
 Index       : 0
 Type        : Video Capture
 Pixel Format: 'MJPG' (compressed)
 Name        : Motion-JPEG
  Size: Discrete 640x480
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 1280x720
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 640x360
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 352x288
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 320x240
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 176x144
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 160x120
   Interval: Discrete 0.033s (30.000 fps)

 Index       : 1
 Type        : Video Capture
 Pixel Format: 'YUYV'
 Name        : YUYV 4:2:2
  Size: Discrete 640x480
   Interval: Discrete 0.033s (30.000 fps)
   Interval: Discrete 0.050s (20.000 fps)
  Size: Discrete 1280x720
   Interval: Discrete 0.100s (10.000 fps)
  Size: Discrete 640x360
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 352x288
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 320x240
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 176x144
   Interval: Discrete 0.033s (30.000 fps)
  Size: Discrete 160x120
   Interval: Discrete 0.033s (30.000 fps)

脚注

[1]Ubuntu 18.04 LTS (Bionic Beaver): http://releases.ubuntu.com/bionic/

[2]GStreamer: https://gstreamer.freedesktop.org/

[3]Installing on Linux: https://gstreamer.freedesktop.org/documentation/installing/on-linux.html

[4]Command line tools: https://gstreamer.freedesktop.org/documentation/tools/index.html

[5]Plugins: https://gstreamer.freedesktop.org/documentation/plugins_doc.html

[6]GStreamer RTSP Server: https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server

[7]Stream webcam with GStreamer (RTSP): https://stackoverflow.com/questions/59068026/stream-webcam-with-gstreamer-rtsp

[8]x264 [error]: baseline profile doesn't support 4:2:2: http://gstreamer-devel.966125.n4.nabble.com/x264-error-baseline-profile-doesn-t-support-4-2-2-td4689099.html

[9]VLC: https://www.videolan.org/vlc/

[10]Modules/file: https://wiki.videolan.org/Documentation:Modules/file/

[11]Modules/v4l2: https://wiki.videolan.org/Documentation:Modules/v4l2/

[12]Streaming HowTo/Advanced Streaming Using the Command Line: https://wiki.videolan.org/Documentation:Streaming_HowTo/Advanced_Streaming_Using_the_Command_Line/

[13]Streaming HowTo/Command Line Examples: https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples

[14]Ubuntu 18.04 Webcam streaming problem: https://askubuntu.com/questions/1224092/ubuntu-18-04-webcam-streaming-problem

[15]FFmpeg: http://www.ffmpeg.org/

[16]ffserver: http://trac.ffmpeg.org/wiki/ffserver

[17]Streaming RTSP with ffmpeg?: https://superuser.com/questions/1420328/streaming-rtsp-with-ffmpeg

[18]Run real time streaming with ffserver?: https://stackoverflow.com/questions/37403282/is-there-anyone-who-can-successfully-run-real-time-streaming-with-ffserver

文章分享自微信公众号:
GoCoding

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 爬虫相关工具介绍

    在开始讲解爬虫之前,我们稍微对HTTP(超文本传输协议)做一些回顾,因为我们在网页上看到的内容通常是浏览器执行HTML语言得到的结果,而HTTP就是传输HTML...

    用户8442333
  • vuejs及相关工具介绍

    王小婷
  • EasyNVR如何获取RTSP格式的视频流?三种获取RTSP地址方式介绍

    在使用平台EasyNVR的过程中,部分用户提出需要调用RTSP地址的需求,主要是将EasyNVR内的视频流转为RTSP的格式,放到其他平台使用。其实这个需求可以...

    TSINGSEE青犀视频
  • EasyNVR如何获取RTSP格式的视频流?三种获取RTSP地址方式介绍

    在使用平台EasyNVR的过程中,部分用户提出需要调用RTSP地址的需求,主要是将EasyNVR内的视频流转为RTSP的格式,放到其他平台使用。其实这个需求可以...

    EasyNVR
  • 海康硬盘录像机接入摄像机RTSP流的步骤介绍

    TSINGSEE青犀视频各大平台都是可以接入摄像机及硬盘录像机的,比如EasyNVR这样的平台,如果接入硬盘录像机的话,则需要从录像机上取RTSP流接入进平台,...

    TSINGSEE青犀视频
  • Web无插件RTSP视频流直播系统EasyNVR搭建多nginx实现分流方法介绍

    大家都知道,如果一个服务器接入大量的进程或者任务,很可能会造成卡顿,比如在使用EasyNVR进行视频直播分发时,nginx接入传输量比较大的视频流,会导致PC端...

    EasyNVR
  • Web无插件RTSP视频流直播系统EasySearcher探测工具无法运行是什么原因?

    EasyNVR分为硬件版本和软件版本,两者实际功能大致相同,但是与软件版本不同的是,硬件版本的配置多了一个探索及接入的步骤,才能实现部署,探索需要用到TSING...

    EasyNVR
  • 视频流媒体服务器RTSP拉流、RTMP推流方案三大授权方式使用介绍之加密狗授权方法详解

    由于EasyNVR的受众越来越多,时常会遇到很多类似的问题咨询,之前虽然有写过很多的博文进行技术的或者使用问题的解答,随着客户询问的增多,我发现,要想让客户了解...

    EasyNVR
  • 最近进行的一次技术选型(工作流引擎)及相关知识介绍

    最近有个新项目,需要实现类似工作流引擎的效果,如果不知道是啥,看完本文就懂了。公司内其实也有些自研的,可能就是不像开源的这些那样,还支持这个那个规范,都是基于需...

    曹工
  • 通过Onvif设备探索获取EasyNVR网页无插件播放所需要的摄像机硬盘录像机NVR的RTSP地址

    想实现网络监控摄像头进行视频直播的朋友门应该知道,方法其实非常简单,你不需要使用支持直播的网络摄像机,只需要经过一套流媒体服务器将监控摄像头的RTSP视频流转为...

    EasyNVR
  • 如何通过Wireshark抓包分析视频结构化图像智能分析系统EasyNVR的RTSP流交互协议?

    在很多情况下,如果EasyNVR或者EasyGBS出现了问题,我们排查的方法通常有两个,一个是通过检查日志找出报错,另一个是通过wireshark抓包工具来判断...

    EasyNVR
  • 如何通过Wireshark抓包分析视频结构化图像智能分析系统EasyNVR的RTSP流交互协议?

    在很多情况下,如果EasyNVR或者EasyGBS出现了问题,我们排查的方法通常有两个,一个是通过检查日志找出报错,另一个是通过wireshark抓包工具来判断...

    TSINGSEE青犀视频
  • EasyNVR拉流成功后快照正常但实际不能播放解决方法

    RTSP协议是TCP/IP协议体系中的一个应用层协议,EasyNVR视频平台即是支持RTSP协议的流媒体服务器,能够自由对接流媒体服务器平台,支持微信、QQ、支...

    EasyNVR
  • EasyNVR拉流成功后快照正常但实际不能播放的解决方法

    RTSP协议是TCP/IP协议体系中的一个应用层协议,EasyNVR视频平台即是支持RTSP协议的流媒体服务器,能够自由对接流媒体服务器平台,支持微信、QQ、支...

    TSINGSEE青犀视频
  • 如何使用OBS推流工具推送视频流到RTSP协议安防视频可视化平台EasyNVR中进行录像?

    TSINGSEE青犀视频云-边-端系统三层架构产品中经常需要测试或者对比,以获得不同情况下产品的运行性能。比如在测试EasyNVR录像时,我们可以使用不同的推流...

    EasyNVR
  • 零基础实现摄像头的全平台直播 (一)内网直播的实现

    我是一个个体户,没有任何计算机基础知识,但是我有个店面,有几个摄像头,我想在网站上看到我的摄像头或者用手机微信也可以看到我的摄像头视频?

    EasyNVR
  • RTSP视频平台EasyNVR作为下级平台通过GB28181级联传输视频流时的多播Multicast协议介绍

    在RTSP协议的拉流传输中,我们知道最常见的传输协议肯定是UDP和TCP了,TSINGSEE青犀视频云边端架构视频平台比如国标GB28181平台EasyGBS及...

    EasyNVR
  • 如何通过设备探索获取EasyNVR、EasyDSS所需要的摄像机rtsp地址

    使用EasyNVR和EasyDSS的用户都知道,我们的产品是使用rtsp流来进行设备与服务的接入,因此对于设备的rtsp地址的获取就变的格外重要。本篇博客将着重...

    EasyNVR

扫码关注云+社区

领取腾讯云代金券