码流订阅

2024-08-23
暂无评分

概述

码流订阅功能支持订阅飞行器主摄和 FPV 相机 H.264 码流,支持指定订阅 540P、720P、720P High、1080P 和 1080P High 清晰度码流,通过实时获取的图传视频画面,能够进行实时 AI 处理。

使用码流订阅功能

码流订阅功能提供码流服务状态,和码流初始化、码流传输开始、码流传输停止、和相机源切换接口。

订阅码流服务状态

在云端进行直播配置,传输通道均衡,飞行器未连接,图传无信号等可导致码流状态变更,通过码流服务状态可以订阅到实时码流的可用状态

// filename: include/liveview.h

// 码流状态
using LiveviewStatus = uint32_t;

// 码流状态回调处理函数
using LiveviewStatusCallback =
        std::function<void(const LiveviewStatus& status)>;

// 订阅码流状态接口
virtual ErrorCode SubscribeLiveviewStatus(const LiveviewStatusCallback& callback) = 0;
LiveviewStatus.bit0LiveviewStatus.bit1LiveviewStatus.bit2LiveviewStatus.bit3LiveviewStatus.bit4LiveviewStatus.bit5
0码流清晰度自适应不可用540P 码流清晰度不可用720P 码流清晰度不可用720P High 码流清晰度不可用1080P 码流清晰度不可用1080P High 码流清晰度不可用
1码流清晰度自适应可用540P 码流清晰度可用720P 码流清晰度可用720P High 码流清晰度可用1080P 码流清晰度可用1080P High 码流清晰度可用

初始化、开始、和结束订阅码流

// 码流订阅初始化

// 1. 实现回调处理函数
ErrorCode H264StreamHandleCallback(const uint8_t* buf, uint32_t len) {
	// TODO: 实现收到的码流进行数据处理,buf 和 len 参数代表码流数据和长度。
	return kOk;
}

// 2. 选项初始化: 订阅主摄, 码流质量 720p,码流回调处理函数 H264StreamHandleCallback
auto liveview = CreateLiveview();
Liveview::Option option = { Liveview::kCameraTypePayload, Liveview::kStreamQuality720p, H264StreamHandleCallback };
liveview->Init(option);

// 3. 开始码流传输
liveview->StartH264Stream();

// 可以通过以下接口切换码流相机镜头
liveview->SetCameraSource(CameraSource::kCameraSourceIR);

// 4. 结束码流订阅
liveview->StopH264Stream();

订阅码流初始化

码流订阅功能初始化后,确定订阅码流相机,码流质量和接收码流回调处理函数,边缘计算初始化和机场建立码流传输通道环境,调用该接口之后不应该重复调用进行初始化。接收码流回调函数:设置接收码流回调接口,在开始码流传输时,用于接收码流处理函数。返回 kOk 即为成功。返回其他值:

  • kErrorInvalidArgument:参数无效,检查参数是否为合理的枚举值。
  • kErrorParamGetFailure:无法获取相机配置参数,检查 CameraType 是否正确。
  • kErrorSystemError:初始化连接失败,检查网卡是否可用,可从日志获取更多信息,联系技术支持。

接口函数说明:

参数说明
相机类型提供最多两路码流的订阅,分别为负载相机和 FPV。
码流质量可订阅码流状态中显示可用的码流质量,最多五档可选择:540P,720P,720PHigh,1080P,1080PHigh。

