GithubHelp home page GithubHelp logo

awslabs / amplify-video Goto Github PK

View Code? Open in Web Editor NEW
267.0 53.0 56.0 23.99 MB

An open source Category Plugin for the AWS Amplify-CLI that makes it easy to deploy live and file based streaming video services and integrate them into your Amplify applications.

Home Page: https://www.npmjs.com/package/amplify-category-video

License: Apache License 2.0

JavaScript 78.53% EJS 20.69% SCSS 0.01% Shell 0.77%
amplify-video-plugin obs video-stream aws-amplify video-streaming

amplify-video's Introduction

Amplify Video Plugin

An open source plugin for the Amplify CLI that makes it easy to incorporate video streaming into your mobile and web applications powered by AWS Amplify and AWS Media Services

Read more about Amplify Video on the AWS Media Blog

Installation

Amplify Video is a Category Plugin for AWS Amplify that provides video streaming resources to your Amplify project. It requires that you have the Amplify CLI installed on your system before installing the Amplify Video plugin

To get started install the Amplify CLI via NPM as shown below or follow the getting started guide.

npm install -g @aws-amplify/cli
amplify configure

With the Amplify CLI installed, install this plugin:

npm i amplify-category-video -g

Add a video resource to your Amplify project

amplify video add

Getting Started with Amplify Video

Tutorials

Contributions

Interested in helping us with this project? Please see the contribution guide.

License

This library is licensed under the Apache 2.0 License.

amplify-video's People

Contributors

abhjaw avatar alextyner avatar armenr avatar ashwinraghuraman avatar axptwig avatar conorw avatar dependabot[bot] avatar donocode avatar github-actions[bot] avatar nathanagez avatar pgonzalez-otf avatar saxophonicle avatar shamik45 avatar shamikatamazon avatar smp avatar spaniernathan avatar wizage avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

amplify-video's Issues

Moving away from system templates to Amplify video templates

Is your feature request related to a problem? Please describe.
Create custom templates for Amplify video to move away from the system templates.

Describe the solution you'd like
Put any templates you want inside a templates folder (location to be provided). The name should be human readable and the id should contain "amplify-video-".

To templates are required to finish:

  • "Video" ( Specs to be determined by @smp )
  • "Video with Thumbnails" ( Should copy video but add thumbnails )

Related to #4

Change from output folder to ${id} for placement of files

Is your feature request related to a problem? Please describe.
Files should be placed in the respective folders/keys instead of placing them in just a broad output/ key.

Describe the solution you'd like
Replace output with ${id}

Files this will effect for sure

  • Token generator lambda
  • Job kick off lambda

Docs will need to be updated

Update documentation and clarify documentation

Is your feature request related to a problem? Please describe.
The docs are very lacking and we should update the documents to reflect the changes made amplify video.

Describe the solution you'd like
Move docs to wiki section or update the readme.

Add status of upload of supporting assests.

Is your feature request related to a problem? Please describe.
When running amplify video setup or amplify add/update video you expect to see how the progress of supporting assets looks like. This way people don't cancel because they think the program is hanging.

Describe the solution you'd like
Find either a progress bar. Output the files uploaded. Or find another way to show progress.

Cloudfront Distro Fails to Push

Describe the bug
Adding a livestream resource with mediapackage+mediastore and cloudfront enabled does not deploy correctly.
To Reproduce
Steps to reproduce the behavior:
a45e60f3f245:cf-test przybill$ amplify add video
? Please select from one of the below mentioned services: Livestream
? Provide a friendly name for your resource to be used as a label for this category in the project: mylivestream
? Do you want to modify any advanced video encoding parameters? No
? Input Security Group: 0.0.0.0/0
? MediaLive ingest type: RTMP_PUSH
? Encoding Profile: FULL (6 renditions)
? Auto Start: Yes
? Where do you want to stream to? MediaPackage & MediaStore
? Output streaming standards. MediaPackage supports HLS, DASH, MSS, and/or CMAF: HLS,DASH
? Specify catch-up TV window: 86400
? Create distribution: Yes

AMPLIFY PUSH OUTPUT BELOW

⠹ Updating resources in the cloud. This may take a few minutes...

UPDATE_IN_PROGRESS amplify-cf-test-dev-123132 AWS::CloudFormation::Stack Fri Nov 08 2019 12:52:31 GMT-0800 (Pacific Standard Time) User Initiated
CREATE_IN_PROGRESS videomylivestream AWS::CloudFormation::Stack Fri Nov 08 2019 12:52:34 GMT-0800 (Pacific Standard Time)
CREATE_FAILED videomylivestream AWS::CloudFormation::Stack Fri Nov 08 2019 12:52:35 GMT-0800 (Pacific Standard Time) Parameter 'pEnableDistribution' must be one of AllowedValues
UPDATE_ROLLBACK_IN_PROGRESS amplify-cf-test-dev-123132 AWS::CloudFormation::Stack Fri Nov 08 2019 12:52:36 GMT-0800 (Pacific Standard Time) The following resource(s) failed to create: [videomylivestream].
⠸ Updating resources in the cloud. This may take a few minutes...

UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS amplify-cf-test-dev-123132 AWS::CloudFormation::Stack Fri Nov 08 2019 12:53:01 GMT-0800 (Pacific Standard Time)
⠸ Updating resources in the cloud. This may take a few minutes...

