DJI Mobile SDK初步开发

本文介绍如何使用DJI Mobile SDK进行初步开发,包括配置开发环境、接收无人机视频流、控制无人机及显示无人机相机画面。通过Android Studio集成SDK,实现视频解码、自动起飞/降落和虚拟摇杆控制等功能。
摘要由CSDN通过智能技术生成

大疆Mobile SDK初步开发

1. 从MSDK示例代码开始

  • 配置代码运行环境
    (1)下载Moblie SDK:DJI MSDK下载
    (2)准备Android开发环境,推荐使用Android Studio 2.1.1以上版本。官网下载网址:Download Android Studio或者 Android Studio

  • 从GitHub上下载Android demo project:Mobile-SDK-Android

  • 在大疆官网创建APP KEY。在大疆官网的个人中心的应用一栏中可以生成APP KEY

  • 在创建界面需要注意的是Package Name中需要填写的是实际代码程序中的包名,其余选项随意填写

APP KEY 生成

  • 创建完成后点击打开示例代码中的Manifests->AndroidManifests.xml文件,把App key粘贴到android:value后

添加APP KEY

  • 连接手机,手机打开USB调试模式,如果Android Android未查询到手机可以在命令提示符中查询adb devices,没有显示连接设备则说明手机未安装adb 驱动

adb devices查看

  • 点击run运行程序。在这里插入图片描述

  • 手机连接无人机遥控器测试APP.

2. 进行视频流的接收

  • 在大疆官网文档中详细的介绍了如何完成一个对无人机视频流进行解码:Android Video Stream Decoding Sample - DJI Mobile SDK Documentation.

  • 1.初始化一个NativeHelper的实例对象,来监听来自无人机高空的视频数据。
    2.将原始的H.264视频数据送入FFmpeg中解析。
    3.将解析完成的视频数据从FFmpeg中取出,并将解析后的数据缓存到图像帧序列中
    4.将MediaCodec作为一个解码器,然后对视频中的I帧进行捕获。
    5.解码完成后,可为MediaCodec的输出数据配置一个TextureView或SurfaceView用来对视频画面进行预览,或者调用监听器对解码数据进行监听完成其他操作。
    6.释放FFmpeg和MediaCodec资源。
    
  • 通过上述流程我们能够知道要能够在设备上显示无人机相机画面大体上分为三步:接受无人机视频流、对视频流解码以及把解码后数据输出画面。那么为什么要把无人机传输过来的视频解码为YUV格式呢

  • 原因是在Android系统中,图像是以YUVImage的格式传递的,因此,在存储数据的时候我们就需要使用YUV图像格式。

  • 我们可以下载官网给出的 sample project:Github Page ,在项目代码中大疆给出了两种进行解码的方式:利用大疆自己编写的DJIViedeoStreamDecoder解码器以及利用之前大疆就编写好的DJICodecManager解码器。在布局中分别在livestream_preview_ttvlivestream_preview_sf中显示画面。

  • 在代码meidaDJIVideoStreamDecoder.java文件中我们可以看到初始化解码器MediaCodec的源代码:

  • 	/**
         * Initialize the hardware decoder.
         */
        private void initCodec() {
         
            if (width == 0 || height == 0) {
         
                return;
            }
            if (codec != null) {
         
                releaseCodec();
            }
            loge("initVideoDecoder----------------------------------------------------------");
            loge("initVideoDecoder video width = " + width + "  height = " + height);
            // create the media format
            MediaFormat format = MediaFormat.createVideoFormat(VIDEO_ENCODING_FORMAT, width, height);
            if (surface == null) {
         
                logd("initVideoDecoder: yuv output");
                // The surface is null, which means that the yuv data is needed, so the color format should
                // be set to YUV420.
                format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
            } else {
         
                logd("initVideoDecoder: display");
                // The surface is set, so the color format should be set to format surface.
                format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
            }
            try {
         
                // Create the codec instance.
                codec = MediaCodec.createDecoderByType(VIDEO_ENCODING_FORMAT);
                logd( "initVideoDecoder create: " + (codec == null));
                // Configure the codec. What should be noted here is that the hardware decoder would not 
                // output any yuv 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值