Toybrick

贡献RtspClient库

zhuyuliang0

中级会员

积分
355
楼主
发表于 2021-10-12 15:22:52    查看: 41429|回复: 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地址







回复

使用道具 举报

zhuyuliang0

中级会员

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

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

使用道具 举报

zhuyuliang0

中级会员

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

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

使用道具 举报

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转换的时候自己处理下就行。或者你告诉我下你的子码流分辨率我添加一下支持。
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
5#
 楼主| 发表于 2021-10-14 18:06:38 | 显示全部楼层
zhuyuliang0 发表于 2021-10-14 17:55
那应该是你的rtsp流的分辨率不匹配,你可以根据h254和h265情况下得子码流分辨率自己去匹配map_info.size= ...

比如h265 2560*1440的情况下,mpp输出的是2816*1440,要用rga进行,转换,裁剪才行,
而h264 2560 * 1440的情况下,mpp输出是正常的,可以用rga直接转换就可以,
所以要针对不同的分辨率做在h265和h264不同的处理,这也是比较麻烦的地方。
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
6#
 楼主| 发表于 2021-10-14 18:08:36 | 显示全部楼层
hhhjjjwww 发表于 2021-10-14 17:53
换成主码流也一样

换主码流,要保证rtsp的分辨率是对应支持的分辨率才可以。
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
7#
 楼主| 发表于 2021-10-15 09:13:02 | 显示全部楼层
本帖最后由 zhuyuliang0 于 2021-10-15 09:15 编辑
hhhjjjwww 发表于 2021-10-15 09:03
主码流1920*1080,但是map_info.size依然是3110400,1920*1080*2也不等于3110400

是乘以3,不是2,打错了 看一下你的rtsp是h265的还是h264的,
h264情况下1920 * 1080 mpp输出的是 1920 * 1088 * 3 map_info.size == 4177920
h265情况下1920 * 1080 mpp输出的是 2304 * 1080 * 3 map_info.size == 4976640
可能是你的rtsp编码模式不对吧,可以看一下摄像头rtsp后台的设置吗 比如:

本帖子中包含更多资源

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

x
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
8#
 楼主| 发表于 2021-10-15 10:21:58 | 显示全部楼层
hhhjjjwww 发表于 2021-10-15 09:30
这个是我的vlc码流信息,请您看看有什么问题?

1.关于计算问题
如果是RK_FORMAT_YCrCb_420_SP 是乘以2
如果转换RK_FORMAT_RGB_888后 是乘以3

2.rtsp如果是通过NVR录像机输出的这个还没有测试,之前用官方的demo的rtspclient测试nvr录像机解析是不稳定的不知道是不是mpp的问题!
可以使用rtsp摄像头直连试试,并且进摄像头管理页面看看配置是否正常。
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
9#
 楼主| 发表于 2021-10-15 10:37:59 | 显示全部楼层
hhhjjjwww 发表于 2021-10-15 09:30
这个是我的vlc码流信息,请您看看有什么问题?

这个是我海康录像机输出的效果,用的软件是Mac的VLC

本帖子中包含更多资源

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

x
回复

使用道具 举报

zhuyuliang0

中级会员

积分
355
10#
 楼主| 发表于 2021-10-15 11:03:38 | 显示全部楼层
hhhjjjwww 发表于 2021-10-15 10:54
感谢你的建议,我将rtsp摄像头改成直连,用官方的local_rtsp那个代码居然可以了,但是您代码还是输出显示m ...

可以尝试打印下GstVideoInfo info;的信息,查看一下视频信息,可能会有所帮助。
回复

使用道具 举报

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

本版积分规则

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


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