开始直播

2022-07-07
暂无评分

服务端通过mqtt给设备端发送method=live_start_push的指令,这条指令采用的是物模型的service方式交互。

services

通信方式: MQTT

API接口:

PUB Topic: thing/product/#{遥控器/机场SN}/services
SUB Topic: thing/product/#{遥控器/机场SN}/services_reply

参数说明:

  • {pid}:指网关设备的产品ID,一般是用设备的SN号来表示,每台设备都不一样,所以需要服务端订阅Topic的时候用通配符来表示。

Services Payload段参数示例

{
    "tid": "1af9204671b24e4fb016e6506380a4e0",
    "bid": "88bcbac59d71447b863c6dac70d30563",
    "method": "live_start_push",
    "data": {
        "url_type": 0,
        "url": "channel=1ZNDH1D0010098_39-0-7\u0026sn=1ZNDH1D0010098\u0026token=006dca67721582a48768ec4d817b7b25a86IADk%2Fcm%2Fdv%2BHY6qT%2FAKM6y7TcUe4lXNvZpycH7vUMAlM6pFALUKF2zyCIgA82pQE8cCoYAQAAQDxwKhgAgDxwKhgAwDxwKhgBADxwKhg\u0026uid=50000",
        "video_id": "1ZNDH1D0010098/39-0-7/normal-0",
        "video_quality": 0
    }
}

参数说明:

  • url_type: 直播协议类型,枚举类型

    0:声网Agora

    1:RTMP

    2:RTSP

    3:GB28181

  • url:直播参数,字符串类型

    RTMP: (rtmp://xxxxxxx)

    ​ 示例:rtmp://192.168.1.1:8080/live

    RTSP:(uerName&password&port)

    ​ 示例:userName=dji-cloud-api&password=123456&port=8080

    GB28181:(serverIP&serverPort&serverID&agentID&agentPassword&localPort&channel)

    ​ 示例: serverIP=192.168.1.1&serverPort=8080&serverID=34000000000000000000&agentID=300000000010000000000&agentPassword=0000000&localPort=7060&channel=340000000000000000000

    声网AGORA:(channel&sn&token&uid)

    ​ 示例: channel=1ZNDH360010162_39-0-7&sn=1ZNDH360010162&token=006dca67721582a48768ec4d817b7b25a86IAB4cw2JgN6iX8BpTPdc3e4S1Iendz94IFJ56aSXKvzAJei27MqF2zyCIgCLIIoBt41+YAQAAQC3jX5gAgC3jX5gAwC3jX5gBAC3jX5g&uid=50000

    注意:声网生成的token可能带有“+” “ ”等特殊字符,需要做一次url encode,不然PILOT端会出现解析错误的情况。

  • video_id:直播视频流的ID编号,字符串类型

    ​ video_id有格式要求,具体的组合格式为飞机SN号/负载及挂载位置枚举值/负载lens编号

    ​ 示例: 1ZNDH1D0010098/39-0-7/normal-0

  • video_quality:直播质量

    0:自适应

    1:流畅

    2:标清

    3:高清

    4:超清

不同类型的直播命令字段要求

字段声网RTMPRTSPGB28181
tid必要必要必要必要
bid必要必要必要必要
method必要必要必要必要
url必要必要必要必要
url_type必要必要必要必要
video_id必要必要必要必要
video_quality设置清晰度时需要设置清晰度时需要设置清晰度时需要设置清晰度时需要

services_reply

对于消息的应答,服务端需要对tid`bid`保持一致。客户端是根据这两个字段来判断服务端是对哪条消息的应答。

payload段示例

{
    "tid":"fc55099072324bbba9ee7b014d9637de",
    "bid":"9b748a8e00b94d02879e506160cf7ab5",
    "method":"live_start_push",
    "data":{
        "result":0,
        # 以下是针对rtsp的ack,需要带上直播的url返回回去
        "info": "rtsp://${username}:${password}@192.168.1.100:8445/live/1"
    }
}

参数说明:

  • result:错误码,具体的含义见《应用服务错误码》章节
  • info:对于在应答时需要带上参数的情况下,可以在info中添加,例如RTSP就需要返回设备端的直播url地址。

注意

1. RTSP通信方式比较特殊,需要在应答的消息中添加设备的直播推流地址,供服务端去拉流。