私はC++アプリケーションでDJI Phantom 3カメラからライブストリームビデオを入手して、OpenCVでコンピュータビジョン処理を行う必要があります。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でテストしましたが、avcodec_send_packet
とavcodec_receive_frame
を使ってデコードするために、私のUDPデータでAVPacket
を割り当てることができませんでした。私のUDP通信はRTSPのようなストリームではなかったので、そのソースに関する情報を得ることができるので、AVCodecContext
にも問題がありました。したがって、どのように問題を解決しようとしていたのかを変えなければなりませんでした。
はその後、私はデータをOpenCVのvideoCapture
を使用して簡単に私の最後のC++アプリケーションで得ることができRTSPストリーム接続、のようなものを作成し、Wowza ServerにAndroidのビデオカメラをストリーミングする関連付けることが可能なlibstreamingを見つけました。ただし、libstreamingは独自のsurfaceView
を使用します。言い換えれば、libstreaming surfaceView
とDJI DroneのvideoSurface
をリンクする必要があります。私はAndroidには本当に新しいので、それを行う方法の手掛かりはありません。
合計すると、正しいアプローチですか?誰か良いアイデアがありますか?事前に感謝