DELETE_COMPLETE videomylivestream AWS::CloudFormation::Stack Fri Nov 08 2019 12:53:02 GMT-0800 (Pacific Standard Time)
UPDATE_ROLLBACK_COMPLETE amplify-cf-test-dev-123132 AWS::CloudFormation::Stack Fri Nov 08 2019 12:53:02 GMT-0800 (Pacific Standard Time)
⠏ Updating resources in the cloud. This may take a few minutes...Error updating cloudformation stack
⠏ Updating resources in the cloud. This may take a few minutes...

Following resources failed

✖ An error occurred when pushing the resources to the cloud

Resource is not in the state stackUpdateComplete
An error occured during the push operation: Resource is not in the state stackUpdateComplete

Expected behavior
Resource should succeed to push.

Transition to CloudFormation

Is your feature request related to a problem? Please describe.
Using Lambda's to deploy Elemental services is only a work around is not maintainable for new feature releases. Transitioning to CloudFormation deployment instead of Lambda deployment will provide more clear deployment and updating of infrastructure.

Describe the solution you'd like
To use just CloudFormation to deploy Elemental services instead of using Lambda to deploy the Elemental service.

Additional context
Waiting for service team.

Dynamic Colors for Terminal Text

Is your feature request related to a problem? Please describe.
If a user has a background terminal color that closely matches our chalk/info/error message colors it can be difficult to read the output. This feature is to dynamically re-color the text based on user colorscheme.

Describe the solution you'd like
Text color should render based on terminal theme colors not static colors set by amplify video

Describe alternatives you've considered
Could simply staticly set colors, but there's no guarantee we won't conflict with environment colors

CloudFront point to both/either MediaPackage and MediaStore

Is your feature request related to a problem? Please describe.
CloudFront should be able to point to either MediaPackage and MediaStore from the template not just MediaPackage.

Describe the solution you'd like
The ability to have CloudFront point to either MediaPackage or MediaStore or both.

Additional context
Lambda function will need to be updated for this to work.

Adding Video on Demand

Is your feature request related to a problem? Please describe.
Adding Video on Demand support. This will be a second section of the video plugin to add video on demand say for example, movies or recordings.

Additional context
This will be a separate section

uncaught non-alphanumeric resource name

Describe the bug
A clear and concise description of what the bug is.
If the resource name has a _ in it, the cli sends an error message that this is not an alphanumeric name. If there is a - in the name it accepts the resource name but causes an error on push
To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Thumbnail generation for VOD assets

Is your feature request related to a problem? Please describe.
Add a VOD MediaConvert template to VOD solution. This involves creating a custom template.

Describe the solution you'd like
Provide a custom template in ./provider-utils/awscloudformation/mc-templates/

Relates to #4

Remove GOP Settings Prompt

Is your feature request related to a problem? Please describe.
Instead of prompting the user to supply a GOP structure, let's hardcode it into the preset selection (HD, SD, etc). In the future, we could consider an import function that would allow for user created channel setting.

Removing this will keep the plugin quick and simple. GOP settings aren't something an application developer should care about or know how to configure. Let's do it for them.

Describe the solution you'd like
Remove the GOP structure and build it into the question abstracting the values away. They would still be able to be changed just not in the prompts.

Describe alternatives you've considered
Describing what a GOP is and making that more clear.

vod input lambda job settings output path trailing /

Describe the bug
A clear and concise description of what the bug is.
For the vod input lambda.

line 41 should be: jobSettings.OutputGroups[0].OutputGroupSettings.HlsGroupSettings.Destination = s3://${outputBucketName}/output/;

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

input lambda getQueue call returning undefined

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
The input lambda makes a call to mediaconvert getQueue but currently returns undefined.
Describe the solution you'd like
A clear and concise description of what you want to happen.
something like

 const q = await mcClient.getQueue(queueParams, function(err, data) {
  if (err) 
    console.log(err, err.stack); // an error occurred
  else     
    console.log(data);
  }).promise();
  const jobParams = {
    JobTemplate: process.env.ARN_TEMPLATE,
    Queue: q["Queue"]["Arn"],
    UserMetadata: {},
    Role: process.env.MC_ROLE,
    Settings: jobSettings,
  };
await  mcClient.createJob(jobParams).promise();

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Live To VOD

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

workflow to convert live streams managed by amplify video to vod content in S3

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Amplify Video Start/Stop Doesn't work

Describe the bug
Start and stop fail to work when trying to manage your workflow for video

To Reproduce
Steps to reproduce the behavior:

  1. Start with pushing a video to the cloud
  2. Run amplify video stop
  3. See that resourceName is not defined error

Expected behavior
The video stream will stop streaming.

Accelerated transcode option

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Some users would like to make use of accelerated transcode pipelines in order to speed up transcoding long video files.

Describe the solution you'd like
A clear and concise description of what you want to happen.

Possibly change the lambda code to use accelerated transcode and add a question:

"do you want to use accelerated transcode?(Y/N)"

Implemented possibly like this in the python call?
AccelerationSettings={
'Mode': 'PREFERRED'
},

One of the choices for both production and non prod environments should have an option

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

New amplify environment creation is failing

Describe the bug
I am using amplify (api, auth, video: npm install -g amplify-category-video) to create Video on demand single page application. I have created and deployed the app using CLI in dev environment. Now I want to create a prod environment by using below steps:

