
 
我年轻时很穷,努力了几年,终于不再年轻了
- 0. 一些概念
- 参考文献
0. 一些概念
- RTSP服务、RTSP推流、RTSP拉流,缺一不可,尤其是RTSP服务。
- RTSP服务器、RTSP客户端。推流和拉流都是由客户端发起,向服务器发起对应的请求。RTSP推流一般由RTSP相机或app发起,RTSP拉流一般由上位机的app发起。
- Ubuntu搭建RTSP服务器的方式有以下几种方式: -  live555 
 live555 Media Server
-  gstreamer 
 gst-rtsp-server包
 c++编写
 注意:安装gstreamer-1.0时并不会自动安装gst-rtsp-server,gst-rtsp-server需要另行通过make方式安装,如下:git clone -b 1.8 https://github.com/GStreamer/gst-rtsp-server.git //下载源码 cd gst-rtsp-server git submodule update --init --recursive ./autogen.sh sudo make sudo make install
-  FFmpeg 
 搭建不了服务,只能推流或拉流!
-  rtsp-simple-server 
 go语言编写
-  EasyDarwin 
 easy-darwin
-  ZLMediaKit 
 推荐使用!!
 使用文档:https://github.com/ZLMediaKit/ZLMediaKit/wiki/快速开始
 
-  
- RTSP服务器默认端⼝是554,在客户端SETUP的时候会把⾃身的RTP和RTCP端⼝告知服务器。在RTSP的session建⽴后,会使⽤RTP/RTCP在约定好的端⼝上传输数据。
- 向服务端推流框图
  
- 从服务端拉流框图
  
- 在Ubuntu上搭建RTSP服务器
 推荐使用ZLMediaKit,以Ubuntu为例:
 使用文档:https://github.com/ZLMediaKit/ZLMediaKit/wiki/快速开始- 下载
 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init # 安装依赖,可选。参考文档- 编译
 cd ZLMediaKit mkdir build cd build #macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/ cmake .. make -j4- 运行
 cd ZLMediaKit/release/linux/Debug #通过-h可以了解启动参数 ./MediaServer -h # 以守护进程模式启动:主进程关闭自动重启。需要加sudo,因为544端口需要管理员权限!!!! sudo ./MediaServer -d & # 设置log打印等级:0~4,等级越高越简洁,下图是等级0 sudo ./MediaServer -d -l 0 &  - 关闭服务
 sudo killall -2 MediaServer-  log 
 log保存在ZLMediaKit/release/linux/Debug/log中。
-  推流测试 
 要先开启RTSP服务再推流不然会报类似下面的错误:
  
 用ffmpeg 推:# ZLMediaKit的RTSP服务默认端口是554,可缺省!/live是参数之一,不能少!!! ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test推流成功后查看ZLMediaKit的log可以得到更多有用的信息: 
  
-  拉流播放测试 ffplay -rtsp_transport tcp -i rtsp://127.0.0.1:554/live/test注意:rtsp地址要与推流地址保持一致,不然无法拉取和播放!!注意 live是参数不能漏!!
 
- 推流
 要先开启RTSP服务再推流不然会报类似下面的错误:
  
 用ffmpeg 推:
 推流成功后查看ZLMediaKit的log可以得到更多有用的信息:# ZLMediaKit的RTSP服务默认端口是554,可缺省!/live是参数之一,不能少!!! ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
  
- 拉流并播放
 gstreamer:
 vlc:gst-launch-1.0 playbin uri=rtsp://127.0.0.1:554/live/test gst-launch-1.0 playbin uri=rtsp://admin:WANGfengtu12@10.0.20.190:554/client0x gst-launch-1.0 playbin uri=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x gst-launch-1.0 rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.70:554/client0x ! rtph264depay ! h264parse ! decodebin ! autovideosink gst-launch-1.0 rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x ! rtph264depay ! h264parse ! decodebin ! autovideosink
 ffmpeg:vlc rtsp://127.0.0.1:554/live/testffplay -rtsp_transport tcp -i rtsp://127.0.0.1:554/live/test
- opencv拉取RTSP视频流
 待续…cv::VideoCapture cap; cap.open("rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x",cv::CAP_GSTREAMER); cv::Mat frame; while(cv::waitKey(1) < 0) // Press any key to exit {if (!cap.read(frame)){cerr << "No frames grabbed!\n";break;} } }
- 借鉴的一些例子
 使用ZLMediaKit搭建RTSP服务,使用ffmpeg推流
 https://blog.csdn.net/jaket5219999/article/details/135228010
 使用gst-rtsp-server搭建RTSP服务,使用gstreamer推流和拉流:
 https://blog.csdn.net/Aidam_Bo/article/details/114398506
 https://blog.csdn.net/zhngyue123/article/details/126362312


参考文献
https://www.avdancedu.com/e5aee947/
 https://blog.csdn.net/weixin_37210821/article/details/131406193