背景
需求:需要通过大疆的PSDK发送视频流到大疆M300的遥控器上显示。
数据流程
编码:ROS::Image(BGR)->cv::mat(BGR)->YUV420->h264
解码:h264->YUV420->BGR
思路理解
初识PSDK开发
通过psdk的demo,可以正常推送mp4文件视频流到pilot,证明只要修改这个demo,按帧转换h264发出去就可以播放了。
好的,我抽取自己需要的功能重新封装成mypsdk,新的psdk是依赖ros的,因为需要订阅zed传过来的视频流。
好的,现在就差怎么买将YUV420转成h264了,兜兜转转,终于找到一个博主封装好的:https://blog.csdn.net/leonardohaig/article/details/103624426
跟着这位博主可以对OpenCV Mat进行h264的编解码。
(这里呢还要引荐一位对ffmpeg有很多研究的博主:雷老师)
排坑
-
关于绑定psdk 账号的问题:
psdk需要去官网注册psdk应用才能使用。绑定是不需要运行PSDK的,但是解绑是需要运行PSDK程序的,如果之前有同事已经申请psdk的一个应用并且通过桌面端的大疆助手绑定了这个psdk控件的话,那么需要先解绑。解绑操作是:登录绑定人的账号->解绑->然后去官网申请psdk应用->sudo ./psdk_demo
启动psdk demo->登录大疆助手后重新绑定。此时你可能像我一样:在绑定负载设备时候报错:绑定关系错误。我的发者帐号与PSDK程序中是一致的,请问是什么原因呢?
这是大疆的问题了,我是将账号反馈给大疆客服,然后帮我解绑才能重新绑定的。 -
关于psdk推流的坑,需要修改demo得一个地方才能才能得使用demo。详情链接在这。
在test_payload_cam_emu.c文件中将StreamType设成Custom格式 -
关于用ffmpeg 编码时候的坑
因为出来的效果是这样的:
找了好久原因,最终是发现是编码时候字节不对齐导致的颜色缺失。
修改代码如下,将0改为1
附上给最终成果图:
- usb口重新插拔后序列号有问题,需要用软链接指定。