amplify env add prod
Base stack gets created
amplify push
It fails with below message
CREATE_IN_PROGRESS amplify-vodemand-prod-182909-videovodemand-177J3HP6VWX6D-rS3OutputBucket-EXHKMX1GY47G AWS::CloudFormation::Stack Wed Apr 22 2020 18:30:48 User Initiated
CREATE_IN_PROGRESS OutputBucket AWS::S3::Bucket Wed Apr 22 2020 18:30:51 GMT+0000 (Coordinated Universal Time)
CREATE_FAILED OutputBucket AWS::S3::Bucket vodemand-dev-output-6dcnv1y6 already exists in stack arn:aws:cloudformation:us-east-1:XXXXXXXX:stack/amplify-vodemand-dev-132429-videovodemand-1E7142Q2DTMT0-rS3OutputBucket-19CWIVGBI84EH/01dc03f0-8242-11ea-af31-0ec446493c7d
CREATE_FAILED amplify-vodemand-prod-182909-videovodemand-177J3HP6VWX6D-rS3OutputBucket-EXHKMX1GY47G AWS::CloudFormation::Stack Wed Apr 22 2020 18:30:52 GMT+0000 (Coordinated Universal Time) The following resource(s) failed to create: [OutputBucket].

Following resources failed

Resource Name: OutputBucket (AWS::S3::Bucket)
Event Type: create
Reason: myvodstreams-dev-output-ll6yvsv4 already exists in stack arn:aws:cloudformation:us-east-1:XXXXXXXXX:stack/amplify-vod-dev-200807-videomyvodstreams-15S1QGUQGGMUX-rS3OutputBucket-1LWO35RPVZYR2/90dacba0-84d5-11ea-8fdd-0ed4cff9b69d

Resource Name: JobTemplate (AWS::MediaConvert::JobTemplate)
Event Type: create
Reason: Amplify_Video_Ott_Hls_Ts_Avc_Aac-myvodstreams-dev already exists in stack arn:aws:cloudformation:us-east-1:XXXXXXX:stack/amplify-vod-dev-200807-videomyvodstreams-15S1QGUQGGMUX-rMediaConvertTemplate-1R9Z6HB1TZABW/90bf2d50-84d5-11ea-90c1-0a39c55408a9
Ideally it should create new buckets as its a new prod environment and I am not sure why it says bucket exists of existing dev environment

Also when I am switching environment there is no change in below 2 folders:

amplify/backend
2.amplify/#current-cloud-backend
I tried many times by creating new environment name but but it keeps on happening

Amplify CLI Version
4.18.0
To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):
Using Linux Cloud 9
node version : v10.20.1

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Just audio support?

I would like to stream just audio like a live FM. Would it possible with this plugin? Like amplify-audio?
If not possible with the current version, can we expect one anytime soon?
Is there anyway I can achieve audio streaming much simplier or easier way?

Thanks.

Migrate all existing console.log to amplify logging solution context.print

Is your feature request related to a problem? Please describe.
Right now we use console.log and context.print throughout the project. We should move to using a single unified way of logging.

With context.print you can get easily get different colors and bolding that will be unify across amplify.

Right now Amplify supports:
info - Displays info (White)
warning - Displays a warning (Yellow)
error - Displays an error (Red)
success - Displays a success message (Green)
green - Displays text in Green
yellow - Displays text in Yellow
red - Displays text in Red
blue - Displays text in Blue (This should be used for outputs.)

Describe the solution you'd like
Replace the console.log with the respective output that you would expect. Can keep the strings the same with chalk formatting (as long as coloring is removed).

Authorized Content Access via Amplify-Video

Is your feature request related to a problem? Please describe.
As an Amplify-Video user, I'd like to authenticate uers via amplify auth and authorize access to specific amplify-video resources (livestream or VOD) through cloudfront or directly from an origin (S3, mediastore, mediapackage)

Describe the solution you'd like
When creating an amplify-video resource via the CLI, ask if authorized access is required. If yes, create/use existing project cognito user-pool to authenticate and authorize access to resources. For resources fronted by CDN, content access should be limited only to the origin via cloudfront OAID and signed-cookies should be set via Lambda managed by amplify-video.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

amplify video setup sync does not work

Describe the bug
amplify video configure does not search the amplify video vod and livestream helpers folder and resync them before pushing to the cloud and instead pushes local files to the cloud. This needs to get changed before to the new version.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Amplify can't setup OBS on Ubuntu on Windows.

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
dirkmanxxx@MININT-J9ETXXX:/mnt/c/Users/dirkjan/Downloads$ sudo amplify video setup-obs
? Choose what project you want to configure OBS for? Unicornquiz
OBS profile not folder not found. Switching to project folder.
/usr/lib/node_modules/@aws-amplify/cli/node_modules/gluegun/build/index.js:13
throw up;
^

Error: ENOENT: no such file or directory, mkdir 'undefined/OBS/'
at Proxy.mkdirSync (fs.js:764:3)
at prettifyOutput (/usr/lib/node_modules/amplify-category-video/extensions/livstream-obs.js:62:8)
at getLiveStreamInfo (/usr/lib/node_modules/amplify-category-video/extensions/livstream-obs.js:37:15)
at processTicksAndRejections (internal/process/task_queues.js:85:5)
at async EmptyToolbox.context.setupOBS (/usr/lib/node_modules/amplify-category-video/extensions/livstream-obs.js:10:5) {
errno: -2,
syscall: 'mkdir',
code: 'ENOENT',
path: 'undefined/OBS/'
}

Desktop (please complete the following information):

  • OS: Windows - using Ubuntu 18.4
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Template is not moved to the Amplify/ folder

Describe the bug
Template used by the VoD template is not placed in the Amplify/ folder making it hard for customers to add new templates to their project or edit the template to add features like thumbnails.

