为了在OpenCV中完成计算机视觉处理,我必须从我的C++应用程序中获取来自DJI Phantom 3相机的实时流视频。如何使用DJI Professional 3相机传输实时视频?
首先,我试图通过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进行了测试,但无法使用我的UDP数据分配AVPacket
,以便使用avcodec_send_packet
和avcodec_receive_frame
进行解码。我也有AVCodecContext
的问题,因为我的UDP通信不是像RTSP这样的流,它可以获取有关其源的信息。因此,我必须改变我试图解决问题的方式。
然后,我发现libstreaming,其中可以关联到Android摄像机流到Wowza Server,创造一些像RTSP流连接,其中数据可以在我最后的C++应用程序轻松地使用OpenCV的videoCapture
获得。但是,libstreaming使用它自己的surfaceView
。换句话说,我必须将libstreaming surfaceView
与DJI Drone的videoSurface
联系起来。我对Android非常陌生,所以不知道如何去做。
综上所述,这是正确的做法吗?有人有更好的主意?在此先感谢