{
  "version": "2.0",
  "service": "<p> </p>",
  "operations": {
    "JoinStorageSession": "<p> Join the ongoing one way-video and/or multi-way audio WebRTC session as a video producing device for an input channel. If there’s no existing session for the channel, a new streaming session needs to be created, and the Amazon Resource Name (ARN) of the signaling channel must be provided. </p> <p>Currently for the <code>SINGLE_MASTER</code> type, a video producing device is able to ingest both audio and video media into a stream, while viewers can only ingest audio. Both a video producing device and viewers can join the session first, and wait for other participants.</p> <p>While participants are having peer to peer conversations through webRTC, the ingested media session will be stored into the Kinesis Video Stream. Multiple viewers are able to playback real-time media.</p> <p>Customers can also use existing Kinesis Video Streams features like <code>HLS</code> or <code>DASH</code> playback, Image generation, and more with ingested WebRTC media.</p> <note> <p>Assume that only one video producing device client can be associated with a session for the channel. If more than one client joins the session of a specific channel as a video producing device, the most recent client request takes precedence. </p> </note>"
  },
  "shapes": {
    "AccessDeniedException": {
      "base": "<p>You do not have required permissions to perform this operation.</p>",
      "refs": {
      }
    },
    "ChannelArn": {
      "base": null,
      "refs": {
        "JoinStorageSessionInput$channelArn": "<p> The Amazon Resource Name (ARN) of the signaling channel. </p>"
      }
    },
    "ClientLimitExceededException": {
      "base": "<p> Kinesis Video Streams has throttled the request because you have exceeded the limit of allowed client calls. Try making the call later. </p>",
      "refs": {
      }
    },
    "InvalidArgumentException": {
      "base": "<p>The value for this input parameter is invalid.</p>",
      "refs": {
      }
    },
    "JoinStorageSessionInput": {
      "base": null,
      "refs": {
      }
    },
    "ResourceNotFoundException": {
      "base": "<p>The specified resource is not found.</p>",
      "refs": {
      }
    },
    "String": {
      "base": null,
      "refs": {
        "AccessDeniedException$message": null,
        "ClientLimitExceededException$message": null,
        "InvalidArgumentException$message": null,
        "ResourceNotFoundException$message": null
      }
    }
  }
}
