视频设备通过rtsp接入amazon alexa echo show

官方资料

视频设备接入amazon的智能家居系统, 有两种方式

  1. 通过rtsp接入, 方式简单, 但不能对讲
    https://developer.amazon.com/zh/docs/smarthome/connect-a-camera-to-alexa.html
  2. 通过webrtc接入, 支持双向对讲, 但是太复杂
    https://developer.amazon.com/zh/docs/device-apis/alexa-rtcsessioncontroller.html

基本框架图

总体框架
在这里插入图片描述

厂商云的内部框架
在这里插入图片描述

创建lambda服务

地区要选择美国东部 (弗吉尼亚北部), 其它区不行. (至少, 我接入的时候, 是这么要求的)
lambda服务, 其实就是把代码托管给亚马逊运行.
https://console.aws.amazon.com/lambda/home?region=us-east-1#/home

官方文档
https://developer.amazon.com/zh/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html

  1. 选择一个蓝图, 搜索alexa, 随便选一个, 下一步
  2. 输入函数名称
  3. 角色 选择"从一个或多个模板创建角色"
  4. 策略模板 选择"简单微服务权限"
  5. 先不管js内容, 直接创建, 然后进入配置界面
  6. 触发器 选择"Alexa Smart Home"
    还没有配置完, 因为缺少应用程序 ID, 需要再去创建Alexa Skill
    记录lambda的ID, 类似这样格式的arn:aws:lambda:us-east-1:3000000000:function:myTestFunc

创建SKILL

https://developer.amazon.com/alexa/console/ask/create-new-skill

  1. 创建, skill model选择Smart Home, 下一步
  2. payload version默认选择 v3
  3. lambda参数中的Default endpoint, 输入创建lambda服务步骤中生成的lambda ID
    此时还没有配置完成, 因为lambda也没有配置完成.
    此时可以看到skill ID, 类似这样子的, amzn1.ask.skill.6b3461e9-9bd8-4d55-b14e-000000000000

继续配置lambda服务

触发器的应用程序 ID, 填入刚才生成的SKILL ID, 选择添加, 然后保存

继续配置skill

这时可以保存了, 先保存一下, 点击Setup Account Linking, 配置账号关联
剩下的都是OAuth2.0的东西, 读者自己去配置吧.

再次配置lambda服务

上面创建的lambda, js还没有编辑. 使用python或java的, 自己去琢磨吧.
开发者需要先了解一下nodejs, http://nodejs.cn/api/
编辑index.js
将https://github.com/wzjwhut/alexa-camara-skill中的alexa_camera_skill.js的内容拷贝进去
保存

测试lambda

配置测试事件, 模拟请求.
https://github.com/wzjwhut/alexa-camara-skill 的test.js 有这些模拟请求.
找到配置测试事件菜单,
创建新测试事件, 名称Discovery

{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "38A28869-DD5E-48CE-BBE5-00000000"
    },
    "payload": {
      "scope": {
        "type": "BearerToken",
        "token": "123456"
      }
    }
  }
}

创建新测试事件, 名称uri

{
  "directive": {
    "header": {
      "namespace": "Alexa.CameraStreamController",
      "name": "InitializeCameraStreams",
      "payloadVersion": "3",
      "messageId": "38A28869-DD5E-48CE-BBE5-00000001",
      "correlationToken": "123456"
    },
    "endpoint": {
      "endpointId": "98029b8000ef4f7524d80450bf4e9a15",
      "scope": {
        "type": "BearerToken",
        "token": "123456"
      },
      "cookie": {}
    },
    "payload": {
      "cameraStreams": [
        {
          "protocol": "RTSP",
          "resolution": {
            "width": 1920,
            "height": 1080
          },
          "authorizationType": "BASIC",
          "videoCodec": "H264",
          "audioCodec": "AAC"
        },
        {
          "protocol": "RTSP",
          "resolution": {
            "width": 1280,
            "height": 720
          },
          "authorizationType": "NONE",
          "videoCodec": "MPEG2",
          "audioCodec": "G711"
        }
      ]
    }
  }
}

分别执行这两个测试事件, 查看执行结果

猜你喜欢

转载自blog.csdn.net/wzj_whut/article/details/85718004