-
Notifications
You must be signed in to change notification settings - Fork 1
AWS Serverless Video Transcoding
- Go to CloudFormation Stacks.
- Make sure you are in the correct region before importing the template
- Create a stack with new resources using the template file located at /config/aws/forest_transcoder.yaml. Set the stack name to
forestTranscoder. Specify your app's S3 bucket name as thebucketNameparameter.
- Go to MediaConvert job templates list, make sure you are in N. Virginia (us-east-1) region.
- Import new job template named
forest-transcode-videousing the file located at /config/aws/forest-transcode-video-job-settings.json. - Click the "Account"* link, then copy the API endpoint URL. Add this URL to your Rails credentials:
aws_media_convert_endpoint: https://abc123.mediaconvert.us-east-1.amazonaws.com
- *This "Account" link seemed to be gone now. Instead, you can use the
awsCLI to get it:aws mediaconvert describe-endpoints --profile my-aws-profile --region us-east-1
- *This "Account" link seemed to be gone now. Instead, you can use the
This function should be refactored and created in the CloudFormation step.
- Go to Lambda Layers.
- Create a new layer named
ffprobe. Upload the zip file located at /config/aws/ffprobe.zip- Compatible architectures:
x86_64 - Compatible runtimes: select Ruby 3.2 and the latest versions Python and Node.js.
- Compatible architectures:
- Go to Lambda Functions.
- Create a new function named
ffprobe.- Runtime: Ruby 3.2,
x86_64architecture. - Click "Change default execution role" and create a new role from AWS policy templates. Role name:
lambda-s3-read-only. Select the pre-configuredAmazon S3 object read-only permissionspermission policy. - Specify the general configuration timeout to 2 minutes or more. Set the memory to 256mb or more.
- Edit the function and replace code with /config/aws/ffprobe_lambda_function.rb. Press deploy to save the changes.
- Add a layer to the function. Select custom layers and choose the
ffprobe(version 1) layer we just created.
- Runtime: Ruby 3.2,
You'll need to update your IAM S3 user with additional permissions to access MediaConvert and Lambda. Use the following JSON to add these permissions to your S3 user. For the lambda:InvokeFunction you'll need the Lambda function resource identifier. You can use the permissions GUI to select the function, or find the resource identifier and paste it into the JSON.
{
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": [
"arn:aws:lambda:us-east-1:123456789:function:TranscodeVideo",
"arn:aws:lambda:us-east-1:123456789:function:ffprobe"
]
},
{
"Effect": "Allow",
"Action": [
"mediaconvert:GetJob"
],
"Resource": "*"
}Videos that are uploaded to the media library will be automatically transcoded using the resources specified above. Once transcoded, you can interact with the videos using the video_list method, which returns a Forest::VideoList object. Interact with individual videos contained in the Forest::VideoList object with the videos method.
-
MediaItem.videos.last.video_list.videos-> Return a list of transcoded videos at various sizes for this media item. -
MediaItem.videos.last.video_list.high_res-> Return the high res video for this transcoded video.