OpenCV에서 컴퓨터 비전 처리를 수행하기 위해 DJI Phantom 3 카메라의 라이브 스트림 비디오를 C++ 응용 프로그램에서 가져와야합니다. 통신 위에서 잘 작동DJI Professional 3 카메라에서 라이브 비디오를 스트리밍하는 방법은 무엇입니까?
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);
}
};
:
우선 나는이 콜백 내부 UDP 소켓을 통해 H264 원시 데이터를 전송했습니다. 그러나 C++ 데스크탑 응용 프로그램에서 UDP H264 데이터를 디코딩 할 수 없었습니다. FFmpeg lib로 테스트했지만 avcodec_send_packet
및 avcodec_receive_frame
을 사용하여 디코딩하기 위해 UDP 데이터로 AVPacket
을 할당 할 수 없습니다. 내 UDP 통신이 소스에 대한 정보를 얻을 수있는 RTSP와 같은 스트림이 아니기 때문에 AVCodecContext
에도 문제가있었습니다. 따라서 문제를 해결하기 위해 노력한 방법을 변경해야했습니다.
다음, 나는있는 데이터 ++ 응용 프로그램을 쉽게 OpenCV의 videoCapture
를 사용하여 내 최종 C에서 얻을 수있는 RTSP 스트림 연결, 같은 것을 생성하는 Wowza Server에 안드로이드 비디오 카메라를 스트리밍 할 동료가 될 수 libstreaming을 발견했다. 그러나 libstreaming은 자체적으로 surfaceView
을 사용합니다. 즉, libstreaming surfaceView
을 DJI Drone의 videoSurface
과 연결해야합니다. 나는 Android에 정말 익숙하지 않기 때문에 그렇게하는 방법에 대한 단서가 없습니다.
요약하면 올바른 접근 방법입니까? 누군가 더 좋은 아이디어가 있습니까? 미리 감사드립니다.