zhuyuliang/gst_rtsp_client

代码编译跑通没问题,但是我保存的RTSP流的图片是乱码

a514154639 opened this issue · 15 comments

image
image
我的环境是NX Jetpack4.6.2

mpp frame size : 1008 明显是有问题的
NX Jetpack不要使用gstreamer-rockchip-extra插件
应该使用deepstream的Gst-nvvideo4linux2插件进行硬解码

是直接把decode插件改成deepstream的nvv4l2decoder吗

不用改,decodebin会自动调取你的nvv4l2decoder插件
你要把mpp的插件删除

image
pipeline里面没有mpp插件 我只用到了read_Opencv的接口 没有用read_Rga pipeline里面还需要删什么吗?之前没接触过mpp 我去您的streamer-rockchip-extra仓库看了一下 也没有那几个element

read_Opencv接口没问题,目前的问题是在解码的时候出的问题,你可以查看下Gstreamer你本地是否有nvv4l2decoder这个插件用gst-inspect-1.0指令

本地上是有nvv4l2decoder这个插件的,并且调用RTSP摄像头的时候nx的jtop上面可以看到NVDEC是打开的,不过我在用其他简单demo测试的时候NVDEC的频率是波动的,用您的代码调用的时候频率一直是满的,不知道是不是这个原因,解码的问题代码其他地方还有需要修改的地方吗?

你把1225行的 // g_print("mpp frame size : %d \n", map_info.size);的注释打开,看一下,size后面的帧输出多少,如果NVDEC被利用起来了,那么说明gstreamer的部分没问题,gstreamer是通用的管道模式,基本不用修改的。解码插件是通过decodebin自动调用的。

如果解码正常,那要修改read_Opencv转换的代码,因为mpp是16位对齐,所以得到的buffer要做转换,从1238行开始你要针对NVDEC解出来的buffer进行内存拷贝和转换进行修改。

image
后面帧输出还是1008,没有变化

image
我用这个demo跑出来的map.size大小是6220800,我有一个疑问,在您的代码中获得buffer的方式不是没有用到mpp吗?为什么还需要进行转换
image

目测你上面的代码集成了nvvideoconvert这个插件吧,因为我read_opencv拿到的是yuv的图片需要转换的,稍后我这边新开分支支持下,好了我通知你。

是的确实集成了nvvideoconvert这个插件,我尝试在您的代码中添加但是没有成功,这个问题麻烦您了,感谢

@a514154639 你demo能给我个链接吗?