To Reproduce
Create a VoD project and select a default template from Amplify. The template will be added to the project but you can't edit it.

Expected behavior
The template can be edited in the Amplify/ folder and pushed when running Amplify push.

Additional context
Refactor from pushing the template during pushing the resource to using CloudFormation to push the resource.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconvert-jobtemplate.html

Launch CloudFront without signed URLs

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
users need an option to launch a production workload without using signed urls
Describe the solution you'd like
A clear and concise description of what you want to happen.
The VOD questions should go something like this.

"Is this a production workload? (Y/N) --> Y"
"Do you want to secure content using Cloudfront Signed URLs? (Y/N)--> Y"
"Provide your pem key location"

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

S3 endpoint issues / Access denied errors - IAM with full access

Describe the bug
I've tried all combinations of amplify add video ranging from yes/no for create a distribution, autostart: yes/no, all types of methods. In the end, all combinations of enabling/disabling options end with error:

CREATE_IN_PROGRESS rMP AWS::CloudFormation::Stack Wed Dec 18 2019 03:56:10 GMT-0800 (Pacific Standard Time)
CREATE_FAILED      rMP AWS::CloudFormation::Stack Wed Dec 18 2019 03:56:11 GMT-0800 (Pacific Standard Time) S3 error: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. For more information check http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
⠋ Updating resources in the cloud. This may take a few minutes...

CREATE_FAILED mylivestream-prd-20191218035347-videomylivestream-CB2G4388G54G AWS::CloudFormation::Stack Wed Dec 18 2019 03:56:12 GMT-0800 (Pacific Standard Time) The following resource(s) failed to create: [rMP].
⠇ Updating resources in the cloud. This may take a few minutes...

CREATE_FAILED               videomylivestream           AWS::CloudFormation::Stack Wed Dec 18 2019 03:56:17 GMT-0800 (Pacific Standard Time) Embedded stack arn:aws:cloudformation:us-west-2:541764378143:stack/mylivestream-prd-20191218035347-videomylivestream-CB2G4388G54G/5f64ac40-218d-11ea-98e0-0acc43cbe642 was not successfully created: The following resource(s) failed to create: [rMP].

When I add create distribution I receive even more errors, which I'm assuming are all linked to the first failure of S3: S3 error: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

To Reproduce
Steps to reproduce the behavior:

  1. amplify init
  2. amplify add video
  3. amplify push
  4. See error

Expected behavior
I expect it to push resources to the cloud, what am I missing? I followed exact instructions from the README.MD.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Mac os Mojave 10.14.4

Additional context
Template file:

