我必须在我的 C++ 应用程序中从 DJI Phantom 3 相机获取实时流视频,以便在 OpenCV 中进行计算机视觉处理。
首先,我尝试在此回调中通过 UDP 套接字发送 H264 原始数据:
mReceivedVideoDataCallBack = new CameraReceivedVideoDataCallback() {
@Override
public void onResult(byte[] videoBuffer, int size) {
//Here, I call a method from a class I created, that sends the buffer through UDP
if (gravar_trigger) controleVideo.enviarFrame(videoBuffer, size);
if (mCodecManager != null) mCodecManager.sendDataToDecoder(videoBuffer, size);
}
};
上面的沟通效果很好。但是,我无法在我的 C++ 桌面应用程序中解码该 UDP H264 数据。我已经使用 FFmpeg lib 进行了测试,但无法AVPacket
使用我的 UDP 数据分配 an ,以便使用avcodec_send_packet
and进行解码avcodec_receive_frame
。我也遇到了问题AVCodecContext
,因为我的 UDP 通信不是像 RTSP 这样的流,它可以获取有关其来源的信息。因此,我不得不改变我试图解决问题的方式。
然后,我找到了 libstreaming,其中可以关联将 android 摄像机流式传输到Wowza Server,创建类似于 RTSP 流连接的东西,可以使用 OpenCV 在我的最终 C++ 应用程序中轻松获取数据videoCapture
。但是,libstreaming 使用自己的surfaceView
. 换句话说,我必须将 libstreamingsurfaceView
与 DJI Drone 的videoSurface
. 我对Android真的很陌生,所以不知道如何做到这一点。
总而言之,这是正确的方法吗?有人有更好的主意吗?提前致谢