|
RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。目前越来越多的场所如商场,连锁店,教育,交通,银行,政府,工业使用到网络摄像头,而大多网络摄像头均采用RTSP协议传输多媒体数据,TB-rk3399proD强大的硬解码配合librockchip_rtsp库可以非常简单高效的解码rtsp多媒体数据,TB-rk3399proD中强大的NPU配合rknn-toolkit可以对解码的多媒体数据进行物体检测,提取有价值的信息,使网络摄像头更加智能!
TB-rk3399proD中VPU模块支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps;1080P 多格式视频解码 (WMV, MPEG-1/2/4, VP8),支持6路1080P@30fps解码;1080P 视频编码,支持H.264,VP8格式,支持2路1080P@30fps编码;用户只需要安装rockchip_mpp rockchip_rtsp库就可以获取rtsp视频流并调用硬件VPU自动解码,非常简单高效。
本教程基于TB-RK3399proD开发板,采用fedora28系统(固件v1.2测试通过),网络摄像头采用大华IPC-HFW8431D-Z型号进行测试
1.环境安装,细节参考wiki环境安装教程
- sudo dnf install -y cmake gcc gcc-c++ protobuf-devel protobuf-compiler lapack-devel opencv-devel
- sudo dnf install -y python3-devel python3-opencv python3-numpy-f2py python3-h5py python3-lmdb python3-grpcio
2.安装相关系统软件包,细节参考wiki系统软件包安装
- sudo dnf install librockchip_mpp-devel
- sudo dnf install librockchip_rga-devel
- sudo dnf install librockchip_rtsp-devel curl-devel
3.下载并解压附件
4.修改rtsp_ssd.cpp文件中RTSP_URL RTSP_USER RTSP_PWD宏,指向用户自己的网络摄像头地址
5.编译执行
- cd local_rtsp/build
- cmake ..
- make
- ./rtsp_ssd
可以正常获取网络摄像头图像数据并显示,效果如下:
代码分析
- RtspClient rtsp_client(RTSP_URL, RTSP_USER, RTSP_PWD);
- //设置回调函数,每接收一帧数据调用一次该函数
- rtsp_client.setDataCallback(onRtspHandle);
- void onRtspHandle(unsigned char *buf, size_t len)
- {
- std::cout << "frame recived " << len << std::endl;
- //调用mpp库将接收到的数据入队
- mpp_dec->ops->enqueue(mpp_dec, buf, len);
- }
- //将之前的入队数据进行硬件解码,得到解码数据
- DecFrame *frame = mpp_dec->ops->dequeue_timeout(mpp_dec, 300);
- //调用rga对图片进行resize操作,并转换图片为rgb格式
- rga->ops->initCtx(rga);
- rga->ops->setRotate(rga, RGA_ROTATE_NONE);
- rga->ops->setSrcFormat(rga, V4L2_PIX_FMT_NV12, width, height);
- rga->ops->setDstFormat(rga, V4L2_PIX_FMT_RGB24, resize_w, resize_h);
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|