RTSP视频流相关的一些操作

这篇具有很好参考价值的文章主要介绍了RTSP视频流相关的一些操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

播放rtsp camera 内容

  • 端口554在网络通信中用于Real Time Streaming Protocol(RTSP)。
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
  • 尝试使用v4l2 去解码
gst-launch-1.0 rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x latency=10 ! rtph264depay ! h264parse ! v4l2h264dec capture-io-mode=4 ! v4l2convert output-io-mode=5 capture-io-mode=4 ! autovideosink sync=false

RTSP视频流相关的一些操作,视频流,音视频,编解码,rk3588,nvidia,easydarwin

Ref

https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html?gi-language=c
https://github.com/uutzinger/camera/blob/master/RTSP_RTP_gstreamer.md

NNStreamer

Env

  • Ubuntu18.04
  • x86-64
# 安装
$ sudo add-apt-repository ppa:nnstreamer/ppa
$ sudo apt-get update
$ sudo apt-get install nnstreamer

$ sudo add-apt-repository ppa:nnstreamer-example/ppa
$ sudo apt-get update
$ sudo apt-get install nnstreamer-example

sudo apt install nnstreamer-tensorflow2-lite
$ cd /usr/lib/nnstreamer/bin

./nnstreamer_example_pose_estimation_tflite 
python3 nnstreamer_example_object_detection_tflite.py 
  • 使用 rtsp 流去做推理 nnstreamer_example_object_detection_tflite.py
        self.pipeline = Gst.parse_launch(
            'rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x ! rtph264depay ! h264parse ! decodebin ! videoconvert ! videoscale ! '
            'video/x-raw,width=640,height=480,format=RGB ! tee name=t_raw '
            't_raw. ! queue leaky=2 max-size-buffers=2 ! videoscale ! video/x-raw,width=300,height=300 ! tensor_converter ! '
            'tensor_transform mode=arithmetic option=typecast:float32,add:-127.5,div:127.5 ! '
            'tensor_filter framework=tensorflow-lite model=' + self.tflite_model + ' ! '
            'tensor_decoder mode=bounding_boxes option1=mobilenet-ssd option2='
            + self.tflite_label + ' option3=' + self.tflite_box_prior + ' option4=640:480 option5=300:300 !'
            'compositor name=mix sink_0::zorder=2 sink_1::zorder=1 ! videoconvert ! ximagesink '
            't_raw. ! queue leaky=2 max-size-buffers=10 ! mix. '
        )
  • yolov5
gst-launch-1.0 v4l2src ! videoscale ! videoconvert ! video/x-raw,width=320,height=320,format=RGB,framerate=30/1,pixel-aspect-ratio=1/1 ! tee name=t   t. ! queue ! tensor_converter ! other/tensors,num_tensors=1,types=uint8,format=static,dimensions=3:320:320:1 !     tensor_transform mode=arithmetic option=typecast:float32,add:0.0,div:255.0 ! queue leaky=2 max-size-buffers=2 !     tensor_filter framework=tensorflow2-lite model=./yolov5s-fp16-320.tflite !     other/tensors,num_tensors=1,types=float32,format=static,dimensions=85:6300:1:1 !     tensor_decoder mode=bounding_boxes option1=yolov5 option2=./coco.txt option4=320:320 option5=320:320 !     video/x-raw,width=320,height=320,format=RGBA ! mix.sink_0   t. ! queue ! mix.sink_1 compositor name=mix sink_0::zorder=2 sink_1::zorder=1 ! videoconvert ! ximagesink

gst-launch-1.0 rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x ! rtph264depay ! h264parse ! decodebin ! videoconvert ! video/x-raw,width=320,height=320,format=RGB,framerate=30/1,pixel-aspect-ratio=1/1 ! tee name=t   t. ! queue ! tensor_converter ! other/tensors,num_tensors=1,types=uint8,format=static,dimensions=3:320:320:1 !     tensor_transform mode=arithmetic option=typecast:float32,add:0.0,div:255.0 ! queue leaky=2 max-size-buffers=2 !     tensor_filter framework=tensorflow2-lite model=./yolov5s-fp16-320.tflite !     other/tensors,num_tensors=1,types=float32,format=static,dimensions=85:6300:1:1 !     tensor_decoder mode=bounding_boxes option1=yolov5 option2=./coco.txt option4=320:320 option5=320:320 !     video/x-raw,width=320,height=320,format=RGBA ! mix.sink_0   t. ! queue ! mix.sink_1 compositor name=mix sink_0::zorder=2 sink_1::zorder=1 ! videoconvert ! ximagesink