{
  "AWSTemplateFormatVersion": "2010-09-09",

  "Description": "mylivestream",

  "Metadata": {
    "AWS::CloudFormation::Interface": {
      "ParameterGroups": [
        {
          "Label": { "default": "Provision: Source Files Configuration" },
          "Parameters": [
            "pS3",
            "pSourceFolder",
            "pPackageName"
          ]
        },
        {
          "Label": { "default": "Shared Settings: Encoding and Packaging Configuration" },
          "Parameters": [
            "pGopSizeInSec",
            "pGopPerSegment",
            "pSegmentPerPlaylist"
          ]
        },
        {
          "Label": { "default": "MediaLive: Channel Configuration" },
          "Parameters": [
            "pInputSecurityGroup",
            "pIngestType",
            "pEncodingProfile",
            "pGopSizeInSec",
            "pGopPerSegment",
            "pStartChannel"
          ]
        },
        {
          "Label": { "default": "MediaPackage: Channel Configuration" },
          "Parameters": [
            "pEndpoints",
            "pStartOverWindow"
          ]
        },
        {
          "Label": { "default": "MediaStore: Container Configuration" },
          "Parameters": [
            "pEnableMediaStore"
          ]
        },
        {
          "Label": { "default": "CloudFront: Distribution Configuration" },
          "Parameters": [
            "pEnableDistribution",
            "pPriceClass",
            "pS3CF",
            "pS3PrefixCF"
          ]
        }
      ],
      "ParameterLabels": {
        "env":{
          "default": "Env variable for Amplify"
        },
        "pProjectName": {
          "default": "Your project name"
        },
        "pS3": {
          "default": "S3 Bucket Name"
        },

        "pSourceFolder": {
          "default": "Source Folder"
        },

        "pPackageName": {
          "default": "Lambda Package Name"
        },

        "pGopSizeInSec": {
          "default": "GOP Size"
        },

        "pGopPerSegment": {
          "default": "GOP(s) Per Segment"
        },

        "pSegmentPerPlaylist": {
          "default": "Segment(s) Per Playlist"
        },

        "pInputSecurityGroup": {
          "default": "Input Security Group"
        },

        "pIngestType": {
          "default": "Ingest Type"
        },

        "pEncodingProfile": {
          "default": "Encoding Profile"
        },

        "pStartChannel": {
          "default": "Auto-start"
        },

        "pEndpoints": {
          "default": "Packaging Type(s)"
        },

        "pStartOverWindow": {
          "default": "Content Window (in seconds)"
        },

        "pEnableMediaStore": {
          "default": "Enable MediaStore?"
        },

        "pEnableDistribution": {
          "default": "Create distribution?"
        },

        "pPriceClass": {
          "default": "Price Class"
        },

        "pS3CF": {
          "default": "S3 Bucket for logs"
        },

        "pS3PrefixCF": {
          "default": "S3 Prefix (Folder) for logs"
        }
      }
    }
  },
  
  "Resources": {
  
    "rMP": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://s3.amazonaws.com/${pS3}/${pSourceFolder}/mediapackage.template"
        },
        "Parameters": {
          "pS3": {
            "Ref": "pS3"
          },

          "pSourceFolder": {
            "Ref": "pSourceFolder"
          },

          "pPackageName": {
            "Ref": "pPackageName"
          },

          "pProvisionLambdaHandler": "orchestration.MediaPackageChannel",

          "pChannelId": {
            "Fn::If": [
              "HasEnvironmentParameter",
              {
                "Fn::Join": [
                  "-",
                  [
                    {
                      "Ref": "pProjectName"
                    },
                    {
                      "Ref": "env"
                    }
                  ]
                ]
              },
              {
                "Ref": "pProjectName"
              }
            ]
          },

          "pIngestType": "hls",

          "pEndpoints": {
            "Fn::Join": [ ",", { "Ref": "pEndpoints" } ]
          },

          "pStartOverWindow": {
            "Ref": "pStartOverWindow"
          },

          "pGopSizeInSec": {
            "Ref": "pGopSizeInSec"
          },

          "pGopPerSegment": {
            "Ref": "pGopPerSegment"
          },

          "pSegmentPerPlaylist": {
            "Ref": "pSegmentPerPlaylist"
          }
        }
      }
    },
    
    "rML": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://s3.amazonaws.com/${pS3}/${pSourceFolder}/medialive.template"
        },
        "Parameters": {
          "pS3": {
            "Ref": "pS3"
          },

          "pSourceFolder": {
            "Ref": "pSourceFolder"
          },

          "pPackageName": {
            "Ref": "pPackageName"
          },

          "pProvisionLambdaHandler": "orchestration.MediaLiveChannel",

          "pChannelId": {
            "Fn::If": [
              "HasEnvironmentParameter",
              {
                "Fn::Join": [
                  "-",
                  [
                    {
                      "Ref": "pProjectName"
                    },
                    {
                      "Ref": "env"
                    }
                  ]
                ]
              },
              {
                "Ref": "pProjectName"
              }
            ]
          },

          "pInputSecurityGroup": {
            "Fn::Join": [ ",", { "Ref": "pInputSecurityGroup" } ]
          },

          "pIngestType": {
            "Ref": "pIngestType"
          },

          "pEncodingProfile": {
            "Ref": "pEncodingProfile"
          },

          "pGopSizeInSec": {
            "Ref": "pGopSizeInSec"
          },

          "pGopPerSegment": {
            "Ref": "pGopPerSegment"
          },

          "pSegmentPerPlaylist": {
            "Ref": "pSegmentPerPlaylist"
          },

          "pStartChannel": {
            "Ref": "pStartChannel"
          },
          
          "pEndpointUrls": {
            "Fn::GetAtt": [ "rMP", "Outputs.oIngestUrls" ]
          },

          "pUsernames": {
            "Fn::GetAtt": [ "rMP", "Outputs.oUsers" ]
          },

          "pParameterStoreKeys": {
            "Fn::GetAtt": [ "rMP", "Outputs.oParameterStoreKeys" ]
          },
          
          "pMediaStoreEndpoint": {
            "Fn::If": [
              "cEnableMediaStore",
              { "Fn::GetAtt": [ "rMS", "Outputs.oContainerEndpoint" ] },
              ""
            ]
          }
        }
      }
    },

    "rMS": {
      "Condition": "cEnableMediaStore",
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": {
          "Fn::Sub": "https://s3.amazonaws.com/${pS3}/${pSourceFolder}/mediastore.template"
        },
        "Parameters": {
          "pS3": {
            "Ref": "pS3"
          },

          "pSourceFolder": {
            "Ref": "pSourceFolder"
          },

          "pPackageName": {
            "Ref": "pPackageName"
          },

          "pProvisionLambdaHandler": "orchestration.MediaStoreContainer",

          "pContainerName": {
            "Fn::If": [
              "HasEnvironmentParameter",
              {
                "Fn::Join": [
                  "-",
                  [
                    {
                      "Ref": "pProjectName"
                    },
                    {
                      "Ref": "env"
                    }
                  ]
                ]
              },
              {
                "Ref": "pProjectName"
              }
            ]
          }
        }
      }
    }
  },

  "Parameters": {
    "env": {
      "Type": "String",
      "Description": "The environment name. e.g. Dev, Test, or Production",
      "Default": "NONE"
    },
    "pProjectName": {
      "Type": "String",
      "Description": "store template and lambda package",
      "Default": "mylivestream"
    },
    "pS3": {
      "Type": "String",
      "Description": "store template and lambda package",
      "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9-_]*",
      "Default": "mylivestream-prd-20191218035347-deployment"
    },

    "pSourceFolder": {
      "Type": "String",
      "Description": "store template and lambda package",
      "Default": "livestream-helpers"
    },

    "pPackageName": {
      "Type": "String",
      "Description": "lambda package zip file",
      "Default": "psdemo-js-live-workflow_v0.4.0.zip"
    },

    "pInputSecurityGroup": {
      "Type": "CommaDelimitedList",
      "Description": "comma delimited CIDR list. ie., 10.1.0.0/16,10.2.0.0/16",
      "Default": "0.0.0.0/0"
    },

    "pIngestType": {
      "Type": "String",
      "Description": "medialive ingest type",
      "AllowedValues": [ "RTP_PUSH", "UDP_PUSH", "RTMP_PUSH" ],
      "Default": "RTMP_PUSH"
    },

    "pEncodingProfile": {
      "Type": "String",
      "Description": "FULL (6 renditions), MOBILE (3 renditions), HD (single 1080p), SD (single 432p)",
      "Default": "MOBILE",
      "AllowedValues": [ "FULL", "MOBILE", "HD", "SD" ]
    },

    "pGopSizeInSec": {
      "Type": "Number",
      "Description": "specify GOP size in seconds. Use 1s to force IP-frame encode for low-latency.",
      "Default": "1",
      "MinValue": "1"
    },

    "pGopPerSegment": {
      "Type": "Number",
      "Description": "specify number of GOPs per segment. Use 1 for low-latency.",
      "Default": "2",
      "MinValue": "1"
    },

    "pStartChannel": {
      "Type": "String",
      "Description": "start the channel upon creation",
      "Default": "NO",
      "AllowedValues": [ "YES", "NO" ]
    },
    
    "pEndpoints": {
      "Type": "CommaDelimitedList",
      "Description": "output streaming standards. MediaPackage supports HLS, DASH, MSS, and/or CMAF",
      "Default": "CMAF",
      "AllowedValues": [
        "HLS", "HLS,DASH", "HLS,MSS", "HLS,DASH,MSS", "HLS,DASH,MSS,CMAF",
        "DASH", "DASH,MSS", "DASH,MSS,CMAF",
        "MSS", "MSS,CMAF",
        "CMAF"
      ]
    },

    "pStartOverWindow": {
      "Type": "Number",
      "Description": "specify catch-up TV window, max. 3 days (259200)",
      "Default": "86400",
      "MinValue": "60",
      "MaxValue": "259200"
    },
    

    "pSegmentPerPlaylist": {
      "Type": "Number",
      "Description": "specify number of segments per playlist/manifest, minimum 1 (recommended 3 and above)",
      "Default": "3",
      "MinValue": "1"
    },

    "pEnableMediaStore": {
      "Type": "String",
      "Description": "Caution: By enabling MediaStore, it clones the MediaLive output channels that will ingest to MediaStore origin.",
      "Default": "NO",
      "AllowedValues": [ "YES", "NO" ]
    },

    "pEnableDistribution": {
      "Type": "String",
      "Description": "",
      "Default": "NO",
      "AllowedValues": [ "YES", "NO" ]
    },
    

    "pPriceClass": {
      "Type": "String",
      "Description": "see http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html for details",
      "AllowedValues": [ "PriceClass_100", "PriceClass_200", "PriceClass_All" ],
      "Default": "PriceClass_100"
    },

    
    "pS3CF": {
      "Type": "String",
      "Description": "specify where CloudFront will deliver access logs to. Leave it blank to use the same bucket of this workflow.",
      "Default": ""
    },

    "pS3PrefixCF": {
      "Type": "String",
      "Description": "specify the prefix (folder) where CloudFront will deliver access logs to. Leave it as is.",
      "Default": ""
    }
  },

  "Conditions": {
    "cS3CF": {
      "Fn::Not": [
        {
          "Fn::Equals": [ { "Ref": "pS3CF" }, "" ]
        }
      ]
    },
    "cEnableMediaStore": {
      "Fn::Equals": [ { "Ref": "pEnableMediaStore" }, "YES" ]
    },

    "cEnableDistribution": {
      "Fn::Equals": [ { "Ref": "pEnableDistribution" }, "YES" ]
    },
    "HasEnvironmentParameter": {
      "Fn::Not": [
          {
              "Fn::Equals": [
                  {
                      "Ref": "env"
                  },
                  "NONE"
              ]
          }
      ]
    }
  },

  "Outputs": {
    "oMediaLiveChannelName": {
      "Value": { "Fn::GetAtt": [ "rML", "Outputs.oChannelName" ] },
      "Description": "MediaLive Channel Name"
    },

    "oMediaLiveChannelId": {
      "Value": { "Fn::GetAtt": [ "rML", "Outputs.oChannelId" ] },
      "Description": "MediaLive Channel Id"
    },

    "oMediaLivePrimaryIngestUrl": {
      "Value": { "Fn::GetAtt": [ "rML", "Outputs.oPrimaryIngestUrl" ] },
      "Description": "(P) MediaLive Ingest Url"
    },

    "oMediaLiveBackupIngestUrl": {
      "Value": { "Fn::GetAtt": [ "rML", "Outputs.oBackupIngestUrl" ] },
      "Description": "(B) MediaLive Ingest Url"
    },
    
    "oPrimaryHlsEgress": {
      "Value": {
        
          "Fn::GetAtt": [ "rMP", "Outputs.oHlsEndpoint" ]
        
      },
      "Description": "(P) HLS Egress Url"
    },

    "oPrimaryDashEgress": {
      "Value": {
        
          "Fn::GetAtt": [ "rMP", "Outputs.oDashEndpoint" ]
        
      },
      "Description": "(P) DASH Egress Url"
    },

    "oPrimaryMssEgress": {
      "Value": {
        
          "Fn::GetAtt": [ "rMP", "Outputs.oMssEndpoint" ]
        
      },
      "Description": "(P) MSS Egress Url"
    },

    "oPrimaryCmafEgress": {
      "Value": {
        
          "Fn::GetAtt": [ "rMP", "Outputs.oCmafEndpoint" ]
        
      },
      "Description": "(P) CMAF Egress Url"
    },
    
    "oMediaStoreContainerName": {
      "Condition": "cEnableMediaStore",
      "Value": { "Fn::GetAtt": [ "rMS", "Outputs.oContainerName" ] },
      "Description": "MediaStore Container Name"
    },

    "oMediaStoreContainerArn": {
      "Condition": "cEnableMediaStore",
      "Value": { "Fn::GetAtt": [ "rMS", "Outputs.oContainerArn" ] },
      "Description": "MediaStore Container Arn"
    },

    "oPrimaryMediaStoreEgressUrl": {
      "Condition": "cEnableMediaStore",
      "Value": { "Fn::GetAtt": [ "rML", "Outputs.oPrimaryMediaStoreEgressUrl" ] },
      "Description": "(P) MediaStore Egress Url"
    },

    "oBackupMediaStoreEgressUrl": {
      "Condition": "cEnableMediaStore",
      "Value": { "Fn::GetAtt": [ "rML", "Outputs.oBackupMediaStoreEgressUrl" ] },
      "Description": "(B) MediaStore Egress Url"
    }
  }
}

