Android 如何从DJI Professional 3摄像机流式播放现场视频? 在我的C++应用程序中,我必须从DGI幻像3相机中获取直播视频,以便在OpenCV中进行计算机视觉处理。
首先,我尝试通过UDP套接字发送H264原始数据,在这个回调中:Android 如何从DJI Professional 3摄像机流式播放现场视频? 在我的C++应用程序中,我必须从DGI幻像3相机中获取直播视频,以便在OpenCV中进行计算机视觉处理。,android,c++,ffmpeg,dji-sdk,libstreaming,Android,C++,Ffmpeg,Dji Sdk,Libstreaming,首先,我尝试通过UDP套接字发送H264原始数据,在这个回调中: mReceivedVideoDataCallBack = new CameraReceivedVideoDataCallback() { @Override public void onResult(byte[] videoBuffer, int size) { //Here, I call a method from a class I created,
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\u send\u packet
和avcodec\u receive\u frame
进行解码。我在AVCodecContext
方面也遇到了问题,因为我的UDP通信不是RTSP那样的流,它可以从中获取有关其源代码的信息。因此,我不得不改变我试图解决问题的方式
然后,我发现,它可以与Android视频摄像机流到一起,创建一个类似RTSP流连接的数据,在这里,数据可以在我的最终C++应用程序中轻松地使用OpenCV <代码>视频捕获< /代码>。但是,libstreaming使用自己的
surfaceView
。换句话说,我必须将libstreamingsurfaceView
与DJI无人机的videoSurface
链接起来。我对Android真的是个新手,所以不知道该怎么做
总而言之,这是正确的方法吗?有人有更好的主意吗?提前谢谢我要赌几件事。嗯,主要是一件事。人们通常需要在发送片段视频包之前创建它们。h264的IDR对于udp流太大 端点之间有一个可靠的com链接,您可以添加一个方法,将单个潜在的大数据包输入转换为一个或多个小数据包输出 可能大于1000字节的数据包需要分成几个h264 NALU类型28。具有相同时间戳的小数据包可以在STAP-A类型24s中发送。通常,您可以在stap-a中找到带内SP/PP 一旦你有了一个IDR和大切片的打包器,在接收器上写下你的depacketizor,然后你应该得到清晰的解码图片
参考h264 RTP规格,了解如何制造28s型。经过很长时间,我终于开发出一种能够正确传输DJI无人机摄像头的系统