MsdkV5版本,如何显示视频流

已完成

评论

13 条评论

  • DJI Developer Support
    您的代码应该是可以显示视频的,因为您已经将在初始化的时候将视频通道类型与videoDecoder绑定了,这是只要对应的视频通道是开启的,那么videoDecoder就会接收到对应视频通道的视频数据,然后进行编解码和渲染。 您有检查没有画面显示的时候,视频通道是开启还还是关闭吗?
    1
    评论操作 固定链接
  • liujinsong

    关键是我如果在mainActivity里面注册成功后,等待接收到设备连接成功结果时去执行mainActivity中的initVideo方法,如下图所示

    private void initVideo(){
    primaryFpvWidget.initVideo();
    MediaDataCenter.getInstance().getVideoStreamManager().addStreamSourcesListener(sources -> runOnUiThread(() -> updateFPVWidgetSource(sources)));
    primaryFpvWidget.setOnFPVStreamSourceListener((devicePosition, lensType) -> {
    LogUtils.i(TAG, "FPVStreamSourceListener=="+devicePosition+" ;lensType"+lensType);
    cameraSourceProcessor.onNext(new CameraSource(devicePosition, lensType));
    });
    }

    然后我打断点去执行了FPVwidget中的如下方法

    public void initVideo(){
    if (!isInEditMode()) {
    fpvSurfaceView.getHolder().addCallback(this);
    rotationAngle = LANDSCAPE_ROTATION_ANGLE;
    }
    if (null!=widgetModel){
    widgetModel.setVideoChannelType(videoChannelType);
    }
    if (null!=attrs){
    initAttributes(context, attrs);
    }
    }
    private void initAttributes(Context context,AttributeSet attrs) {
    LogUtils.d(TAG,"initAttributes=====");
    TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.FPVWidget);
    if (null!=typedArray){
    if (!isInEditMode()){
    int videoChannel=typedArray.getInt(R.styleable.FPVWidget_uxsdk_videoChannelType,0);
    videoChannelType = (VideoChannelType.find(videoChannel));
    if (null!=widgetModel){
    widgetModel.setVideoChannelType(videoChannelType);
    widgetModel.initStreamSource();
    if (null!=widgetModel.streamSource){
    updateVideoSource(widgetModel.streamSource,videoChannelType);
    }
    }
    }
    }
    }

    但是在这里面的widgetModel.initStreamSource();时就报空指针了,我断点调试发现底下不管时获取StreamSource集合或者IVideoChannel集合都是为空的,然后MediaDataCenter.getInstance().getVideoStreamManager().getAvailableVideoChannel(videoChannelType)返回来也是空的,如下图所示

        private IVideoChannel getVideoChannel(){
    List<StreamSource> list= MediaDataCenter.getInstance().getVideoStreamManager().getAvailableStreamSources();
    List<IVideoChannel> channels= MediaDataCenter.getInstance().getVideoStreamManager().getAvailableVideoChannels();
    // LogUtils.d(TAG,"获取视频源通道:"+(null!=MediaDataCenter.getInstance().getVideoStreamManager().getAvailableVideoChannel(videoChannelType)?MediaDataCenter.getInstance().getVideoStreamManager().getAvailableVideoChannel(videoChannelType):"null"));
    return MediaDataCenter.getInstance().getVideoStreamManager().getAvailableVideoChannel(videoChannelType);
    }

    0
    评论操作 固定链接
  • DJI Developer Support
    你提到是在注册成功后,等待接收到设备连接成功结果的时候去执行初始化,所以您是在onRegisterSuccess去获取视频通道吗?有尝试在onProductConnect回调里去获取吗? 你使用的是什么无人机呢?
    0
    评论操作 固定链接
  • liujinsong

    我就是在productConnect回调去获取的,使用的是M300 RTK

    0
    评论操作 固定链接
  • DJI Developer Support
    我测试了在productConnect里直接获取的确是返回null,你可以设置一个streamsource监听,在获取到视频源之后再获取videochannel。
    0
    评论操作 固定链接
  • liujinsong

    我按照你的方法去可以获取到了,但是最终开启通道成功后,我再去检查通道状态就是关闭状态,而且也没有视频画面显示,如下图所示

     

     

     

     

    0
    评论操作 固定链接
  • DJI Developer Support
    已在其他通道处理这个问题。
    -1
    评论操作 固定链接
  • 1772889689

    遇到同样的问题,

    addStreamSourcesListener

    方法回调回来的List<StreamSource> 虽然不是null但size=0

    这个地方怎么解决?

     

     

    0
    评论操作 固定链接
  • DJI Developer Support
    addStreamSourcesListener 方法回调回来的List 虽然不是null但size=0 这个地方怎么解决? -->设置成功之后长时间都没有回调可用的视频源吗?什么飞机呢?在哪个位置设置的呢?
    0
    评论操作 固定链接
  • 1772889689

    你好,飞机是MAVIC 3 ,在onProductConnect中添加的回调,设置成功后立马回调了空的list,然后就一直没有回调数据。然后在另一个页面启动了循环调用

    MediaDataCenter.getInstance().getVideoStreamManager().getAvailableStreamSources();

    也是一样获取不到。

    0
    评论操作 固定链接
  • 1772889689

    飞机应该是 MAVIC 3 3E

     

    0
    评论操作 固定链接
  • DJI Developer Support
    我使用MSDK 5.2在mavic 3上进行验证,基本上onProductConnect一回调,onStreamSourceUpdate就回调了获取到的视频源信息。 ![](https://djisdksupport.zendesk.com/attachments/token/tRbK4m0Yn7CJjoBBas8ptwFQq/?name=image.png)
    0
    评论操作 固定链接
  • 313880602

    解码器需要在注册完成之后初始化

    0
    评论操作 固定链接

请先登录再写评论。