注意:码流质量受其它因素影响比如直播配置均衡,图传信号等,虽然指定的码流质量,但并不总是可用订阅到指定的码流质量,开始码流传输优先使用指定的质量,如果当前码流质量不可用,会选择相邻档位的码流传输,应用层设计可考虑兼容码流质量进行业务处理。

    /**
     * @brief 初始化直播码流参数
     */

   /**
     * @brief 码流相机的类型
     */
    enum CameraType {
        /*! FPV 相机 */
        kCameraTypeFpv = 0,

        /*! 负载相机 */
        kCameraTypePayload = 1,
    };

    struct Options {
        /*! 订阅码流的相机类型 */
        CameraType camera;

        /*!
         * 订阅码流的质量 , 注意:实际订阅到的码流质量并不一定相符,机场会根据当前实际情况返回最接近码流的码流质量
         */
        StreamQuality quality;

        /*! 接收码流的处理函数 */
        H264StreamCallback callback;
    };

     * @brief 码流的质量
     */
    enum StreamQuality {
        /*! 码流质量 540p: 30fps, 960*540, bps 512*1024 */
        kStreamQuality540p = 1,

        /*! 码流质量 720p: 30fps, 1280*720, bps 1024*1024 */
        kStreamQuality720p = 2,

        /*! 码流质量 720pHigh: 30fps, 1280*720, bps 1024*1024 + 512*1024 */
        kStreamQuality720pHigh = 3,

        /*! 码流质量 1080p: 30fps, 1920*1080, bps 3*1024*1024 */
        kStreamQuality1080p = 4,

        /*! 码流质量 1080p: 30fps, 1920*1080, bps 8*1024*1024 */
        kStreamQuality1080pHigh = 5,
    };

    /**
     * @brief liveview camera H.264 stream callback
     * @param buf: 接收的 H.264 码流数据
     * @param len: 接收的 H.264 码流数据长度
     */
    using H264StreamCallback =
        std::function<ErrorCode(const uint8_t* buf, uint32_t len)>;

     * @brief 初始化直播码流订阅 , 注意:对于某个相机,只能初始化一次
     * @param option: 初始化码流配置
     * @return Execution result
     */
    virtual ErrorCode Init(const Options& option) = 0;

开始码流传输

在初始化成功后,调用该接口开始码流传输,开始成功后,通过初始化接口设置的回调处理函数可以收到码流传输的数据。返回 kOk 即为成功。返回其他值:

  • kErrorInvalidArgument:参数内部校验不通过,从日志获取更多信息,联系技术支持。
  • kErrorSystemError: 检查飞行器是否连接正常,网络连接是否正常。
  • kErrorRemoteFailure:远端机场错误,检查机场是否有故障,从日志获取更多信息,联系技术支持。
  • kErrorRequestTimeout:请求超时,检查网络连接是否正常。

注意:当码流状态中无可订阅码流时(比如飞行器没有上电、未正确对频),调用该接口将会阻塞等待可用,超时(5~10S)返回失败。码流传输开始后,SDK 不确保覆盖所有情况的码流传输中断的恢复,使用端可以结合码流回调是否接收到数据、订阅的码流状态,在码流中断后,再次调用该接口尝试恢复码流传输。

    /**
     * @brief 开始直播码流
     * @return Execution result
     */
    virtual ErrorCode StartH264Stream() = 0;

停止码流传输

在初始化成功后,调用该接口将停止远端码流传输。返回 kOk 即为成功。返回其他值:

  • kErrorRemoteFailure:远端机场错误,检查机场是否有故障,从日志获取更多信息,联系技术支持。

  • kErrorRequestTimeout:请求超时,检查网络连接是否正常。

    /**

    • @brief 停止直播码流
    • @return Execution result */ virtual ErrorCode StopH264Stream() = 0;

设置负载相机码流源

通过该接口,码流订阅初始化 FPV、或负载相机 Liveview,都可以设置相机码流源。返回 kOk 即为指令发布成功,极少数情况下,并不能代表相机码流源切换成功,只能通过画面来检验结果是否生效。

    /*
     * @brief 负载相机的码流源
     */
    enum CameraSource {
        /*! 广角镜头 */
        kCameraSourceWide = 1,

        /*! 变焦镜头 */
        kCameraSourceZoom = 2,

        /*! 红外镜头 */
        kCameraSourceIR = 3,
    };

    /**
     * @brief 设置相机码流源
     * @return Execution result
     */
    virtual ErrorCode SetCameraSource(CameraSource source) = 0;
若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。