Products
Products
Video Hosting
Upload and manage your videos in a centralized video library.
Image Hosting
Upload and manage all your images in a centralized library.
Galleries
Choose from 100+templates to showcase your media in style.
Video Messaging
Record, and send personalized video messages.
CincoTube
Create your own community video hub your team, students or fans.
Pages
Create dedicated webpages to share your videos and images.
Live
Create dedicated webpages to share your videos and images.
For Developers
Video API
Build a unique video experience.
DeepUploader
Collect and store user content from anywhere with our file uploader.
Solutions
Solutions
Enterprise
Supercharge your business with secure, internal communication.
Townhall
Webinars
Team Collaboration
Learning & Development
Creative Professionals
Get creative with a built in-suite of editing and marketing tools.
eCommerce
Boost sales with interactive video and easy-embedding.
Townhall
Webinars
Team Collaboration
Learning & Development
eLearning & Training
Host and share course materials in a centralized portal.
Sales & Marketing
Attract, engage and convert with interactive tools and analytics.
"Cincopa helped my Enterprise organization collaborate better through video."
Book a Demo
Resources
Resources
Blog
Learn about the latest industry trends, tips & tricks.
Help Centre
Get access to help articles FAQs, and all things Cincopa.
Partners
Check out our valued list of partners.
Product Updates
Stay up-to-date with our latest greatest features.
Ebooks, Guides & More
Customer Stories
Hear how we've helped businesses succeed.
Boost Campaign Performance Through Video
Discover how to boost your next campaign by using video.
Download Now
Pricing
Watch a Demo
Demo
Login
Start Free Trial
AWS Amplify is a development platform that connects mobile apps to cloud services. It works with iOS, Android, Flutter, and React Native apps, and helps add features like user login (using Cognito), data storage (with DynamoDB and AppSync), file uploads (to S3), and APIs (GraphQL or REST). Amplify comes with ready-to-use SDKs and a command-line tool that can automatically set up cloud resources, so developers don’t have to do everything manually. It handles common mobile needs like secure login, syncing data when offline, and processing media files (like uploading, converting, and playing videos). Overview of Amplify SDK for Mobile Environments Amplify’s mobile SDKs interact with AWS services through declarative configuration, managed via the CLI or Amplify Studio. The SDK is modular: amplify-auth handles Cognito, amplify-datastore syncs offline data, and amplify-storage manages S3 operations. Mobile clients initialize these modules through generated configuration files ( aws-exports.js or amplifyconfiguration.json ), which map to your cloud backend. // iOS initialization try Amplify.configure() // Android initialization Amplify.configure(applicationContext) Setting Up Amplify CLI and Mobile SDKs The CLI scaffolds cloud resources and generates platform-specific SDK configurations. After installing Node.js and the CLI, run amplify init to create a project, then add services like Auth or Storage. The CLI auto-generates client-side configuration files. # Initialize project amplify init # Add Auth (Cognito) amplify add auth # Deploy amplify push Explanation : amplify init initializes a new Amplify project and sets up the backend environment. amplify add auth adds authentication features to the project using Amazon Cognito. amplify push deploys the configured backend resources to the AWS cloud. # Flutter pubspec.yaml dependencies: amplify_flutter: ^5.0.0 Integrating Authentication Workflows Amplify Auth wraps Cognito for mobile-friendly auth flows. Sessions are managed locally, with tokens refreshed automatically. The SDK exposes methods for sign-in, sign-up, and MFA , with state listeners for UI updates. // Swift: Sign-in Amplify.Auth.signIn( username: 'user@domain.com', password: 'password' ) { result in /* Handle session */ } // Kotlin: Fetch session Amplify.Auth.fetchAuthSession { session -> when (val cognitoToken = session as? AWSCognitoAuthSession) { is AWSCognitoAuthSession -> { /* Use tokens */ } } } Using Amplify DataStore and API (GraphQL + REST) DataStore provides offline-first CRUD operations with automatic sync to AppSync (GraphQL) or REST APIs. Define models in GraphQL schema syntax, and the CLI generates client-side classes. // schema.graphql type Video @model @auth(rules: [{allow: owner}]) { id: ID! title: String! duration: Int } // Flutter: Query offline data final videos = await Amplify.DataStore.query(Video.classType); Secure File Upload with Amplify Storage Amplify Storage uses S3 with pre-signed URLs for secure uploads/downloads. The SDK handles multipart uploads, progress tracking, and retries. // Android: Upload with progress listener val upload = Amplify.Storage.uploadFile( 'videos/${UUID.randomUUID()}.mp4', File(localPath), { progress -> /* Update UI */ }, { result -> /* Handle success */ } ) Explanation : Calls Amplify.Storage.uploadFile to start uploading a file to cloud storage. Assigns a unique name to the file using UUID.randomUUID() and stores it in the videos/ directory. Passes the local file path using File(localPath) . Role-Based Access Control in Mobile Contexts Cognito Identity Pools assign IAM roles to users, which Amplify translates into fine-grained S3 or API access. Use group membership or custom claims to gate actions. // Swift: Check user group if let groups = try? Amplify.Auth.fetchUserAttributes() .filter({ $0.key == .custom('groups') }) { // Validate access } Explanation : Calls Amplify.Auth.fetchUserAttributes() to retrieve the current user's attributes. Filters the attributes to extract the one with the custom key 'groups' . Uses optional binding with try? to safely handle potential errors during attribute fetch. Video-Centric Workflows Using Amplify Uploading Mobile Video to S3 Mobile apps upload videos to S3 via Amplify Storage, which supports background transfers and network resilience. Use UUIDs for object keys to avoid collisions. // Flutter: Upload with metadata await Amplify.Storage.uploadFile( key: 'user123/${DateTime.now().millisecondsSinceEpoch}.mp4', local: File('path/to/video.mp4'), metadata: {'device': 'iOS'} ).result; Explanation : Uses Amplify.Storage.uploadFile() in Flutter to upload a video file. Generates a unique key using the current timestamp and user ID. Specifies the local file path using a File object. Attaches custom metadata ( device: iOS ) with the upload request. Triggering MediaConvert Jobs via Lambda Configure an S3 trigger to invoke Lambda when videos are uploaded. The Lambda starts an AWS Elemental MediaConvert job to transcode into HLS/DASH. // Lambda: Create MediaConvert job const params = { Role: 'arn:aws:iam::123456789012:role/MediaConvertRole', Settings: { /* HLS outputs */ } }; await mediaConvert.createJob(params).promise(); Explanation : Defines a params object to configure an AWS MediaConvert job. Specifies the IAM role ( MediaConvertRole ) with the necessary permissions. Includes the Settings key to define output configurations such as HLS presets. Calls mediaConvert.createJob(params).promise() to submit the job asynchronously. Managing Metadata for Uploaded Media Extract metadata (e.g., duration, resolution) using ffprobe in Lambda and store it in DynamoDB for mobile retrieval. # Lambda: Extract metadata with ffprobe import subprocess result = subprocess.run(['ffprobe', '-v', 'error', '-show_format', '-of', 'json', 's3://bucket/key'], stdout=subprocess.PIPE) metadata = json.loads(result.stdout) Explanation : Imports the subprocess module to run shell commands from within Python. Runs the ffprobe command to extract format metadata from a video file stored in S3. Uses flags to suppress errors, limit output to format data, and return it in JSON format. Secure Playback with Signed CloudFront URLs Generate time-limited CloudFront URLs for secure streaming. Amplify’s getUrl method integrates with CloudFront signing. // React Native: Generate signed URL const url = await Amplify.Storage.getUrl('videos/stream.m3u8', { expires: 3600 // 1 hour }); Explanation : Calls Amplify.Storage.getUrl to generate a signed URL for accessing a video file. Specifies the object key as 'videos/stream.m3u8' . Sets the expiration time to 3600 seconds (1 hour). Offline and Adaptive Video Access Strategies Cache HLS manifests and segments using ExoPlayer (Android) or AVPlayer (iOS). Implement token refresh logic for expired URLs. // iOS: Refresh expired URL if error.code == .signedURLExpired { let newURL = await Amplify.Storage.getUrl(key: videoKey) avPlayer.replaceCurrentItem(with: AVPlayerItem(url: newURL)) } Explanation : If expired, calls Amplify.Storage.getUrl with the videoKey to fetch a new signed URL. Creates a new AVPlayerItem using the refreshed URL. Tracking Engagement via Analytics and Events Amplify Analytics records video interactions (play, pause, completion) and forwards them to Amazon Pinpoint for analysis. // Track play event Amplify.Analytics.record({ name: 'video_play', attributes: { videoId: '123', duration: 120 } }); Explanation : Uses Amplify.Analytics.record to log a custom analytics event. Sets the event name to 'video_play' . Includes attributes such as videoId set to '123' and duration set to 120 .