Amplify video add Error

After running the command: amplify video add , I got the following error:
C:\Users\menosc\AppData\Roaming\npm\node_modules@aws-amplify\cli\node_modules\gluegun\build\index.js:13
throw up;
^

Error: AdminPanelNew is present in amplify-meta.json
at Object.updateamplifyMetaAfterResourceAdd (C:\Users\menosc\AppData\Roaming\npm\node_modules@aws-amplify\cli\src\extensions\amplify-helpers\update-amplify-meta.js:84:11)
at copyFilesToLocal (C:\Users\menosc\AppData\Roaming\npm\node_modules\amplify-category-video\extensions\livestream-push.js:153:21)
at addLivestream (C:\Users\menosc\AppData\Roaming\npm\node_modules\amplify-category-video\extensions\livestream-push.js:89:9)
at process._tickCallback (internal/process/next_tick.js:68:7)

make boolean prompts in livestream all 'choice' selections

Is your feature request related to a problem? Please describe.
Right now there's two or three different styles of choice selectors. We should adopt a single method for selecting yes/no so that users aren't confused by varying input types.

`The Amplify CLI can NOT find command: video add`

Describe the bug
Amplify CLI can't find plugin

To Reproduce
Steps to reproduce the behavior:

  1. npm install @aws-amplify/cli -g
  2. output of amplify --version: 3.9.0
  3. npm install amplify-category-video -g
  4. amplify init
  5. amplify video add
  6. Get error The Amplify CLI can NOT find command: video add