使用opencv播放rtsp流

py

import cv2 as cv


cap = cv.VideoCapture('rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x',cv.CAP_GSTREAMER)
while cv.waitKey(1) < 0:
    hasFrame, frame = cap.read()

    if not hasFrame:
        break

    cv.imshow("rtsp", frame)

cpp

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;
    }
}
}   

Ref

  • https://bbs.huaweicloud.com/blogs/315157

Q&A

python 使用gstreamer遇到的问题

  • No matching distribution found for gi
  • https://stackoverflow.com/questions/71369726/no-module-named-gi
sudo apt install libcairo2-dev libxt-dev libgirepository1.0-dev

pip install pycairo PyGObject

ffmpeg拉取rtsp流播放

ffmpeg -f v4l2 -i /dev/video0  -s 1280X720 -r 24 -vcodec libx264 -f rtsp rtsp://10.0.20.193:554/stream

ffplay -rtsp_transport tcp -fflags nobuffer rtsp://10.0.20.193/test

rk3588 使用gstreamer编解码,OpenEuler上

  • 将硬编码相关的mpp 拷贝到设备上,https://gitee.com/wangyx0704/roc-rk3588s-pc-mppcodec
  • 修改设备/dev/mpp_service 权限
# 下载相关的git 仓库
git clone https://gitee.com/wangyx0704/gst-d-softbus-sink.git
git clone https://gitee.com/wangyx0704/roc-rk3588s-pc-mppcodec.git

#安装相关的依赖
yum install opencv*  gcc-c++.aarch64  gcc.aarch64 -y
dnf install eigen3
dnf install -y gstreamer1 gstreamer1-devel gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-bad-free

dnf install -y gstreamer1* git make  cmake unzip pkg-config
rpm -e gstreamer1-plugins-base-help.noarch

