gpt4 book ai didi

android - 如何从 DJI Professional 3 相机流式传输实时视频?

转载 作者:行者123 更新时间:2023-11-28 05:11:26 25 4
gpt4 key购买 nike

我必须在我的 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 库进行了测试,但无法使用我的 UDP 数据分配 AVPacket,以便使用 avcodec_send_packetavcodec_receive_frame 进行解码.我也遇到了 AVCodecContext 的问题,因为我的 UDP 通信不是像 RTSP 那样的流,它可以在其中获取有关其源的信息。因此,我不得不改变尝试解决问题的方式。

然后,我找到了libstreaming , 其中可以关联以将 android 摄像机流式传输到 Wowza Server ,创建类似 RTSP 流连接的东西,在我的最终 C++ 应用程序中可以使用 OpenCV videoCapture 轻松获取数据。然而,libstreaming 使用它自己的 surfaceView。换句话说,我必须将 libstreaming surfaceView 与 DJI 无人机的 videoSurface 链接起来。我是 Android 新手,所以不知道如何操作。

综上所述,这是正确的做法吗?有人有更好的主意吗?提前致谢

最佳答案

我要打赌几件事。好吧,主要是一件事。人们通常需要在发送视频数据包之前处理创建 fragment 视频数据包的问题。 h264 的 IDR 对于 udp 流来说太大了。

在端点之间有可靠的 com 链接,您可以添加一种方法,将单个潜在的大数据包输入转换为一个或多个小数据包输出。

大于 1000 字节的数据包需要分成几个 h264 NALU 类型 28。较小且具有相同时间戳的数据包可以在 STAP-A 类型 24 中发送。通常,您可以在 stap-a 中找到带内 sps/pps。

一旦你有了用于 IDR 和大切片的分包器,在接收器上编写你的分包器,然后你应该得到清晰的解码图片。

请参阅 h264 RTP 规范以了解如何制作类型 28s。

关于android - 如何从 DJI Professional 3 相机流式传输实时视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com