Expected behavior
Expect it to all user to configure the video plugin

Desktop (please complete the following information):

  • OS: Mac OSX

Add support for medialive single pipeline

Is your feature request related to a problem? Please describe.
In live encoding system-design, cost and reliability are at odds. For professional broadcast content, like live sports, where distribution rights are measured in the millions, reliability, at any cost, is required. For other uses, like user-generated content, IoT, and small event streaming, pretty reliable_ streaming is acceptable in return for lower cost.

To support both models, MediaLive released a single pipeline option. This option essentially reduces a channel to a single-az and input in return for a ~%50 discount on cost.

Describe the solution you'd like
Add an option or default to single pipeline mode for users who are seeking cost reduction or only have a single source by setting "channelClass": "SINGLE_PIPELINE" in the channel templates we use as part of amplify video.

Additional context
There may be additional ramifications of this feature across medialive -> mediapackage. Need to further evaluate any dependencies on input/output changes to channel template.

Define what needs to be returned from CF for VOD

Right now our CloudFormation template doesn't return any info about the stack that was created. We need to define what info we want to return from phase 1 so that we can output it when the Amplify is done deploying it.

To Fix
We need to add an outputs section to vod-workflow.yaml.ejs from the resources created.

Notice:
This is on the VOD branch so changes should not be made to master for this.

Amplify verision command

Is your feature request related to a problem? Please describe.
amplify video version should return version info about the plugin.

$ amplify video version

Amplify-Category-Video @ 2.0.0

Describe the solution you'd like
First solution would just pull stuff straight from package.json

Second solution we should include a small change log under the version so people can see what has happened. This means we would need to track changes better. This could fall under our initiative to start adding unit tests.

Stretch goals
Added some ASCII Art to the version and help sections to spruce up the CLI. Have fun with this!

                  _  _  ___            _    _           
 ___ ._ _ _  ___ | |<_>| | '_ _   _ _ <_> _| | ___  ___ 
