Firefly开源社区

标题: 交叉编译了ffmpeg、mpp、gstreamer和python opencv,未能调用mpp进行硬解码 [打印本页]

作者: xqm    时间: 2023-6-5 17:57
标题: 交叉编译了ffmpeg、mpp、gstreamer和python opencv,未能调用mpp进行硬解码
1、问题:
       通过opencv的软解码rtsp流,cpu占用率高,考虑到要处理4k摄像头,采用python opencv+gstreamer+mpp方式进行视频硬件。

2、方式:
       交叉编译了ffmpeg、mpp、gstreamer和python opencv,下图显示已经安装好硬解码器了:


gst命令:gst-launch-1.0  mppvideodec  rtspsrc location=rtsp://admin:js123456@192.168.8.160:554/cam/realmonitor?channel=1&subtype=0 ! rtph264depay ! h264parse ! queue ! mppvideodec ! autovideosink  latency=10 sync=false
但是未能启用:


tchip_askquestions

log.txt

21.92 KB, 下载次数: 2, 下载积分: 灯泡 -1 , 经验 -1


作者: 板蓝根    时间: 2023-6-5 18:07
[attach]12486[/attach] 怎么会mppvideodec 和 rtspsrc 放一起呢?

gst-play-1,0 rtsp://xxxx 测试一下

python opencv + gstreamer appsink 这样的方案本身不可行,appsink 有大量内存拷贝,可以直接用 ffmedia 的 python 接口,详情查看 wiki 的 firefly linux 使用手册

image.png (18.29 KB, 下载次数: 680)

image.png

作者: xqm    时间: 2023-6-6 14:48
板蓝根 发表于 2023-6-5 18:07
怎么会mppvideodec 和 rtspsrc 放一起呢?

gst-play-1,0 rtsp://xxxx 测试一下

你好,我们按照管网教程安装ffmedia,运行"./demo rtsp://XXX -o 1280x720 -d 0 -r 90"没报错;
F:/微信图片_20230606144602.png

现运行demo_opencv.py遇到如下问题,提示ff_pymedia没有ModuleRtspClient函数:
F:/微信图片_20230606144307.png

请问有遇到过这个问题吗?
作者: xqm    时间: 2023-6-6 14:53
你好,我们按照管网教程安装ffmedia,运行"./demo rtsp://XXX -o 1280x720 -d 0 -r 90"没报错;


现运行demo_opencv.py遇到如下问题,提示ff_pymedia没有ModuleRtspClient函数:


请问有遇到过这个问题吗?怎么解决?



作者: dengkx    时间: 2023-6-6 15:10
dist下只有3.8版本的whl,用python3.8直接跑demo.py,demo.py有全部的模块使用示例,区别是demo.py直接在回调使用cv显示,demo_opencv.py用一个py线程去调用cv显示。
作者: xqm    时间: 2023-6-6 15:18
dengkx 发表于 2023-6-6 15:10
dist下只有3.8版本的whl,用python3.8直接跑demo.py,demo.py有全部的模块使用示例,区别是demo.py直接在回 ...

能提供编译好的python3.9,付费也可以的。我们的开发环境都是python3.9,当时装环境也是适配了很久。
作者: xqm    时间: 2023-6-6 15:22
dengkx 发表于 2023-6-6 15:10
dist下只有3.8版本的whl,用python3.8直接跑demo.py,demo.py有全部的模块使用示例,区别是demo.py直接在回 ...

或者能提供下封装3.9whl的教程吗
作者: dengkx    时间: 2023-6-6 16:43
xqm 发表于 2023-6-6 15:22
或者能提供下封装3.9whl的教程吗

联系商务要
作者: xqm    时间: 2023-6-6 17:54
改成ff_pymedia-2.0.0-cp38-cp38-linux_aarch64.whl安装后,报错如下:


麻烦予以指导解决下,谢谢!
作者: dengkx    时间: 2023-6-7 09:40
xqm 发表于 2023-6-6 17:54
改成ff_pymedia-2.0.0-cp38-cp38-linux_aarch64.whl安装后,报错如下:

这不是报错信息,使用py 加cv显示示例
./demo_opencv.py -i url -c 1 -b RGB24
./demo.py -i url -c 1 -b RGB24
使用图层显示
./demo.py -i url -d 0
如果流是tcp的需要添加该参数--rtsp_transport 1
作者: xqm    时间: 2023-6-7 12:00
dengkx 发表于 2023-6-7 09:40
这不是报错信息,使用py 加cv显示示例
./demo_opencv.py -i url -c 1 -b RGB24
./demo.py -i url -c 1  ...

嗯,好的,谢谢,有看到图片保存本地了,我们公司的产品经理也在跟贵公司的商务沟通中。我们的代码通过是opencv来调用rtsp流的,类似yolov5的 LoadStreams来处理实时视频的,请问demo_opencv.py里相关的ff-pymedia调用方法能否改成类似LoadStreams的方法,你们有过这方面的尝试吗?
作者: xqm    时间: 2023-6-7 14:44
1、-c设置在165以内,demo_opencv.py可以正常运行,否则会报cannot allocate memory或者getTimeoutSample oxlfelb3a0等错误,请问这个参数的作用是什么?一般设置多大,我们要做实时视频流检测。
2、看到:
        for i in range(args.cvdisplay):
            cv_display.frame_list.append(last_module.newModuleMediaBuffer(m.BUFFER_TYPE.DRM_BUFFER_CACHEABLE))
请问上面代码跟下列代码是一样的作用吗,为了或者流的总帧数
           self.frames = max(int(cap.get(cv2.CAP_PROP_FRAME_COUNT)), 0) or float('inf')  # infinite stream fallback
作者: xqm    时间: 2023-6-7 17:09
运行./demo_opencv.py -i url -c 150 -b RGB24后,瞬间起来多个demo_opencv.py的进程,CPU一下子爆满了,
请问这个多进程启动在哪里控制的呀?见下图:

作者: dengkx    时间: 2023-6-7 17:28
请使用demo.py运行 。demo_opencv的-c 参数是申请多少块drm buf给cv显示线程使用,没有导出rga模块buf要求就不要用demo_opencv.py 指定-c 超过1
这些导出的buf给py来使用是为了后面如果需要缓存图像时可以使用这些buf与rga模块交换,就不用拷贝
作者: dengkx    时间: 2023-6-7 17:36
本帖最后由 dengkx 于 2023-6-7 17:38 编辑
xqm 发表于 2023-6-7 17:09
运行./demo_opencv.py -i url -c 150 -b RGB24后,瞬间起来多个demo_opencv.py的进程,CPU一下子爆满了,
...

demo_opencv.py里也很容易看出,-c 超过1 就是先申请多少块buf,然后模块运行起来,用队列的buf和rga模块交换,队列的buf全部交换完毕就开始显示。-c 为1时,就是申请一块buf给显示线程使用,rga模块处理完数据就把他的buf交换出来,然后通知显示线程去显示,显示完这帧就继续等待rga回调交换buf。没有这种需求就参看demo.py使用,直接用回调的buf处理
作者: xqm    时间: 2023-6-7 17:52
dengkx 发表于 2023-6-7 17:36
demo_opencv.py里也很容易看出,-c 超过1 就是先申请多少块buf,然后模块运行起来,用队列的buf和rga模块 ...

好的,谢谢,我们再继续研究一下demo代码,遇到问题再向您请教。
作者: 王存见    时间: 2023-6-7 19:18
为什么的程序 import ff_pymedia as m 返回四个 FFFF,程序就停掉了,也没看到报错!
作者: 王存见    时间: 2023-6-7 19:37

作者: xqm    时间: 2023-6-8 10:30
王存见 发表于 2023-6-7 19:18
为什么的程序 import ff_pymedia as m 返回四个 FFFF,程序就停掉了,也没看到报错!

运行时增加些参数试试,例如:./demo.py -i url -c 1 -b RGB24。其中url为rtsp流或者其他输入源
作者: 王存见    时间: 2023-6-8 12:31
xqm 发表于 2023-6-8 10:30
运行时增加些参数试试,例如:./demo.py -i url -c 1 -b RGB24。其中url为rtsp流或者其他输入源

我的意思是,引入包都报错了! import ff_pymedia as m
作者: 王存见    时间: 2023-6-8 17:31
这个东西,性能好快,基本上不用CPU,但是python版本我用不起来
作者: dengkx    时间: 2023-6-8 18:58
王存见 发表于 2023-6-8 17:31
这个东西,性能好快,基本上不用CPU,但是python版本我用不起来

