1. 程式人生 > >視訊裝置通過rtsp接入amazon alexa echo show

視訊裝置通過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"
        }
      ]
    }
  }
}

分別執行這兩個測試事件, 檢視執行結果