交叉编译了ffmpeg、mpp、gstreamer和python opencv,未能调用mpp进行硬解码

固件类型:官方提供的固件
固件文件名称:RK3588_unbuntu_2.0
固件下载地址:XX
Log日志:log.txt

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.9 KB)

怎么会mppvideodec 和 rtspsrc 放一起呢?

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

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

板蓝根 发表于 2023-6-5 18:07
怎么会mppvideodec 和 rtspsrc 放一起呢?

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

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

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

请问有遇到过这个问题吗?

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

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

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

dist下只有3.8版本的whl,用python3.8直接跑demo.py,demo.py有全部的模块使用示例,区别是demo.py直接在回调使用cv显示,demo_opencv.py用一个py线程去调用cv显示。

dengkx 发表于 2023-6-6 15:10
dist下只有3.8版本的whl,用python3.8直接跑demo.py,demo.py有全部的模块使用示例,区别是demo.py直接在回 …

能提供编译好的python3.9,付费也可以的。我们的开发环境都是python3.9,当时装环境也是适配了很久。

dengkx 发表于 2023-6-6 15:10
dist下只有3.8版本的whl,用python3.8直接跑demo.py,demo.py有全部的模块使用示例,区别是demo.py直接在回 …

或者能提供下封装3.9whl的教程吗

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

联系商务要

改成ff_pymedia-2.0.0-cp38-cp38-linux_aarch64.whl安装后,报错如下:

麻烦予以指导解决下,谢谢!

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

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的方法,你们有过这方面的尝试吗?

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

运行./demo_opencv.py -i url -c 150 -b RGB24后,瞬间起来多个demo_opencv.py的进程,CPU一下子爆满了,
请问这个多进程启动在哪里控制的呀?见下图:

请使用demo.py运行 。demo_opencv的-c 参数是申请多少块drm buf给cv显示线程使用,没有导出rga模块buf要求就不要用demo_opencv.py 指定-c 超过1
这些导出的buf给py来使用是为了后面如果需要缓存图像时可以使用这些buf与rga模块交换,就不用拷贝

本帖最后由 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处理

dengkx 发表于 2023-6-7 17:36
demo_opencv.py里也很容易看出,-c 超过1 就是先申请多少块buf,然后模块运行起来,用队列的buf和rga模块 …

好的,谢谢,我们再继续研究一下demo代码,遇到问题再向您请教。

为什么的程序 import ff_pymedia as m 返回四个 FFFF,程序就停掉了,也没看到报错!

微信截图_20230607192005.png

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

运行时增加些参数试试,例如:./demo.py -i url -c 1 -b RGB24。其中url为rtsp流或者其他输入源

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

我的意思是,引入包都报错了! import ff_pymedia as m