需要安装dist目录下的whl, 安装后还是那样,可以使用尝试sudo运行下,或者看README安装py环境
作者: xqm    时间: 2023-6-9 10:36
dengkx 发表于 2023-6-8 18:58
需要安装dist目录下的whl, 安装后还是那样,可以使用尝试sudo运行下,或者看README安装py环境

我们安装whl后,opencv流播放画面还是有点卡顿的,请问要调什么参数?
作者: dengkx    时间: 2023-6-9 11:20
本帖最后由 dengkx 于 2023-6-9 11:48 编辑
xqm 发表于 2023-6-9 10:36
我们安装whl后,opencv流播放画面还是有点卡顿的,请问要调什么参数?
用demo.py在回调显示似乎显示不太稳定,在demo_opencv.py用线程显示就稳定许多: ./demo_opencv.py -i url -c 1 -b RGB24 -s 0 #非必须不要指定-c 超过1
这主要是cv那边显示太耗时,你可以打印cv imshow到waitKey这段耗时,看他处理一帧数据的耗时:
    start = time.perf_counter()
    for i in range(obj.count):
        cv2.imshow(obj.name + str(i), img)
    cv2.waitKey(1)
    end = time.perf_counter()
    print(f"Function took {(end - start)*1000:.3f} milliseconds to execute.")
作者: xqm    时间: 2023-6-9 14:02
改用demo_opencv.py后,没有显示窗口出现,程序运行后就停止了,

作者: dengkx    时间: 2023-6-9 15:12
xqm 发表于 2023-6-9 14:02
改用demo_opencv.py后,没有显示窗口出现,程序运行后就停止了,

前面你又说可以,你自己debug看看吧。c++版本的能正常运行,python也应当可以,因为他们用的是相同的API。
作者: xqm    时间: 2023-6-9 16:26
dengkx 发表于 2023-6-9 15:12
前面你又说可以,你自己debug看看吧。c++版本的能正常运行,python也应当可以,因为他们用的是相同的API。

前面是说demo.py可以看到视频流的,但是demo_opencv.py是没有的
作者: xqm    时间: 2023-6-9 16:59
1、运行demo.py视频流窗口能起来,就是视频有点卡,还稍微有点花屏;2、运行./demo_opencv.py -i url -c 1 -b RGB24 -s 0 无法弹出视频窗口
作者: xqm    时间: 2023-6-15 17:00
dengkx 发表于 2023-6-9 15:12
前面你又说可以,你自己debug看看吧。c++版本的能正常运行,python也应当可以,因为他们用的是相同的API。

请问一下,如何查看VPU使用率?
作者: xqm    时间: 2023-6-15 17:45
测试4个2k的摄像头,出现下图提示信息,CPU占用率反而降低,是否VPU解码已经到达上线了?查看VPU使用率的命令是什么?











PS:检测帧率还没调,实时过来多少帧处理多少帧。


作者: dengkx    时间: 2023-6-15 20:15
xqm 发表于 2023-6-15 17:45
测试4个2k的摄像头,出现下图提示信息,CPU占用率反而降低,是否VPU解码已经到达上线了?查看VPU使用率的命 ...

log请发全;本地视频在性能模式下H265分辨率2560x1440的30帧率解24路是可以的,网络拉流还要考虑带宽、丢包等因素。
你可以用c++的demo 测试播本地文件测试vpu性能 ,例如:
./demo test.mp4 -d0 -c 24 # 进行24路播放视频  
作者: Oneless    时间: 2023-7-6 16:21
板蓝根 发表于 2023-6-5 18:07
怎么会mppvideodec 和 rtspsrc 放一起呢?

gst-play-1,0 rtsp://xxxx 测试一下

您好,问一下在RK3588的开发板上,使用gst-launch-1.0 filesrc location=/usr/local/test.mp4 ! qtdemux ! h264parse ! mppvideodec ! rkximagesink,能正常打开视频显示,但在python使用opencv打开就会报错,代码示例:cap = cv.VideoCapture("filesrc location=/usr/local/test.mp4 ! qtdemux ! h264parse ! mppvideodec ! appsink",cv.CAP_GSTREAMER)




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1