Toybrick

贡献RtspClient库

zhuyuliang0

中级会员

积分
355
发表于 2021-10-12 15:22:52    查看: 54667|回复: 45 | [复制链接]    打印 | 显示全部楼层
本帖最后由 zhuyuliang0 于 2021-10-18 14:20 编辑

鉴于官方的rtspclient库demo不开源,自己通过gstreamer实现了一个rtspclient库。目前测试了几天,修复了一些bug,比较稳定。
特点:
    1.gstreamer架构:流程 rtspsrc->decodebin(mpp)->tee->queue->appsink->rga
    2.c/c++开发
    3.cpython调用
    4.解决了h265mpp对齐问题
    5.解决了多线程调用问题。支持RTSP输出分辨率
        * 640 * 480
        * 1280 * 720
        * 1920 * 1080
        * 2560 * 1440
        * 3840 * 2160
    6.目前尽支持测试大华摄像头和海康威视摄像头直连

rockchip平台依赖环境
    1.[MPP](https://t.rock-chips.com/forum.p ... d=336&highlight=mpp)
    2.[RGA](https://t.rock-chips.com/forum.p ... d=333&highlight=rga)
    3.[MPP_GSTREAMER插件](https://github.com/rockchip-linux/gstreamer-rockchip)

开发者可根据自己的特殊情况进行开发。欢迎一起维护。

GitHub地址







回复

使用道具 举报

jefferyzhang

版主

积分
13445
发表于 2021-10-13 10:16:19 | 显示全部楼层
赞,rtsp用gst是比较推荐的方式,rk那个是徒手写的交互用的demo,兼容性很差
回复

使用道具 举报

hhhjjjwww

中级会员

积分
231
发表于 2021-10-14 11:39:20 | 显示全部楼层
哥们你好,这个项目里面include是不是少了个头文件?我编译的时候出错了,提示少了arrayqueue.h 这个文件
CMake Error at CMakeLists.txt:88 (add_executable):
  Cannot find source file:

    ./include/arrayqueue.h
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
 楼主| 发表于 2021-10-14 15:20:04 | 显示全部楼层
hhhjjjwww 发表于 2021-10-14 11:39
哥们你好,这个项目里面include是不是少了个头文件?我编译的时候出错了,提示少了arrayqueue.h 这个文件
C ...

可以去掉,已经废弃了
回复

使用道具 举报

hhhjjjwww

中级会员

积分
231
发表于 2021-10-14 16:55:13 | 显示全部楼层
本帖最后由 hhhjjjwww 于 2021-10-14 17:00 编辑
zhuyuliang0 发表于 2021-10-14 15:20
可以去掉,已经废弃了

你好,你程序在我的rk3399prod上编译成功了,但是framedata.size一直都是0,请问这是什么原因,用vlc能够打开rtsp流
回复

使用道具 举报

hhhjjjwww

中级会员

积分
231
发表于 2021-10-14 16:57:16 | 显示全部楼层
本帖最后由 hhhjjjwww 于 2021-10-14 16:59 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
 楼主| 发表于 2021-10-14 17:29:55 | 显示全部楼层

是不是rtsp流的分辨率不对应,我看你使用的是子码流,目前只支持720p,1080p, 2k的分辨率,其他的分辨率暂时没有处理,720p不用修改分辨率直接转换,具体可以看源码。gst_rtsp_client.cpp 871行开始
回复

使用道具 举报

hhhjjjwww

中级会员

积分
231
发表于 2021-10-14 17:45:18 | 显示全部楼层
我在gst_rtsp_client.cpp RtspClient::read函数里面打印map_info.size的值一直输出3110400,但是你的处理里面并没有对map_info.size=3110400这种情况进行处理。
回复

使用道具 举报

hhhjjjwww

中级会员

积分
231
发表于 2021-10-14 17:53:14 | 显示全部楼层
zhuyuliang0 发表于 2021-10-14 17:29
是不是rtsp流的分辨率不对应,我看你使用的是子码流,目前只支持720p,1080p, 2k的分辨率,其他的分辨率 ...

换成主码流也一样
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
 楼主| 发表于 2021-10-14 17:55:28 | 显示全部楼层
hhhjjjwww 发表于 2021-10-14 17:45
我在gst_rtsp_client.cpp RtspClient::read函数里面打印map_info.size的值一直输出3110400,但是你的处理里 ...

那应该是你的rtsp流的分辨率不匹配,你可以根据h254和h265情况下得子码流分辨率自己去匹配map_info.size=3110400(width*height*2)去看一下你nvr的子码流的分辨率是多少,然后在read里面用rga转换的时候自己处理下就行。或者你告诉我下你的子码流分辨率我添加一下支持。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表