#使用仓库中下载完的软件包,替换已经安装好的软件包
cd gst-d-softbus-sink/rpms
yum install -y gstreamer1-plugins-base-1.19.2/*.rpm
yum install -y gstreamer1-rtsp-server-1.19.2/*.rpm
将`roc-rk3588s-pc-mppcodec` 编解码库移动到系统目录`/usr/lib64`
  • 常使用的pipeline的用法

# 解码
# 硬解
gst-launch-1.0 rtspsrc location="rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x" latency=0 drop-on-latency=true protocols=tcp ! rtph264depay ! h264parse ! mppvideodec ! video/x-raw,format=BGR ! appsink

# 软解
gst-launch-1.0 rtspsrc location="rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x" latency=0 drop-on-latency=true protocols=tcp ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,format=BGR ! appsink


# 编码
# 硬编
gst-launch-1.0 appsrc ! videoconvert ! mppvp8enc ! video/x-vp8, mapping=/stream1 ! rtspclientsink latency=0 location=rtsp://10.0.20.193:554/test

gst-launch-1.0 videotestsrc ! video/x-raw,width=1280,height=720 ! videoconvert ! mpph264enc ! video/x-h264, mapping=/stream1 ! rtspclientsink latency=0 location=rtsp://10.0.20.193:554/test

gst-launch-1.0 videotestsrc ! videoconvert ! mpph264enc ! rtspclientsink latency=0 location=rtsp://10.0.20.193:554/test

# 软编
gst-launch-1.0 videotestsrc ! videoconvert ! vp8enc ! rtspclientsink latency=0 location=rtsp://10.0.20.193:554/test

# 不能同时支持 软硬解码
gst-launch-1.0 rtspsrc location=rtsp://10.0.20.193/st1 latency=0 protocols=udp ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw, format=BGR ! videoconvert ! video/x-raw,format=YUY2,width=1280,height=720 ! mpph264enc ! rtspclientsink latency=100 location=rtsp://10.0.20.193:554/test

RK3588 Ubuntu使用

sudo apt install gstreamer1.0-rtsp
sudo apt install gstreamer1.0-rockchip1

OpenEuler 上面安装GStreamer

OE 22.03

sudo dnf install gstreamer*

# 目录 gstreamer1-rtsp-server-1.19.2
sudo rmp -Uvh *.rpm
# 直接远程安装
sudo dnf install gstreamer1-rtsp-server*

# rtspsrc
sudo dnf install gstreamer1-plugins-good*

# h264parse
sudo dnf install gstreamer1-plugins-bad*

# avdec_h264
sudo dnf install libgstlibav*

OE 20.03

# 卸载旧包
rpm -e gstreamer1-plugins-base-help.noarch

# 在下面目录依次执行
yum install *.rpm
# gstreamer1-plugins-base-1.19.2
#  gstreamer1-rtsp-server-1.19.2 

rk3588 gstreamer pipeline 的使用

# 硬件编码
gst-launch-1.0 videotestsrc ! videoconvert ! mpph264enc ! rtspclientsink latency=0 location=rtsp://10.0.20.193:554/test

RTSP视频流相关的一些操作,视频流,音视频,编解码,rk3588,nvidia,easydarwin

# 软件编码
gst-launch-1.0 videotestsrc ! videoconvert ! vp8enc ! rtspclientsink latency=0 location=rtsp://10.0.20.193:554/test

# 软解软编
gst-launch-1.0 rtspsrc location=rtsp://10.0.20.193/st1 latency=0 protocols=udp ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw, format=BGR ! videoconvert ! vp8enc ! rtspclientsink latency=100 location=rtsp://10.0.20.193:554/test

# 硬解硬编 (这种存在问题)
gst-launch-1.0 -v rtspsrc location=rtsp://10.0.20.193/st1 latency=0 ! rtph264depay ! h264parse ! mppvideodec ! videoconvert ! mpph264enc ! queue ! h264parse ! rtspclientsink location=rtsp://10.0.20.193:554/st2 latency=100

# 通过将mpp patch打上,重新编译内核 
export GST_VIDEO_CONVERT_USE_RGA=1
export GST_VIDEO_FLIP_USE_RGA=1
gst-launch-1.0 rtspsrc location=rtsp://10.0.20.193/input latency=0 protocols=udp ! queue ! rtph264depay ! h264parse ! mppvideodec ! videoconvert ! video/x-raw, format=BGR ! videoconvert ! video/x-raw,format=NV12 ! mpph264enc ! rtspclientsink latency=100 location=rtsp://10.0.20.193:554/test

Gstreamer server (完全不推荐)

1

#include <gst/gst.h>
#include <gst/rtsp-server/rtsp-server.h>

int main(int argc, char ** argv)
{
    GMainLoop *loop;
    GstRTSPMediaFactory *factory;

    char * pipe = "rtspsrc location=rtsp://10.0.20.193/st1 latency=0 protocols=udp ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw, format=BGR ! videoconvert ! video/x-raw,format=YUY2,width=1280,height=720 ! mpph264enc ! rtspclientsink latency=100 location=rtsp://10.0.20.193:554/test";
    loop = g_main_loop_new(NULL, FALSE);

    factory = gst_rtsp_media_factory_new();
    gst_rtsp_media_factory_set_launch(factory, pipe);
    gst_rtsp_media_factory_set_shared(factory, TRUE);
    gst_rtsp_media_factory_set_enable_rtcp(factory, FALSE);

    g_main_loop_run(loop);
    return 0;
}
  • 编译选项
 # 错误
 gcc test_pipeline.c -o test_pipeline -lgstrtsp-1.0 `pkg-config --cflags --libs gstreamer-1.0` `pkg-config --cflags --libs gstreamer-plugins-base-1.0`
 # 正确
 gcc test_pipeline.c -o test_pipeline -lgstrtsp-1.0 `pkg-config --cflags --libs gstreamer-1.0` `pkg-config --cflags --libs gstreamer-rtsp-server-1.0`

2

#include <gst/gst.h>


int main(int argc, char **argv)
{
    GstElement *pipeline;
    GstBus * bus;
    GstMessage *msg;


    gst_init(&argc, &argv);

    pipeline = gst_parse_launch("rtspsrc location=rtsp://10.0.20.193/st1 latency=0 protocols=udp ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw, format=BGR ! videoconvert ! video/x-raw,format=YUY2,width=1280,height=720 ! mpph264enc ! rtspclientsink latency=100 location=rtsp://10.0.20.193:554/test", NULL);

    gst_element_set_state(pipeline, GST_STATE_PLAYING);



    bus = gst_element_get_bus(pipeline);

    msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

    if(msg != NULL)
    {
        gst_message_unref(msg);
    }

    gst_object_unref(msg);

    gst_element_set_state(pipeline, GST_STATE_NULL);

    gst_object_unref(pipeline);
    return 0;
}
  • 编译选项
gcc test_pipeline_2.c -o test_pipeline_2 `pkg-config --cflags --libs gstreamer-1.0` `pkg-config --cflags --libs gstreamer-rtsp-server-1.0`

使用ffmpeg 拉流保存到本地

ffmpeg -i rtsp://admin:WANGfengtu12@10.0.20.70:554/client0x  -vcodec copy out.h264

ffmpeg 推送本地流

ffmpeg -re  -stream_loop -1 -i D:\workspace\test.mp4  -vcodec copy -rtsp_transport tcp -f rtsp rtsp://192.168.3.176:554/s1

ffmpeg -re  -i rtsp://192.168.1.103/car/EdgeCar2 -vcodec copy -rtsp_transport tcp -f rtsp rtsp://192.168.1.109:554/s1

ffmpeg 拉流转发

ffmpeg -i rtsp://10.0.20.193/st1 -s 1080*720 -vcodec copy -f rtsp -rtsp_transport tcp rtsp://10.0.20.193:554/test
ffmpeg -i rtsp://10.0.20.193/st1 -acodec copy -vcodec copy -f rtsp -rtsp_transport tcp rtsp://10.0.20.193:554/test

ffmpeg 推送本地图片

ffmpeg.exe -loop 1 -i .\1.png  -c:v libx264 -vf fps=1,format=nv12 -preset veryfast -tune stillimage -f rtsp -rtsp_transport tcp    rtsp://192.168.0.100/live/in7

推送到指定服务器

ffmpeg -re -stream_loop -1 -i test.mp4  -s 1280*720 -vcodec h264 -f rtsp -rtsp_transport tcp rtsp://10.0.20.221:554/test
ffmpeg -re -stream_loop -1 -i .\10daojishi.mp4 -vcodec copy -acodec copy -f rtsp rtsp://10.0.20.109:554/test

使用nvidia 硬编解码 推流

ffmpeg -re -stream_loop -1 -i merge.mp4   -vcodec h264_nvenc -f rtsp -rtsp_transport udp rtsp://10.0.20.193:554/test

设置Gstreamer debug level

export GST_DEBUG=4

rtsp 流服务器

easy-darwin

  • 通过命令行访问推流列表
 curl http://192.168.221.66:10008/api/v1/pushers

ZLMediaKit

https://github.com/ZLMediaKit/ZLMediaKit/wiki/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%90%AF%E5%8A%A8%E4%B8%8E%E5%85%B3%E9%97%AD
https://github.com/ZLMediaKit/ZLMediaKit/wiki/ZLMediaKit%E6%8E%A8%E6%B5%81%E6%B5%8B%E8%AF%95

  • 启动
cd /home/test/ZLMediaKit/release/linux/Debug
sudo ./MediaServer -d &
  • 关闭
killall -2 MediaServer
  • 推流
ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://10.0.20.221/live/test

RTSP视频流相关的一些操作,视频流,音视频,编解码,rk3588,nvidia,easydarwin文章来源地址https://www.toymoban.com/news/detail-520440.html

使用ffmpeg 修改yuv 图片大小

ffmpeg -s 1920*1080 -pix_fmt nv12 -i 5_1920x1080.yuv -vf scale=1280:1024 5_1280x1024.yuv
-s : 原始图片大小
-pix_fmt : 图示图片的yuv格式

到了这里,关于RTSP视频流相关的一些操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【音视频】基于NGINX如何播放rtmp视频流

    现阶段直播越来越流行,直播技术发展也越来越快。Webrtc、rtmp、rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtmp如何播放。 本文重点介绍基于NGINX如何播放rtmp视频流 可以参考上一篇博文:【音视频】基于webrtc协议浏览器播放rtsp https://blog.csdn.n

    2024年01月19日
    浏览(64)
  • 将电脑本地视频转成rtsp和rtmp视频流

    1、安装rtsp-simple-server rtsp-server 下载好的文件直接运行就好 2、打开FFmpeg开始推流 udp推流 tcp推流 循环推流 其中: -re 为以流的方式读取; -stream_loop 为循环读取视频源的次数,-1为无限循环; -i 为输入的文件; -f 为格式化输出到哪里;

    2024年02月15日
    浏览(47)
  • QT实现OpenCV播放rtsp视频流

    使用OpenCV(图像处理)、FastDeploy(飞桨部署)库; 监控相机传输数据用的是码流,高清网络摄像机产品编码器都会产生两个编码格式,称为 主码流 和 子码流 。这就叫双码流技术。 目的是用于解决监控录像的本地存储和网络传输的图像的质量问题。双码流能实现本地和远程

    2024年02月03日
    浏览(70)
  • LiveNVR监控流媒体Onvif/RTSP功能-视频流水印如何叠加视频水印叠加动态图片叠加视频流时间示例

    监控视频平台播放视频监控的时候,除了满足正常视频播放外,有时还需要方便标记或者防盗用等添加视频水印。有些视频在原始摄像头端就可以添加OSD水印,这种方式最好。 但是有些原始视频没有水印,但是平台端播放的时候又希望有水印,下面介绍下LiveNVR Onvif/RTSP流媒体

    2024年02月13日
    浏览(72)
  • electron+vue网页直接播放RTSP视频流?

    目前大部分摄像头都支持RTSP协议,但是在浏览器限制,最新版的浏览器都不能直接播放RTSP协议,Electron 桌面应用是基于 Chromium 内核的,所以也不能直接播放RTSP,但是我们又有这个需求怎么办呢? 市场上的方案很多,有很多免费开源的,同时也有比较成熟的商业软件,丰俭

    2024年02月02日
    浏览(57)
  • 视频推流测试——使用ffmpeg进行推流生成rtsp视频流

    在我们完成开发工作之后,需要通过推流的形式来验证能否正确接收视频流,并送入视频检测程序。笔者在这里使用的是业内最为常用的ffmpeg。具体方法如下。 访问ffmpeg的官网,地址为https://ffmpeg.org/download.html,按照如下途中来选择下载。 下载完成后,会得到一个zip格式的压

    2024年02月09日
    浏览(52)
  • Windows上使用FFmpeg实现本地视频推送模拟海康协议rtsp视频流

    Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览: Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览_nginx rtmp 海康摄像头_霸道流氓气质的博客-CSDN博客 上面记录的是使用FFmpeg拉取海康协议摄像头的rtsp流并推流到流媒体服务器。 如果在其它业务场景下需要本地的视频文件模拟

    2024年02月12日
    浏览(44)
  • wireshark提取RTSP over TCP中的视频流

    前面文章中介绍了rtp中提取H264或者H265视频的方式,其适用于基于RTP over UDP的方式,因为UDP方式,视频流RTP、RTCP是通过不同的UDP连接来传输的,因此抓包只需要根据端口的不同,即可区分RTP和RTCP,此种方式,wireshark脚本可以做很好的提取。但是如果是RTSP OVER TCP的方式,其R

    2023年04月08日
    浏览(46)
  • 安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

    安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,比如:视频监控直播、云端录像、云存储、录

    2024年02月15日
    浏览(43)
  • vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

    ffmpeg下载 https://ffmpeg.org/download.html 找ffmpeg-release-essentials.zip点击下载,下载完解压 ffmpeg.exe 程序运行 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 新建一个app.js文件,同级目录下npm安装 node-rtsp-stream 我是直接写在项目里了,你们可以单独写在外

    2024年04月25日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包