<_> || ' ' || . \| || || |-| | | | | || |/ . |/ ._>/ . \
<___||_|_|_||  _/|_||_||_| `_. | |__/ |_|\___|\___.\___/
            |_|            <___'                        

Create Contributor Guidelines

Is your feature request related to a problem? Please describe.
People want to contribute to amplify video, but we can't solicit contributions if we don't help them understand the amplify video project and the guidelines for contribution.

Describe the solution you'd like
something like this

  • a description of the codebase, major files and how the plug-in really works
  • an outline of the code standards - tab/spaces, etc.
  • where to get in touch or participate in design discussion - chat room? email? etc

Integration Testing

Is your feature request related to a problem? Please describe.
Write unit tests and add a test suite to run the tests on the plugin.

Describe the solution you'd like
Create simple unit tests to deploy a livestream, vod, etc... and make sure that the cloudformation succeeds and then spins back down. This will require an AWS account to run the creation and deletion of resources. This will only be run on merges and not on branches. If there is no issue the final push will trigger a new release on npm.

Add more default templates to VOD

Is your feature request related to a problem? Please describe.
Add 2 or more defaults to VOD.

Describe the solution you'd like
Add more defaults then provide:

"options": [
    {
        "name": "Apple HLS Standard H.264 HD",
        "value": "System-Ott_Hls_Ts_Avc_Aac"
    },
    {
        "name": "MPEG DASH H.264 HD",
        "value": "System-Ott_Dash_Mp4_Avc_Aac"
    },
    {
        "name": "Advanced (specify template name)",
        "value": "advanced"
    }
],

Additional context
This should only modify vod-questions.json

Video On Demand doesn't have unique s3 bucket names

Describe the bug
When creating the input and output bucket the S3 buckets aren't unique. This could cause issues when running workshops or big events. Will need to pre-append a unique string to fix this.

Media Package, in VOD workflow.

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.
I would like to see Media Package enabled with the VOD solution, It would not only help reduce the trans-coding costs. Also helps with delivering gracefully using DRM.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Installer Success Message

Is your feature request related to a problem? Please describe.
There's a lot of messages that come out of the npm install process, we should add a simple message confirming that everything has been handled "correctly" by the installer.

Describe the solution you'd like
echo Thanks for installing amplify video. To get started run amplify video`

Allow For Different MediaConvert Template by File Extension

Is your feature request related to a problem? Please describe.
I would like the ability to be able to use different MediaConvert templates for different types of files. For example a template for video, .mp4, files and a different one for audio, .mp3, files.

Describe the solution you'd like
The trigger lamda could look for environment variables that provide template ARN based on the file extension passed in the event.

Additional context
Example implementation:

// Get the extension of the file passed in the event
  const FileExtension = AddedKey.split('.').pop();
console.log(`Using queue:  ${queueARN}`);

  let templateARN = '';
  const templateARNEnvironmentVariable = `${FileExtension}_ARN_TEMPLATE`;
  console.log(`Reading template ARN from:  ${templateARNEnvironmentVariable}`);
  // Look for an environment variable named with the file extension
  if (process.env[templateARNEnvironmentVariable]) {
    // If found, use the template ARN stored in that variable
    templateARN = process.env[templateARNEnvironmentVariable];
  } else {
    // If not found, use the template ARN from the default variable
    templateARN = process.env.ARN_TEMPLATE;
  }
  console.log(`Using template:  ${templateARN}`);
const jobParams = {
    JobTemplate: templateARN,
    Queue: queueARN,
    UserMetadata: {},
    Role: process.env.MC_ROLE,
    Settings: jobSettings,
  };
  await mcClient.createJob(jobParams).promise();

RTSP

Hi, does it work for RTSP webcams too ?

VOD Advanced Features

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
There is currently no monitoring features launched by amplify video.

Describe the solution you'd like
A clear and concise description of what you want to happen.

Implement an advanced features vod mode with the following features.

  1. Amplify Video should configure CloudWatch Events for MediaConvert job status.
  2. Automatically configure Route 53 to serve CloudFront content.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Add support for optional DRM for VoD

Is your feature request related to a problem? Please describe.
N/A

Describe the solution you'd like
Add a way to bring DRM into your solution with ease, or possibly even spin up a DRM source like FairPlay

Support for File-Based Inputs for Live Streaming

Is your feature request related to a problem? Please describe.
It would be useful to allow amplify video users to input a file based source for their live stream. Initially we could simply support a 'looped file' mode that would simply loop the source provided via HTTP URI. In the future, we'd want to support mixed file + live sources so that users could control pre/post rolls in addition to a live source.

Describe the solution you'd like
Implement FILE_URI in flagfish.js and add it as an option in the CLI question flow in https://github.com/awslabs/amplify-video/blob/master/provider-utils/livestream-questions.json

Migrate all functions to NodeJS 12.x

Is your feature request related to a problem? Please describe.
N/A

Describe the solution you'd like
Move all functions to NodeJS 12.x. This requires doing testing of all functions after migration is done to verify no functionality has changed.

Additional context
Want to keep on the most recent version of NodeJS LTS on our repo.

successfully configured message

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
at the very end of amplify video add, there should be a message that says "successfully configured $resource_name" that way users will know that they are ready to amplify push.
Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Offer to overwrite or append to schema

Describe the bug
Schema always appends to existing schema. This could break things as the schema could already contain the needed resources.

To Reproduce
Run through video walkthrough and then use update functionality.

Expected behavior
Prompt to overwrite or append.

Additional context
This could be streamlined better by having buy in by the amplify team on providing a headless configuration for API.

Documentation: Sample IAM Policies for using this plugin

Is your feature request related to a problem? Please describe.
Amplify provides a sample IAM Policy for base services at https://aws-amplify.github.io/docs/cli-toolchain/usage#iam-policy-for-the-cli

It would be desirable to include an equivalent policy for the Live and VOD components of Amplify video

Describe the solution you'd like
Sample JSON files with appropriate IAM Policies for using these capabilities in an Amplify project

Describe alternatives you've considered
Alternatives are to either use Administrator policy, or to experiment with existing Managed Policies related to MediaPackage, MediaConvert etc. There is likely an opportunity to provide a more tightly scoped policy than these broad ones.

CloudFront support for VoD

Is your feature request related to a problem? Please describe.
Add VoD support to Amplify Video #4

Describe the solution you'd like
Finish CloudFormation for CloudFront and add signed URL as option

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.